[or-cvs] Inline key smartlist functions; use fast versions by defau...

Nick Mathewson nickm at seul.org
Tue Oct 18 04:51:10 UTC 2005


Update of /home/or/cvsroot/tor/src/common
In directory moria:/tmp/cvs-serv25727/src/common

Modified Files:
	container.c container.h util.h 
Log Message:
Inline  key smartlist functions; use fast versions by default.

Index: container.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/common/container.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- container.c	6 Oct 2005 04:33:40 -0000	1.44
+++ container.c	18 Oct 2005 04:51:07 -0000	1.45
@@ -28,19 +28,6 @@
  */
 #define SMARTLIST_DEFAULT_CAPACITY 32
 
-#ifndef FAST_SMARTLIST
-/** A resizeable list of pointers, with associated helpful functionality. */
-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.
-   */
-  void **list;
-  int num_used;
-  int capacity;
-};
-#endif
-
 /** Allocate and return an empty smartlist.
  */
 smartlist_t *
@@ -236,36 +223,6 @@
     smartlist_remove(sl1, sl2->list[i]);
 }
 
-#ifndef FAST_SMARTLIST
-/** Return the <b>idx</b>th element of sl.
- */
-void *
-smartlist_get(const smartlist_t *sl, int idx)
-{
-  tor_assert(sl);
-  tor_assert(idx>=0);
-  tor_assert(idx < sl->num_used);
-  return sl->list[idx];
-}
-/** Change the value of the <b>idx</b>th element of sl to <b>val</b>.
- */
-void
-smartlist_set(smartlist_t *sl, int idx, void *val)
-{
-  tor_assert(sl);
-  tor_assert(idx>=0);
-  tor_assert(idx < sl->num_used);
-  sl->list[idx] = val;
-}
-/** Return the number of items in sl.
- */
-int
-smartlist_len(const smartlist_t *sl)
-{
-  return sl->num_used;
-}
-#endif
-
 /** Remove the <b>idx</b>th element of sl; if idx is not the last
  * element, swap the last element of sl into the <b>idx</b>th space.
  * Return the old value of the <b>idx</b>th element.

Index: container.h
===================================================================
RCS file: /home/or/cvsroot/tor/src/common/container.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- container.h	12 Sep 2005 08:27:01 -0000	1.17
+++ container.h	18 Oct 2005 04:51:07 -0000	1.18
@@ -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 @@
   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 @@
 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);

Index: util.h
===================================================================
RCS file: /home/or/cvsroot/tor/src/common/util.h,v
retrieving revision 1.143
retrieving revision 1.144
diff -u -d -r1.143 -r1.144
--- util.h	6 Oct 2005 04:33:40 -0000	1.143
+++ util.h	18 Oct 2005 04:51:07 -0000	1.144
@@ -16,6 +16,7 @@
 #include "torint.h"
 #include "compat.h"
 #include <stdio.h>
+#include <stdlib.h>
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif



More information about the tor-commits mailing list