]> jfr.im git - irc/quakenet/newserv.git/blobdiff - patricia/patricia.h
increase max node extensions from 5->7
[irc/quakenet/newserv.git] / patricia / patricia.h
index 2f6b66c4035d73654adc10a27224c8c90ed220d8..b67408d06d0ddcc6d256a578ca6ca122576d84e9 100644 (file)
@@ -42,7 +42,7 @@ typedef void (*void_fn_t)();
 
 /* { from mrt.h */
 
-#define PATRICIA_MAXSLOTS 5
+#define PATRICIA_MAXSLOTS 
 
 
 typedef struct _prefix_t {
@@ -98,6 +98,7 @@ void releasenodeext(int index);
 
 void node_increment_usercount( patricia_node_t *node);
 void node_decrement_usercount( patricia_node_t *node);
+int is_normalized_ipmask( struct irc_in_addr *sin, unsigned char bitlen );
 
 /* alloc */
 void freeprefix (prefix_t *prefix);
@@ -156,4 +157,27 @@ do { \
         } \
     } while (0)
 
+#define PATRICIA_WALK_CLEAR(Xhead, Xnode) \
+    patricia_node_t *Xstack[PATRICIA_MAXBITS+1]; \
+    patricia_node_t **Xsp = Xstack; \
+    patricia_node_t *Xrn = (Xhead); \
+    while ((Xnode = Xrn)) { \
+      patricia_node_t *l = Xrn->l; \
+      patricia_node_t *r = Xrn->r; \
+
+#define PATRICIA_WALK_CLEAR_END \
+            if (l) { \
+                if (r) { \
+                    *Xsp++ = r; \
+                } \
+                Xrn = l; \
+            } else if (r) { \
+                Xrn = r; \
+            } else if (Xsp != Xstack) { \
+                Xrn = *(--Xsp); \
+            } else { \
+                Xrn = (patricia_node_t *) 0; \
+            } \
+        } 
+   
 #endif /* _PATRICIA_H */