00001 #ifndef TrieDBCache_HPP
00002 #define TrieDBCache_HPP
00003
00004 #include "common.hpp"
00005 #include "datastructures/trie/TrieBase.hpp"
00006 #include <vector>
00007
00008
00009 template <class T_R, class EDGELIST>
00010 class TrieDBCache : public T_R, public TrieBase<EDGELIST, counter_t>
00011 {
00012 public:
00013 typedef typename T_R::params_t params_t;
00014
00015 TrieDBCache( const params_t* par );
00016
00017 template <class BIS> counter_t nextTransactionBIS(
00018 BIS& transaction );
00019
00020 void rewind()
00021 {
00022 it = TRIE::begin();
00023 }
00024
00025
00026 protected:
00027 typedef TrieBase<EDGELIST, counter_t> TRIE;
00028 typename TRIE::iterator it;
00029 };
00030
00031 template <class T_R, class EDGELIST> inline TrieDBCache<T_R, EDGELIST>::
00032 TrieDBCache(const params_t* par) : T_R(par), TrieBase<EDGELIST, counter_t>()
00033 {
00034 std::vector<item_t> transaction;
00035 register counter_t multiplicity;
00036 T_R::rewind();
00037 while( (multiplicity = T_R::nextTransactionBIS(
00038 transaction)) != 0 )
00039 if(transaction.size() > 1)
00040 TRIE::addItemset( transaction, transaction.begin() ).getData()
00041 += multiplicity;
00042 }
00043
00044 template <class T_R, class EDGELIST> template <class BIS> inline
00045 counter_t TrieDBCache<T_R, EDGELIST>::nextTransactionBIS( BIS& transaction )
00046 {
00047 std::pair<BIS, counter_t> temp_pair;
00048 while(it != TRIE::end() )
00049 {
00050 temp_pair = *it;
00051 ++it;
00052 if(temp_pair.second != 0)
00053 {
00054 transaction = temp_pair.first;
00055 return temp_pair.second;
00056 }
00057 }
00058 return 0;
00059
00060 }
00061 #endif