]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] ebtree: add functions to lookup non-null terminated strings
authorWilly Tarreau <w@1wt.eu>
Mon, 14 Dec 2009 11:40:27 +0000 (12:40 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 14 Dec 2009 11:43:37 +0000 (12:43 +0100)
Sometimes it's useful to lookup a string without terminating it with a
zero. We can do that relying on ebmb_lookup() since the string in the
tree contains a zero.

ebtree/ebistree.c
ebtree/ebistree.h
ebtree/ebsttree.c
ebtree/ebsttree.h

index acaf3fa524701a732b7b8882a0fe3b80cb1c5d38..938caf785a73708c8cca4b1d1d4f443220a9415f 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Elastic Binary Trees - exported functions for Indirect String data nodes.
- * Version 5.0
+ * Version 5.1
  * (C) 2002-2009 - Willy Tarreau <w@1wt.eu>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -21,6 +21,7 @@
 /* Consult ebistree.h for more details about those functions */
 
 #include "ebistree.h"
+#include "ebimtree.h"
 
 /* Find the first occurence of a zero-terminated string <x> in the tree <root>.
  * It's the caller's reponsibility to use this function only on trees which
@@ -31,6 +32,21 @@ REGPRM2 struct ebpt_node *ebis_lookup(struct eb_root *root, const char *x)
        return __ebis_lookup(root, x);
 }
 
+/* Find the first occurence of a length <len> string <x> in the tree <root>.
+ * It's the caller's reponsibility to use this function only on trees which
+ * only contain zero-terminated strings, and that no null character is present
+ * in string <x> in the first <len> chars. If none can be found, return NULL.
+ */
+REGPRM3 struct ebpt_node *ebis_lookup_len(struct eb_root *root, const char *x, unsigned int len)
+{
+       struct ebpt_node *node;
+
+       node = ebim_lookup(root, x, len);
+       if (!node || ((const char *)node->key)[len] != 0)
+               return NULL;
+       return node;
+}
+
 /* Insert ebpt_node <new> into subtree starting at node root <root>. Only
  * new->key needs be set with the zero-terminated string key. The ebpt_node is
  * returned. If root->b[EB_RGHT]==1, the tree may only contain unique keys. The
index 984df2e647a9847351ddde65d63711889e2ce35f..62f42c6fdc2d0945de42e1420a90bf09e83af04e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Elastic Binary Trees - macros to manipulate Indirect String data nodes.
- * Version 5.0
+ * Version 5.1
  * (C) 2002-2009 - Willy Tarreau <w@1wt.eu>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -32,6 +32,7 @@
  * in ebistree.c, which simply relies on their inline version.
  */
 REGPRM2 struct ebpt_node *ebis_lookup(struct eb_root *root, const char *x);
+REGPRM3 struct ebpt_node *ebis_lookup_len(struct eb_root *root, const char *x, unsigned int len);
 REGPRM2 struct ebpt_node *ebis_insert(struct eb_root *root, struct ebpt_node *new);
 
 /* Find the first occurence of a zero-terminated string <x> in the tree <root>.
index 8b666bc55a72d580a79e11c8546d83f1003f6d3d..b00ad69b97655d81d1c34c9a3a425b42110daa04 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Elastic Binary Trees - exported functions for String data nodes.
- * Version 5.0
+ * Version 5.1
  * (C) 2002-2009 - Willy Tarreau <w@1wt.eu>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -31,6 +31,21 @@ REGPRM2 struct ebmb_node *ebst_lookup(struct eb_root *root, const char *x)
        return __ebst_lookup(root, x);
 }
 
+/* Find the first occurence of a length <len> string <x> in the tree <root>.
+ * It's the caller's reponsibility to use this function only on trees which
+ * only contain zero-terminated strings, and that no null character is present
+ * in string <x> in the first <len> chars. If none can be found, return NULL.
+ */
+REGPRM3 struct ebmb_node *ebst_lookup_len(struct eb_root *root, const char *x, unsigned int len)
+{
+       struct ebmb_node *node;
+
+       node = ebmb_lookup(root, x, len);
+       if (!node || node->key[len] != 0)
+               return NULL;
+       return node;
+}
+
 /* Insert ebmb_node <new> into subtree starting at node root <root>. Only
  * new->key needs be set with the zero-terminated string key. The ebmb_node is
  * returned. If root->b[EB_RGHT]==1, the tree may only contain unique keys. The
index 87e0306e0de3c095cba6a48cbbb01beb63549687..6fa6412f2d16b07cd498ecafcaad8ce6b6cbe761 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Elastic Binary Trees - macros to manipulate String data nodes.
- * Version 5.0
+ * Version 5.1
  * (C) 2002-2009 - Willy Tarreau <w@1wt.eu>
  *
  * This program is free software; you can redistribute it and/or modify
@@ -30,6 +30,7 @@
  * in ebsttree.c, which simply relies on their inline version.
  */
 REGPRM2 struct ebmb_node *ebst_lookup(struct eb_root *root, const char *x);
+REGPRM3 struct ebmb_node *ebst_lookup_len(struct eb_root *root, const char *x, unsigned int len);
 REGPRM2 struct ebmb_node *ebst_insert(struct eb_root *root, struct ebmb_node *new);
 
 /* Find the first occurence of a zero-terminated string <x> in the tree <root>.