[MINOR] ebtree: add functions to lookup non-null terminated strings

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.
This commit is contained in:
Willy Tarreau 2009-12-14 12:40:27 +01:00
parent dd1b01d027
commit c9a31da73f
4 changed files with 37 additions and 4 deletions

View 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

View 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>.

View 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

View 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>.