diff --git a/walk.cc b/walk.cc index ddfbcfb9..0c8f7add 100644 --- a/walk.cc +++ b/walk.cc @@ -117,7 +117,7 @@ void set_account_value::operator()(transaction_t& xact) item_handler::operator()(xact); } -void sort_transactions::flush() +void sort_transactions::post_accumulated_xacts() { std::stable_sort(transactions.begin(), transactions.end(), compare_items(sort_order)); @@ -129,8 +129,6 @@ void sort_transactions::flush() item_handler::operator()(**i); } - item_handler::flush(); - transactions.clear(); } @@ -402,7 +400,7 @@ void interval_transactions::report_subtotal(const std::time_t moment) subtotal_transactions::report_subtotal(); if (sorter) - subtotal_transactions::flush(); + sorter->post_accumulated_xacts(); last_xact = NULL; } diff --git a/walk.h b/walk.h index 335ce028..f04eb41b 100644 --- a/walk.h +++ b/walk.h @@ -220,7 +220,13 @@ class sort_transactions : public item_handler delete sort_order; } - virtual void flush(); + virtual void post_accumulated_xacts(); + + virtual void flush() { + post_accumulated_xacts(); + item_handler::flush(); + } + virtual void operator()(transaction_t& xact) { transactions.push_back(&xact); } @@ -402,7 +408,7 @@ class interval_transactions : public subtotal_transactions transaction_t * last_xact; bool started; - item_handler * sorter; + sort_transactions * sorter; public: interval_transactions(item_handler * _handler,