diff options
-rw-r--r-- | walk.cc | 13 | ||||
-rw-r--r-- | walk.h | 14 |
2 files changed, 20 insertions, 7 deletions
@@ -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 @@ -367,8 +367,18 @@ class changed_value_transactions : public item_handler<transaction_t> class subtotal_transactions : public item_handler<transaction_t> { - typedef std::map<account_t *, value_t> values_map; - typedef std::pair<account_t *, value_t> 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<std::string, acct_value_t> values_map; + typedef std::pair<std::string, acct_value_t> values_pair; protected: values_map values; |