summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--walk.cc13
-rw-r--r--walk.h14
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<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;