From ed8a236fe6f4e6eb0610da20146aad1ce8a62465 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Wed, 13 Jul 2005 08:53:47 +0000 Subject: (subtotal_transactions::operator()): Changed the usage of the temporary `values' map so that account names are always properly sorted in the subtotaled output view. As it was, they were being reported in account creation order. --- walk.cc | 13 ++++++++----- walk.h | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/walk.cc b/walk.cc index 24a8fe54..04038d2f 100644 --- a/walk.cc +++ b/walk.cc @@ -355,8 +355,8 @@ void subtotal_transactions::report_subtotal(const char * spec_fmt) for (values_map::iterator i = values.begin(); i != values.end(); i++) - handle_value((*i).second, (*i).first, &entry, 0, xact_temps, - *handler, finish); + handle_value((*i).second.value, (*i).second.account, &entry, 0, + xact_temps, *handler, finish); values.clear(); } @@ -368,13 +368,16 @@ void subtotal_transactions::operator()(transaction_t& xact) if (! finish || std::difftime(xact.entry->date, finish) > 0) finish = xact.entry->date; - values_map::iterator i = values.find(xact.account); + account_t * acct = xact.account; + assert(acct); + + values_map::iterator i = values.find(acct->fullname()); if (i == values.end()) { value_t temp; add_transaction_to(xact, temp); - values.insert(values_pair(xact.account, temp)); + values.insert(values_pair(acct->fullname(), acct_value_t(acct, temp))); } else { - add_transaction_to(xact, (*i).second); + add_transaction_to(xact, (*i).second.value); } // If the account for this transaction is all virtual, mark it as diff --git a/walk.h b/walk.h index f04eb41b..b59195b3 100644 --- a/walk.h +++ b/walk.h @@ -367,8 +367,18 @@ class changed_value_transactions : public item_handler class subtotal_transactions : public item_handler { - typedef std::map values_map; - typedef std::pair values_pair; + struct acct_value_t { + account_t * account; + value_t value; + + acct_value_t(account_t * a) : account(a) {} + acct_value_t(account_t * a, value_t& v) : account(a), value(v) {} + acct_value_t(const acct_value_t& av) + : account(av.account), value(av.value) {} + }; + + typedef std::map values_map; + typedef std::pair values_pair; protected: values_map values; -- cgit v1.2.3