00001 #ifndef OneByOneSupportCounterANDTransactionFiltering_HPP
00002 #define OneByOneSupportCounterANDTransactionFiltering_HPP
00003
00004 #include "common.hpp"
00005 #include <vector>
00006
00007
00008
00009
00010
00016 template <class DATA_STRUCTURE, class TR, class SC = Dummy>
00017 class OneByOneSupportCounterANDTransactionFiltering
00018 {
00019 private:
00020
00021 DATA_STRUCTURE& data_structure;
00022 TR& transaction_reader;
00023 SC support_counter;
00024
00025 public:
00026 OneByOneSupportCounterANDTransactionFiltering( DATA_STRUCTURE& data_structure,
00027 TR& transaction_reader) :
00028 data_structure(data_structure),
00029 transaction_reader(transaction_reader){}
00030 void countSupport(const unsigned int candidate_size);
00031 };
00032
00033 template <class DATA_STRUCTURE, class TR, class SC> inline void
00034 OneByOneSupportCounterANDTransactionFiltering<DATA_STRUCTURE, TR, SC>::
00035 countSupport(const unsigned int candidate_size )
00036 {
00037 assert( candidate_size > 2 );
00038 transaction_reader.rewind();
00039 transaction_reader.setCandidateSize(candidate_size);
00040 std::vector<unsigned int> filter(transaction_reader.getLargestItem() + 1, 0);
00041 std::vector<item_t> transaction;
00042 counter_t multiplicity;
00043 if( (multiplicity = transaction_reader.nextTransactionBIS(
00044 transaction)) !=0)
00045 {
00046 support_counter.updateCounters(
00047 data_structure, transaction,
00048 candidate_size, multiplicity, filter);
00049 while( (multiplicity = transaction_reader.nextTransactionBIS_modifyPrevious(
00050 transaction, filter)) !=0 )
00051 {
00052 support_counter.updateCounters(
00053 data_structure, transaction,
00054 candidate_size, multiplicity, filter);
00055 }
00056 }
00057
00058
00059 }
00060 #endif