X-Git-Url: https://jfr.im/git/irc/quakenet/newserv.git/blobdiff_plain/1bb4c08e90274c34eb03720fb0eda246e2dc0c86..3898f97325dbed800d4b424e68a0c2858b8d8be7:/patricia/patricia.h diff --git a/patricia/patricia.h b/patricia/patricia.h index 2f6b66c4..b67408d0 100644 --- a/patricia/patricia.h +++ b/patricia/patricia.h @@ -42,7 +42,7 @@ typedef void (*void_fn_t)(); /* { from mrt.h */ -#define PATRICIA_MAXSLOTS 5 +#define PATRICIA_MAXSLOTS 7 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 */