summaryrefslogtreecommitdiff
path: root/event_rpcgen.py
diff options
context:
space:
mode:
authorNiels Provos <provos@gmail.com>2007-09-09 03:10:16 +0000
committerNiels Provos <provos@gmail.com>2007-09-09 03:10:16 +0000
commitbabd622f7ab9e8d3cb4004700fcf2f9dadd4bd4b (patch)
tree4f7fe1fe08ed8f770276181ec52ad1b1d7a02254 /event_rpcgen.py
parente2f564116e1bcdcf2c6500c1552fcc25de810c53 (diff)
downloadlibevent-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-xevent_rpcgen.py18
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