|
@@ -7,11 +7,11 @@
|
|
|
#define __CONTAINER_H
|
|
|
#define CONTAINER_H_ID "$Id$"
|
|
|
|
|
|
-/** Generic resizeable array. */
|
|
|
-typedef struct smartlist_t smartlist_t;
|
|
|
-#ifdef FAST_SMARTLIST
|
|
|
+#import "compat.h"
|
|
|
+#import "util.h"
|
|
|
|
|
|
-struct smartlist_t {
|
|
|
+/** A resizeable list of pointers, with associated helpful functionality. */
|
|
|
+typedef struct smartlist_t {
|
|
|
/** <b>list</b> has enough capacity to store exactly <b>capacity</b> elements
|
|
|
* before it needs to be resized. Only the first <b>num_used</b> (\<=
|
|
|
* capacity) elements point to valid data.
|
|
@@ -19,8 +19,7 @@ struct smartlist_t {
|
|
|
void **list;
|
|
|
int num_used;
|
|
|
int capacity;
|
|
|
-};
|
|
|
-#endif
|
|
|
+} smartlist_t;
|
|
|
|
|
|
smartlist_t *smartlist_create(void);
|
|
|
void smartlist_free(smartlist_t *sl);
|
|
@@ -38,15 +37,32 @@ int smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2);
|
|
|
void smartlist_intersect(smartlist_t *sl1, const smartlist_t *sl2);
|
|
|
void smartlist_subtract(smartlist_t *sl1, const smartlist_t *sl2);
|
|
|
/* smartlist_choose() is defined in crypto.[ch] */
|
|
|
-#ifndef FAST_SMARTLIST
|
|
|
-void *smartlist_get(const smartlist_t *sl, int idx);
|
|
|
-void smartlist_set(smartlist_t *sl, int idx, void *val);
|
|
|
-int smartlist_len(const smartlist_t *sl);
|
|
|
-#else
|
|
|
-#define smartlist_get(sl,idx) ((sl)->list[(idx)])
|
|
|
-#define smartlist_set(sl,idx,val) ((sl)->list[(idx)] = val)
|
|
|
-#define smartlist_len(sl) ((sl)->num_used)
|
|
|
+/** Return the number of items in sl.
|
|
|
+ */
|
|
|
+extern INLINE int smartlist_len(const smartlist_t *sl) {
|
|
|
+#ifdef DEBUG_SMARTLIST
|
|
|
+ tor_assert(sl);
|
|
|
+#endif
|
|
|
+ return (sl)->num_used;
|
|
|
+}
|
|
|
+/** Return the <b>idx</b>th element of sl.
|
|
|
+ */
|
|
|
+extern INLINE void *smartlist_get(const smartlist_t *sl, int idx) {
|
|
|
+#ifdef DEBUG_SMARTLIST
|
|
|
+ tor_assert(sl);
|
|
|
+ tor_assert(idx>=0);
|
|
|
+ tor_assert(sl->num_used < idx);
|
|
|
+#endif
|
|
|
+ return sl->list[idx];
|
|
|
+}
|
|
|
+extern INLINE void smartlist_set(smartlist_t *sl, int idx, void *val) {
|
|
|
+#ifdef DEBUG_SMARTLIST
|
|
|
+ tor_assert(sl);
|
|
|
+ tor_assert(idx>=0);
|
|
|
+ tor_assert(sl->num_used < idx);
|
|
|
#endif
|
|
|
+ sl->list[idx] = val;
|
|
|
+}
|
|
|
void smartlist_del(smartlist_t *sl, int idx);
|
|
|
void smartlist_del_keeporder(smartlist_t *sl, int idx);
|
|
|
void smartlist_insert(smartlist_t *sl, int idx, void *val);
|