(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.
This commit is contained in:
John Wiegley 2005-07-13 08:53:47 +00:00
parent d83aa2f732
commit ed8a236fe6
2 changed files with 20 additions and 7 deletions

13
walk.cc
View file

@ -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

14
walk.h
View file

@ -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;