00001 #ifndef Trie_HPP
00002 #define Trie_HPP
00003
00004 enum MatchFind
00005 {
00007 MERGE,
00009 LOOKUP,
00011 HYBRID
00012 };
00013
00014
00015 #include "common.hpp"
00016 #include "common/Edge.hpp"
00017 #include "apriori/bodon/InnerNodeSpecific.hpp"
00018 #include <vector>
00019
00020
00021
00022 namespace Bodon
00023 {
00029 template <class LEAF, class EDGELIST>
00030 class Trie : public LEAF, public InnerNodeSpecific<EDGELIST>
00031 {
00032 public:
00033 static std::vector<item_t> neelist;
00034 Trie(){}
00035 Trie(const counter_t counter) : LEAF(counter),
00036 InnerNodeSpecific<EDGELIST>() {}
00037
00038
00039 bool neeFind(item_t item) const{return true;}
00040
00041 void neePushBackSorted(const std::vector<item_t>& new_neelist){}
00042 void neeAddSorted(const std::vector<item_t>& new_neelist){}
00043 void neeInsertItem(const item_t new_item){}
00045 template <class CONTAINER> const Trie* isIncluded(
00046 const CONTAINER& an_itemset, typename CONTAINER::const_iterator item_it ) const;
00047 };
00048 template <class LEAF, class EDGELIST> std::vector<item_t> Trie<LEAF, EDGELIST>::neelist;
00049
00058 template <class LEAF, class EDGELIST> template <class CONTAINER> const
00059 Trie<LEAF, EDGELIST>* Trie<LEAF, EDGELIST>::
00060 isIncluded( const CONTAINER& an_itemset,
00061 typename CONTAINER::const_iterator item_it ) const
00062 {
00063 if( item_it == an_itemset.end() )
00064 return this;
00065 else
00066 {
00067 Trie<LEAF, EDGELIST>* subtrie = static_cast<Trie<LEAF, EDGELIST>*>(
00068 InnerNodeSpecific<EDGELIST>::edgelist.find(*item_it));
00069 if(subtrie)
00070 return subtrie->isIncluded( an_itemset, ++item_it );
00071 else
00072 return NULL;
00073 }
00074 }
00075 }
00076
00077 #endif