From: Francesco Chemolli Date: Fri, 27 Jun 2014 15:39:17 +0000 (+0200) Subject: Cleanup: simplify libTrie X-Git-Tag: SQUID_3_5_0_1~163 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7d341c2c9eb7ec506645fdcce6f94d656ea5413c;p=thirdparty%2Fsquid.git Cleanup: simplify libTrie --- diff --git a/lib/libTrie/Makefile.am b/lib/libTrie/Makefile.am index 14bcd6a44e..2a1a92965a 100644 --- a/lib/libTrie/Makefile.am +++ b/lib/libTrie/Makefile.am @@ -9,9 +9,7 @@ noinst_LIBRARIES = libTrie.a 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 diff --git a/lib/libTrie/Trie.cc b/lib/libTrie/Trie.cc index 32e39afa6c..ca2efb3ca2 100644 --- a/lib/libTrie/Trie.cc +++ b/lib/libTrie/Trie.cc @@ -19,40 +19,22 @@ #include "squid.h" #include "Trie.h" -#if HAVE_UNISTD_H -#include -#endif #include "TrieCharTransform.h" #include "TrieNode.h" -#if !_USE_INLINE_ -#include "Trie.cci" +#if HAVE_UNISTD_H +#include #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) { @@ -70,9 +52,3 @@ 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); -} diff --git a/lib/libTrie/Trie.cci b/lib/libTrie/Trie.cci deleted file mode 100644 index 87aead8c56..0000000000 --- a/lib/libTrie/Trie.cci +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2002,2003 Robert Collins - * - * 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 diff --git a/lib/libTrie/Trie.h b/lib/libTrie/Trie.h index b5d32e4680..1346d6370e 100644 --- a/lib/libTrie/Trie.h +++ b/lib/libTrie/Trie.h @@ -20,36 +20,13 @@ #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 #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 */ @@ -67,11 +44,11 @@ public: * 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 @@ -87,10 +64,22 @@ private: 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 */ diff --git a/lib/libTrie/TrieNode.cc b/lib/libTrie/TrieNode.cc index a641444697..c9ea136cdc 100644 --- a/lib/libTrie/TrieNode.cc +++ b/lib/libTrie/TrieNode.cc @@ -60,7 +60,3 @@ TrieNode::add(char const *aString, size_t theLength, void *privatedata, TrieChar return true; } } - -#if !_USE_INLINE_ -#include "TrieNode.cci" -#endif diff --git a/lib/libTrie/TrieNode.cci b/lib/libTrie/TrieNode.cci deleted file mode 100644 index 882914eab3..0000000000 --- a/lib/libTrie/TrieNode.cci +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2002,2003 Robert Collins - * - * 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 -#endif -#include - -/* 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 diff --git a/lib/libTrie/TrieNode.h b/lib/libTrie/TrieNode.h index dc978d25f5..f1b7fabf9c 100644 --- a/lib/libTrie/TrieNode.h +++ b/lib/libTrie/TrieNode.h @@ -20,32 +20,15 @@ #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 #include -/* 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 { @@ -59,15 +42,14 @@ public: * 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 */ @@ -82,10 +64,32 @@ private: 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 */ diff --git a/lib/libTrie/test/Makefile.am b/lib/libTrie/test/Makefile.am index df33eba011..700ae41071 100644 --- a/lib/libTrie/test/Makefile.am +++ b/lib/libTrie/test/Makefile.am @@ -2,14 +2,9 @@ include $(top_srcdir)/src/Common.am 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 diff --git a/lib/libTrie/test/trie-c.c b/lib/libTrie/test/trie-c.c deleted file mode 100644 index 39bd82facf..0000000000 --- a/lib/libTrie/test/trie-c.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2002 Robert Collins - * - * 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; -}