diff options
author | Niels Provos <provos@gmail.com> | 2007-09-09 03:10:16 +0000 |
---|---|---|
committer | Niels Provos <provos@gmail.com> | 2007-09-09 03:10:16 +0000 |
commit | babd622f7ab9e8d3cb4004700fcf2f9dadd4bd4b (patch) | |
tree | 4f7fe1fe08ed8f770276181ec52ad1b1d7a02254 /event_rpcgen.py | |
parent | e2f564116e1bcdcf2c6500c1552fcc25de810c53 (diff) | |
download | libevent-babd622f7ab9e8d3cb4004700fcf2f9dadd4bd4b.tar.gz |
make allocating array members in event_rpcgen more efficient, but doubling the size of
available slots every time we run out.
svn:r421
Diffstat (limited to 'event_rpcgen.py')
-rwxr-xr-x | event_rpcgen.py | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/event_rpcgen.py b/event_rpcgen.py index 54a1878a..07fdf383 100755 --- a/event_rpcgen.py +++ b/event_rpcgen.py @@ -930,9 +930,15 @@ class EntryArray(Entry): self._struct.Name(), name, self._struct.Name()), '{', ' msg->%s_length++;' % name, - ' msg->%s_data = (struct %s**)realloc(msg->%s_data, ' - ' msg->%s_length * sizeof(struct %s*));' % ( + ' if (msg->%s_length >= msg->%s_num_allocated) { ' % (name, name), + ' if (!msg->%s_num_allocated) ' % name, + ' msg->%s_num_allocated = 1; ' % name, + ' else ', + ' msg->%s_num_allocated <<= 1; ' % name, + ' msg->%s_data = (struct %s**)realloc(msg->%s_data, ' + ' msg->%s_num_allocated * sizeof(struct %s*));' % ( name, self._refname, name, name, self._refname ), + ' }', ' if (msg->%s_data == NULL)' % name, ' return (NULL);', ' msg->%s_data[msg->%s_length - 1] = %s_new();' % ( @@ -1005,6 +1011,7 @@ class EntryArray(Entry): ' %s->%s_data = NULL;' % (structname, self.Name()), ' %s->%s_set = 0;' % (structname, self.Name()), ' %s->%s_length = 0;' % (structname, self.Name()), + ' %s->%s_num_allocated = 0;' % (structname, self.Name()), '}' ] @@ -1012,7 +1019,8 @@ class EntryArray(Entry): def CodeNew(self, name): code = ['%s->%s_data = NULL;' % (name, self._name), - '%s->%s_length = 0;' % (name, self._name)] + '%s->%s_length = 0;' % (name, self._name), + '%s->%s_num_allocated = 0;' % (name, self._name)] code.extend(Entry.CodeNew(self, name)) return code @@ -1028,6 +1036,7 @@ class EntryArray(Entry): ' free(%s->%s_data);' % (name, self._name), ' %s->%s_data = NULL;' % (name, self._name), ' %s->%s_length = 0;' % (name, self._name), + ' %s->%s_num_allocated = 0;' % (name, self._name), '}' ] @@ -1035,7 +1044,8 @@ class EntryArray(Entry): def Declaration(self): dcl = ['struct %s **%s_data;' % (self._refname, self._name), - 'int %s_length;' % self._name] + 'int %s_length;' % self._name, + 'int %s_num_allocated;' % self._name ] return dcl |