00001 #ifndef SortedTransactionReader_HPP
00002 #define SortedTransactionReader_HPP
00003
00008 #include "common.hpp"
00009 #include "io/input/transaction_reader/TransactionReader.hpp"
00010 #include <algorithm>
00011
00018 template <class T_R = TransactionReader<>, bool UNIQUE = false, bool ASCENDING=true>
00019 class SortedTransactionReader : public T_R
00020 {
00021 public:
00022 typedef typename T_R::params_t params_t;
00023 SortedTransactionReader( const params_t* par ) : T_R(par){}
00024
00025 template <class BIS> counter_t nextTransactionBIS( BIS& transaction )
00026 {
00027 counter_t return_value = T_R::nextTransactionBIS(transaction);
00028 if( ASCENDING )
00029 std::sort(transaction.begin(), transaction.end());
00030 else
00031 std::sort(transaction.begin(), transaction.end(), std::greater<item_t>());
00032 if( UNIQUE )
00033 transaction.erase(
00034 std::unique( transaction.begin(), transaction.end() ),
00035 transaction.end() );
00036 return return_value;
00037 }
00038 };
00039
00040 #endif