/*
- * $Id: radix.h,v 1.12 2001/11/13 19:24:34 hno Exp $
+ * $Id: radix.h,v 1.13 2002/04/19 22:23:01 hno Exp $
*/
#ifndef SQUID_RADIX_H
#endif
};
-#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
#define rn_key rn_u.rn_leaf.rn_Key
#define rn_mask rn_u.rn_leaf.rn_Mask
-#define rn_off rn_u.rn_node.rn_Off
-#define rn_l rn_u.rn_node.rn_L
-#define rn_r rn_u.rn_node.rn_R
/*
* Annotations to tree concerning potential routes applying to subtrees.
int rm_refs; /* # of references to this struct */
} *squid_rn_mkfreelist;
-#define rm_mask rm_rmu.rmu_mask
-#define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */
-
-#define squid_MKGet(m) {\
- if (squid_rn_mkfreelist) {\
- m = squid_rn_mkfreelist; \
- squid_rn_mkfreelist = (m)->rm_mklist; \
- } else \
- squid_R_Malloc(m, struct squid_radix_mask *, sizeof (*(m))); }\
-
-#define squid_MKFree(m) { (m)->rm_mklist = squid_rn_mkfreelist; squid_rn_mkfreelist = (m);}
-
struct squid_radix_node_head {
struct squid_radix_node *rnh_treetop;
int rnh_addrsize; /* permit, but not require fixed keys */
};
-#define squid_Bcmp(a, b, n) memcmp(((char *)(a)), ((char *)(b)), (n))
-#define squid_Bcopy(a, b, n) memcpy(((char *)(b)), ((char *)(a)), (unsigned)(n))
-#define squid_Bzero(p, n) memset((char *)(p),'\0', (int)(n))
-#define squid_R_Malloc(p, t, n) (p = (t) xmalloc((unsigned int)(n)))
-#define squid_Free(p) xfree((char *)p)
-
extern void squid_rn_init (void);
extern int squid_rn_inithead(void **, int);
extern int squid_rn_refines(void *, void *);
extern struct squid_radix_node *squid_rn_search(void *, struct squid_radix_node *);
extern struct squid_radix_node *squid_rn_search_m(void *, struct squid_radix_node *, void *);
extern struct squid_radix_node *squid_rn_lookup(void *, void *, struct squid_radix_node_head *);
-#define min(x,y) ((x)<(y)? (x) : (y))
#endif /* SQUID_RADIX_H */
/*
- * $Id: radix.c,v 1.16 2001/11/13 19:24:34 hno Exp $
+ * $Id: radix.c,v 1.17 2002/04/19 22:23:01 hno Exp $
*
* DEBUG: section 53 Radix tree data structure implementation
* AUTHOR: NetBSD Derived
{0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xFF};
static char *rn_zeros, *rn_ones;
+/* aliases */
#define rn_masktop (squid_mask_rnhead->rnh_treetop)
-#undef squid_Bcmp
+#define rn_dupedkey rn_u.rn_leaf.rn_Dupedkey
+#define rn_off rn_u.rn_node.rn_Off
+#define rn_l rn_u.rn_node.rn_L
+#define rn_r rn_u.rn_node.rn_R
+#define rm_mask rm_rmu.rmu_mask
+#define rm_leaf rm_rmu.rmu_leaf /* extra field would make 32 bytes */
+
+
+/* Helper macros */
#define squid_Bcmp(a, b, l) (l == 0 ? 0 : memcmp((caddr_t)(a), (caddr_t)(b), (u_long)l))
+#define squid_R_Malloc(p, t, n) (p = (t) xmalloc((unsigned int)(n)))
+#define squid_Free(p) xfree((char *)p)
+#define squid_MKGet(m) {\
+ if (squid_rn_mkfreelist) {\
+ m = squid_rn_mkfreelist; \
+ squid_rn_mkfreelist = (m)->rm_mklist; \
+ } else \
+ squid_R_Malloc(m, struct squid_radix_mask *, sizeof (*(m)));\
+ }
+
+#define squid_MKFree(m) { (m)->rm_mklist = squid_rn_mkfreelist; squid_rn_mkfreelist = (m);}
+
+#ifndef min
+#define min(x,y) ((x)<(y)? (x) : (y))
+#endif
/*
* The data structure for the keys is a radix tree with one way
* branching removed. The index rn_b at an internal node n represents a bit