restore sorting of register reports

This commit is contained in:
John Wiegley 2004-07-31 02:36:20 -04:00
parent c06fad4291
commit 3273be3dcc
2 changed files with 12 additions and 10 deletions

View file

@ -129,6 +129,7 @@ item_t * walk_entries(entries_list::const_iterator begin,
subitem->payee = item->payee; subitem->payee = item->payee;
subitem->account = (*j)->account; subitem->account = (*j)->account;
subitem->value = *(*j); subitem->value = *(*j);
item->value += subitem->value;
item->subitems.push_back(subitem); item->subitems.push_back(subitem);
} }
@ -163,19 +164,20 @@ item_t * walk_entries(entries_list::const_iterator begin,
struct cmp_items { struct cmp_items {
const node_t * sort_order; const node_t * sort_order;
cmp_items(const node_t * _sort_order) : sort_order(_sort_order) {} cmp_items(const node_t * _sort_order) : sort_order(_sort_order) {
assert(sort_order);
}
bool operator()(const item_t * left, const item_t * right) const { bool operator()(const item_t * left, const item_t * right) const {
assert(left); assert(left);
assert(right); assert(right);
assert(sort_order);
return sort_order->compute(left) < sort_order->compute(right); return sort_order->compute(left) < sort_order->compute(right);
} }
}; };
void item_t::sort(const node_t * sort_order) void item_t::sort(const node_t * sort_order)
{ {
std::sort(subitems.begin(), subitems.end(), cmp_items(sort_order)); std::stable_sort(subitems.begin(), subitems.end(), cmp_items(sort_order));
} }
} // namespace ledger } // namespace ledger

14
main.cc
View file

@ -59,13 +59,13 @@ unsigned int show_balances(std::ostream& out,
return headlines; return headlines;
} }
void balance_report(std::ostream& out, void balance_report(std::ostream& out,
item_t * top, item_t * top,
const node_t * predicate, const node_t * predicate,
const node_t * sort_order, const node_t * sort_order,
const format_t& format, const format_t& format,
const bool show_expanded, const bool show_expanded,
const bool show_subtotals) const bool show_subtotals)
{ {
if (sort_order) if (sort_order)
top->sort(sort_order); top->sort(sort_order);