[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] Make smartlists start small and grow as needed.
Update of /home/or/cvsroot/src/common
In directory moria.mit.edu:/tmp/cvs-serv10922/src/common
Modified Files:
util.c util.h
Log Message:
Make smartlists start small and grow as needed.
Index: util.c
===================================================================
RCS file: /home/or/cvsroot/src/common/util.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -d -r1.70 -r1.71
--- util.c 21 Mar 2004 04:14:06 -0000 1.70
+++ util.c 30 Mar 2004 19:25:43 -0000 1.71
@@ -117,12 +117,17 @@
* _add() adds an element, _remove() removes an element if it's there,
* _choose() returns a random element.
*/
+#define SL_DEFAULT_CAPACITY 32
smartlist_t *smartlist_create(int max_elements) {
smartlist_t *sl = tor_malloc(sizeof(smartlist_t));
- sl->list = tor_malloc(sizeof(void *) * max_elements);
sl->num_used = 0;
sl->max = max_elements;
+ if (max_elements <= SL_DEFAULT_CAPACITY)
+ sl->capacity = max_elements;
+ else
+ sl->capacity = SL_DEFAULT_CAPACITY;
+ sl->list = tor_malloc(sizeof(void *) * sl->capacity);
return sl;
}
@@ -131,11 +136,22 @@
free(sl);
}
+void smartlist_grow_capacity(smartlist_t *sl, int n) {
+ if (sl->capacity < n) {
+ sl->capacity = n;
+ sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
+ }
+}
+
/* add element to the list, but only if there's room */
void smartlist_add(smartlist_t *sl, void *element) {
- if(sl->num_used < sl->max)
+ if (sl->num_used < sl->max) {
+ if (sl->num_used >= sl->capacity) {
+ sl->capacity *= 2;
+ sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
+ }
sl->list[sl->num_used++] = element;
- else
+ } else
log_fn(LOG_WARN,"We've already got %d elements, discarding.",sl->max);
}
Index: util.h
===================================================================
RCS file: /home/or/cvsroot/src/common/util.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- util.h 21 Mar 2004 04:14:06 -0000 1.40
+++ util.h 30 Mar 2004 19:25:43 -0000 1.41
@@ -62,10 +62,12 @@
void **list;
int num_used;
int max;
+ int capacity;
} smartlist_t;
smartlist_t *smartlist_create(int max_elements);
void smartlist_free(smartlist_t *sl);
+void smartlist_grow_capacity(smartlist_t *sl, int n);
void smartlist_add(smartlist_t *sl, void *element);
void smartlist_remove(smartlist_t *sl, void *element);
int smartlist_isin(smartlist_t *sl, void *element);