]> jfr.im git - irc/quakenet/newserv.git/blobdiff - patricia/patricia.h
CHANSERV: add missing error statements.
[irc/quakenet/newserv.git] / patricia / patricia.h
index 8ea603586a217e08e2a863a8d0025d04d7cddd89..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 {
@@ -96,6 +96,10 @@ int registernodeext(const char *name);
 int findnodeext(const char *name);
 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);
 prefix_t *newprefix();
@@ -153,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 */