diff options
author | John Wiegley <johnw@newartisans.com> | 2015-08-04 14:55:41 -0700 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2015-08-04 14:55:41 -0700 |
commit | 81b14e471a1b2635bab280d589ba9f3eb46ce502 (patch) | |
tree | ae8d64d42ac2f20f83e459b237f19d6f967c6f02 /src | |
parent | a24910b3740b572db15fda4bd574222090e16d79 (diff) | |
parent | 977e33d39e2c896ac632f84230139af8da189b9b (diff) | |
download | fork-ledger-81b14e471a1b2635bab280d589ba9f3eb46ce502.tar.gz fork-ledger-81b14e471a1b2635bab280d589ba9f3eb46ce502.tar.bz2 fork-ledger-81b14e471a1b2635bab280d589ba9f3eb46ce502.zip |
Merge remote-tracking branch 'origin/master' into next
Diffstat (limited to 'src')
-rw-r--r-- | src/filters.cc | 33 | ||||
-rw-r--r-- | src/filters.h | 13 |
2 files changed, 14 insertions, 32 deletions
diff --git a/src/filters.cc b/src/filters.cc index ef713f1f..b6530c04 100644 --- a/src/filters.cc +++ b/src/filters.cc @@ -449,19 +449,15 @@ void collapse_posts::report_subtotal() DEBUG("filters.collapse", "earliest date = " << earliest_date); DEBUG("filters.collapse", "latest date = " << latest_date); - foreach (totals_map::value_type& pat, totals) { - handle_value(/* value= */ pat.second, - /* account= */ &temps.create_account(pat.first), - /* xact= */ &xact, - /* temps= */ temps, - /* handler= */ handler, - /* date= */ latest_date, - /* act_date_p= */ false); - } - + handle_value(/* value= */ subtotal, + /* account= */ totals_account, + /* xact= */ &xact, + /* temps= */ temps, + /* handler= */ handler, + /* date= */ latest_date, + /* act_date_p= */ false); } - totals.clear(); component_posts.clear(); last_xact = NULL; @@ -470,20 +466,6 @@ void collapse_posts::report_subtotal() count = 0; } -value_t& collapse_posts::find_totals(account_t* account) -{ - unsigned short depth=3; - - if(depth==0) - return totals[_("<Total>")]; - - if(account->depth==depth) - return totals[account->fullname()]; - - //else recurse - return find_totals(account->parent); -} - void collapse_posts::operator()(post_t& post) { // If we've reached a new xact, report on the subtotal @@ -493,7 +475,6 @@ void collapse_posts::operator()(post_t& post) report_subtotal(); post.add_to_value(subtotal, amount_expr); - post.add_to_value(find_totals(post.account), amount_expr); component_posts.push_back(&post); diff --git a/src/filters.h b/src/filters.h index e3dc19d8..1404b38e 100644 --- a/src/filters.h +++ b/src/filters.h @@ -421,9 +421,6 @@ public: class collapse_posts : public item_handler<post_t> { - - typedef std::map<string,value_t> totals_map; - expr_t& amount_expr; predicate_t display_predicate; predicate_t only_predicate; @@ -432,7 +429,7 @@ class collapse_posts : public item_handler<post_t> xact_t * last_xact; post_t * last_post; temporaries_t temps; - totals_map totals; + account_t * totals_account; bool only_collapse_if_zero; std::list<post_t *> component_posts; report_t& report; @@ -451,13 +448,17 @@ public: only_predicate(_only_predicate), count(0), last_xact(NULL), last_post(NULL), only_collapse_if_zero(_only_collapse_if_zero), report(_report) { + create_accounts(); TRACE_CTOR(collapse_posts, "post_handler_ptr, ..."); } virtual ~collapse_posts() { TRACE_DTOR(collapse_posts); handler.reset(); } - value_t& find_totals(account_t* account); + + void create_accounts() { + totals_account = &temps.create_account(_("<Total>")); + } virtual void flush() { report_subtotal(); @@ -479,7 +480,7 @@ public: last_post = NULL; temps.clear(); - totals.clear(); + create_accounts(); component_posts.clear(); item_handler<post_t>::clear(); |