summaryrefslogtreecommitdiffstats
path: root/include/inn/tst.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/inn/tst.h')
-rw-r--r--include/inn/tst.h88
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 */