summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2015-08-04 14:55:41 -0700
committerJohn Wiegley <johnw@newartisans.com>2015-08-04 14:55:41 -0700
commit81b14e471a1b2635bab280d589ba9f3eb46ce502 (patch)
treeae8d64d42ac2f20f83e459b237f19d6f967c6f02 /src
parenta24910b3740b572db15fda4bd574222090e16d79 (diff)
parent977e33d39e2c896ac632f84230139af8da189b9b (diff)
downloadfork-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.cc33
-rw-r--r--src/filters.h13
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();