------------------------------------------------------------ revno: 13482 revision-id: kinkie@squid-cache.org-20140627153917-o70swyfnsigw8to4 parent: chtsanti@users.sourceforge.net-20140626093404-wtyk5s2t6x0yprfm committer: Francesco Chemolli branch nick: trunk timestamp: Fri 2014-06-27 17:39:17 +0200 message: Cleanup: simplify libTrie ------------------------------------------------------------ # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: kinkie@squid-cache.org-20140627153917-o70swyfnsigw8to4 # target_branch: http://bzr.squid-cache.org/bzr/squid3/trunk/ # testament_sha1: b2e862850fffab31ac8b42287e759a574266e6c6 # timestamp: 2014-06-27 15:53:54 +0000 # source_branch: http://bzr.squid-cache.org/bzr/squid3/trunk/ # base_revision_id: chtsanti@users.sourceforge.net-20140626093404-\ # wtyk5s2t6x0yprfm # # Begin patch === modified file 'lib/libTrie/Makefile.am' --- lib/libTrie/Makefile.am 2013-06-11 13:13:23 +0000 +++ lib/libTrie/Makefile.am 2014-06-27 15:39:17 +0000 @@ -9,9 +9,7 @@ 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 === modified file 'lib/libTrie/Trie.cc' --- lib/libTrie/Trie.cc 2013-10-25 00:13:46 +0000 +++ lib/libTrie/Trie.cc 2014-06-27 15:39:17 +0000 @@ -19,40 +19,22 @@ #include "squid.h" #include "Trie.h" +#include "TrieCharTransform.h" +#include "TrieNode.h" + #if HAVE_UNISTD_H #include #endif -#include "TrieCharTransform.h" -#include "TrieNode.h" - -#if !_USE_INLINE_ -#include "Trie.cci" -#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 @@ 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); -} === removed file 'lib/libTrie/Trie.cci' --- lib/libTrie/Trie.cci 2013-06-11 13:13:23 +0000 +++ lib/libTrie/Trie.cci 1970-01-01 00:00:00 +0000 @@ -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 === modified file 'lib/libTrie/Trie.h' --- lib/libTrie/Trie.h 2013-06-11 13:13:23 +0000 +++ lib/libTrie/Trie.h 2014-06-27 15:39:17 +0000 @@ -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 @@ * 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 @@ TrieCharTransform *transform; }; -#endif /* __cplusplus */ - -#if _USE_INLINE_ -#include "Trie.cci" -#endif +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 /* LIBTRIE_SQUID_H */ === modified file 'lib/libTrie/TrieNode.cc' --- lib/libTrie/TrieNode.cc 2013-10-25 00:13:46 +0000 +++ lib/libTrie/TrieNode.cc 2014-06-27 15:39:17 +0000 @@ -60,7 +60,3 @@ return true; } } - -#if !_USE_INLINE_ -#include "TrieNode.cci" -#endif === removed file 'lib/libTrie/TrieNode.cci' --- lib/libTrie/TrieNode.cci 2013-10-25 00:13:46 +0000 +++ lib/libTrie/TrieNode.cci 1970-01-01 00:00:00 +0000 @@ -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 === modified file 'lib/libTrie/TrieNode.h' --- lib/libTrie/TrieNode.h 2013-06-11 13:13:23 +0000 +++ lib/libTrie/TrieNode.h 2014-06-27 15:39:17 +0000 @@ -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 - -/* C++ bindings */ -#else +#include "TrieCharTransform.h" + #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 @@ * 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 @@ 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 */ === modified file 'lib/libTrie/test/Makefile.am' --- lib/libTrie/test/Makefile.am 2013-06-11 13:13:23 +0000 +++ lib/libTrie/test/Makefile.am 2014-06-27 15:39:17 +0000 @@ -2,14 +2,9 @@ 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 === removed file 'lib/libTrie/test/trie-c.c' --- lib/libTrie/test/trie-c.c 2014-02-21 10:46:19 +0000 +++ lib/libTrie/test/trie-c.c 1970-01-01 00:00:00 +0000 @@ -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; -}