noinst_HEADERS = Trie.h TrieNode.h TrieCharTransform.h
libTrie_a_SOURCES = Trie.cc \
- Trie.cci \
Trie.h \
TrieNode.cc \
- TrieNode.cci \
TrieNode.h \
TrieCharTransform.h
#include "squid.h"
#include "Trie.h"
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#include "TrieCharTransform.h"
#include "TrieNode.h"
-#if !_USE_INLINE_
-#include "Trie.cci"
+#if HAVE_UNISTD_H
+#include <unistd.h>
#endif
Trie::Trie(TrieCharTransform *aTransform) : head(0) , transform(aTransform)
{}
-extern "C" void *TrieCreate()
-{
- return new Trie;
-}
-
Trie::~Trie()
{
delete head;
delete transform;
}
-extern "C" void TrieDestroy(void *aTrie)
-{
- delete (Trie *)aTrie;
-}
-
-extern "C" void *TrieFind(void *aTrie, char const *aString, size_t theLength)
-{
- return ((Trie *)aTrie)->find(aString, theLength);
-}
-
bool
Trie::add(char const *aString, size_t theLength, void *privatedata)
{
return head->add(aString, theLength, privatedata, transform);
}
-
-extern "C" int TrieAdd(void *aTrie, char const *aString, size_t theLength, void *privatedata)
-{
-
- return ((Trie *)aTrie)->add(aString, theLength, privatedata);
-}
+++ /dev/null
-/*
- * Copyright (c) 2002,2003 Robert Collins <rbtcollins@hotmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-
-#ifdef __cplusplus
-#include "Trie.h"
-#include "TrieNode.h"
-
-void *
-Trie::find (char const *aString, size_t theLength)
-{
- if (head)
- return head->find (aString, theLength, transform, false);
-
- return NULL;
-}
-
-void *
-Trie::findPrefix (char const *aString, size_t theLength)
-{
- if (head)
- return head->find (aString, theLength, transform, true);
-
- return NULL;
-}
-
-#endif
#ifndef LIBTRIE_SQUID_H
#define LIBTRIE_SQUID_H
-/* This is the header for libTrie.
- * libTrie provides both C and C++
- * bindings. libtrie itself is written in C++.
- */
-
+#include "TrieNode.h"
#if HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
-/* C bindings */
-#ifndef __cplusplus
-
-/* TODO: provide parameterisation for C bindings */
-void *TrieCreate (void);
-void TrieDestroy (void *);
-void *TrieFind (void *, char const *, size_t);
-int TrieAdd (void *, char const *, size_t, void *);
-
-/* C++ bindings */
-#else
-
-/* MinGW needs NULL definition */
-#ifndef NULL
-#define NULL 0
-#endif
-
class TrieCharTransform;
-class TrieNode;
-
/* TODO: parameterize this to be more generic -
* i.e. M-ary internal node sizes etc
*/
* If found, return the private data.
* If not found, return NULL.
*/
- _SQUID_INLINE_ void *find (char const *, size_t);
+ inline void *find (char const *, size_t);
/* find any element of the trie in the buffer from the
* beginning thereof
*/
- _SQUID_INLINE_ void *findPrefix (char const *, size_t);
+ inline void *findPrefix (char const *, size_t);
/* Add a string.
* returns false if the string is already
TrieCharTransform *transform;
};
-#endif /* __cplusplus */
+void *
+Trie::find (char const *aString, size_t theLength)
+{
+ if (head)
+ return head->find (aString, theLength, transform, false);
-#if _USE_INLINE_
-#include "Trie.cci"
-#endif
+ return NULL;
+}
+
+void *
+Trie::findPrefix (char const *aString, size_t theLength)
+{
+ if (head)
+ return head->find (aString, theLength, transform, true);
+
+ return NULL;
+}
#endif /* LIBTRIE_SQUID_H */
return true;
}
}
-
-#if !_USE_INLINE_
-#include "TrieNode.cci"
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2002,2003 Robert Collins <rbtcollins@hotmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-
-#ifdef __cplusplus
-#include "TrieCharTransform.h"
-#include "TrieNode.h"
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ctype.h>
-
-/* recursive. TODO? make iterative */
-void *
-TrieNode::find (char const *aString, size_t theLength, TrieCharTransform *transform, bool const prefix) const
-{
- if (theLength) {
- int index = -1;
- unsigned char pos = transform ? (*transform) (*aString) : *aString;
-
- if (internal[pos])
- index = pos;
-
- if (index > -1) {
- void *result;
- result = internal[index]->find(aString + 1, theLength - 1, transform, prefix);
-
- if (result)
- return result;
- }
-
- if (prefix)
- return _privateData;
-
- return NULL;
- } else {
- /* terminal node */
- return _privateData;
- }
-}
-
-#endif
#ifndef LIBTRIE_TRIENODE_H
#define LIBTRIE_TRIENODE_H
-/* This is an internal header for libTrie.
- * libTrie provides both C and C++
- * bindings.
- * libTrie itself is written in C++.
- * For C bindings see Trei.h
- */
-
-/* C bindings */
-#ifndef __cplusplus
+#include "TrieCharTransform.h"
-/* C++ bindings */
-#else
#include <sys/types.h>
#include <utility>
-/* MinGW needs NULL definition */
-#ifndef NULL
-#define NULL 0
-#endif
-
/* TODO: parameterize this to be more generic -
* i.e. M-ary internal node sizes etc
*/
-class TrieCharTransform;
-
class TrieNode
{
* If found, return the private data.
* If not found, return NULL.
*/
- _SQUID_INLINE_ void *find (char const *, size_t, TrieCharTransform *, bool const prefix) const;
+ inline void *find (char const *, size_t, TrieCharTransform *, bool const prefix) const;
/* Add a string.
* returns false if the string is already
* present or can't be added.
*/
- bool add
- (char const *, size_t, void *, TrieCharTransform *);
+ bool add (char const *, size_t, void *, TrieCharTransform *);
private:
/* 256-way Trie */
void *_privateData;
};
-#endif /* __cplusplus */
-
-#if _USE_INLINE_
-#include "TrieNode.cci"
-#endif
-
+/* recursive. TODO? make iterative */
+void *
+TrieNode::find (char const *aString, size_t theLength, TrieCharTransform *transform, bool const prefix) const
+{
+ if (theLength) {
+ int index = -1;
+ unsigned char pos = transform ? (*transform) (*aString) : *aString;
+
+ if (internal[pos])
+ index = pos;
+
+ if (index > -1) {
+ void *result;
+ result = internal[index]->find(aString + 1, theLength - 1, transform, prefix);
+
+ if (result)
+ return result;
+ }
+
+ if (prefix)
+ return _privateData;
+
+ return NULL;
+ } else {
+ /* terminal node */
+ return _privateData;
+ }
+}
#endif /* LIBTRIE_TRIENODE_H */
INCLUDES += -I$(top_srcdir)/include
-# TESTS = trie trie-c
TESTS += trie
-# check_PROGRAMS = trie trie-c
check_PROGRAMS += trie
trie_SOURCES = trie.cc
-trie_LDADD = $(top_builddir)/lib/libTrie/libTrie.a
-
-#trie_c_SOURCES = trie-c.c
-#trie_c_LDADD = $(top_builddir)/lib/libTrie/libTrie.a -lm
+trie_LDADD = $(top_builddir)/lib/libTrie/libTrie.a
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2002 Robert Collins <rbtcollins@hotmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-
-#include "squid.h"
-#include "Trie.h"
-
-int
-main (int argc, char **argv)
-{
- void *aTrie = TrieCreate();
- if (!TrieAdd (aTrie, "User-Agent", 10, (void *)1)) {
- fprintf(stderr,"Could not add User-Agent\n");
- return 1;
- }
- if (TrieAdd (aTrie, "User-Agent", 10, (void *)2)) {
- fprintf(stderr, "Could add duplicate User-Agent\n");
- return 1;
- }
- if (TrieFind (aTrie, "User-Agent", 10) != (void *)1) {
- fprintf(stderr, "Could not find User-Agent\n");
- return 1;
- }
- TrieDestroy (aTrie);
- return 0;
-}