diff options
Diffstat (limited to 'include/inn/tst.h')
-rw-r--r-- | include/inn/tst.h | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/include/inn/tst.h b/include/inn/tst.h new file mode 100644 index 0000000..44bfff6 --- /dev/null +++ b/include/inn/tst.h @@ -0,0 +1,88 @@ +/* $Id: tst.h 6083 2002-12-27 07:24:36Z rra $ +** +** Ternary search trie implementation. +** +** This implementation is based on the implementation by Peter A. Friend +** (version 1.3), but has been assimilated into INN and modified to use INN +** formatting conventions. +** +** Copyright (c) 2002, Peter A. Friend +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** +** Redistributions of source code must retain the above copyright notice, +** this list of conditions and the following disclaimer. +** +** Redistributions in binary form must reproduce the above copyright notice, +** this list of conditions and the following disclaimer in the documentation +** and/or other materials provided with the distribution. +** +** Neither the name of Peter A. Friend nor the names of its contributors may +** be used to endorse or promote products derived from this software without +** specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +** IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +** THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +** PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +** EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +** PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +** PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +** LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef INN_TST_H +#define INN_TST_H 1 + +#include <inn/defines.h> + +BEGIN_DECLS + +/* Constants used for return values and options. */ +enum tst_constants { + TST_OK, + TST_NULL_KEY, + TST_NULL_DATA, + TST_DUPLICATE_KEY, + TST_REPLACE +}; + +/* Opaque data type returned by and used by ternary search trie functions. */ +struct tst; + +/* Allocate a new ternary search trie. width is the number of nodes allocated + at a time and should be chosen carefully. One node is required for every + character in the tree. If you choose a value that is too small, your + application will spend too much time calling malloc and your node space + will be too spread out. Too large a value is just a waste of space. */ +struct tst *tst_init(int width); + +/* Insert a value into the tree. If the key already exists in the tree, + option determiens the behavior. If set to TST_REPLACE, the data for that + key is replaced with the new data value and the old value is returned in + exist_ptr. Otherwise, TST_DUPLICATE_KEY is returned. If key is zero + length, TST_NULL_KEY is returned. If data is NULL, TST_NULL_DATA is + returned. On success, TST_OK is returned. + + The data argument may not be NULL. For a simple existence tree, use the + struct tst pointer as the data. */ +int tst_insert(struct tst *, const unsigned char *key, void *data, int option, + void **exist_ptr); + +/* Search for a key and return the associated data, or NULL if not found. */ +void *tst_search(struct tst *, const unsigned char *key); + +/* Delete the given key out of the trie, returning the data that it pointed + to. If the key was not found, returns NULL. */ +void *tst_delete(struct tst *, const unsigned char *key); + +/* Free the given ternary search trie and all resources it uses. */ +void tst_cleanup(struct tst *); + +#endif /* !INN_TST_H */ |