Implemented --unround using value expressions
This commit is contained in:
parent
6ac79137f7
commit
dd23edd5ce
4 changed files with 14 additions and 29 deletions
|
|
@ -90,13 +90,11 @@ post_handler_ptr chain_post_handlers(report_t& report,
|
||||||
report, report.HANDLED(revalued_only)));
|
report, report.HANDLED(revalued_only)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// calc_posts computes visited posting values and the running total
|
// calc_posts computes the running total. When this appears will determine,
|
||||||
|
// for example, whether filtered posts are included or excluded from the
|
||||||
|
// running total.
|
||||||
handler.reset(new calc_posts(handler, expr, only_preliminaries));
|
handler.reset(new calc_posts(handler, expr, only_preliminaries));
|
||||||
|
|
||||||
// unround_posts will unround the amounts in all postings
|
|
||||||
if (report.HANDLED(unround))
|
|
||||||
handler.reset(new unround_posts(handler));
|
|
||||||
|
|
||||||
// filter_posts will only pass through posts matching the
|
// filter_posts will only pass through posts matching the
|
||||||
// `secondary_predicate'.
|
// `secondary_predicate'.
|
||||||
if (report.HANDLED(only_)) {
|
if (report.HANDLED(only_)) {
|
||||||
|
|
|
||||||
|
|
@ -82,29 +82,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Brief
|
|
||||||
*
|
|
||||||
* Long.
|
|
||||||
*/
|
|
||||||
class unround_posts : public item_handler<post_t>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
unround_posts(post_handler_ptr handler)
|
|
||||||
: item_handler<post_t>(handler) {
|
|
||||||
TRACE_CTOR(unround_posts, "posts_list&");
|
|
||||||
}
|
|
||||||
virtual ~unround_posts() {
|
|
||||||
TRACE_DTOR(unround_posts);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void operator()(post_t& post) {
|
|
||||||
post.xdata().compound_value = post.amount.unrounded();
|
|
||||||
post.xdata().add_flags(POST_EXT_COMPOUND);
|
|
||||||
item_handler<post_t>::operator()(post);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class posts_iterator;
|
class posts_iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -196,6 +196,11 @@ value_t report_t::fn_rounded(call_scope_t& args)
|
||||||
return args.value().rounded();
|
return args.value().rounded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value_t report_t::fn_unrounded(call_scope_t& args)
|
||||||
|
{
|
||||||
|
return args.value().unrounded();
|
||||||
|
}
|
||||||
|
|
||||||
value_t report_t::fn_quantity(call_scope_t& scope)
|
value_t report_t::fn_quantity(call_scope_t& scope)
|
||||||
{
|
{
|
||||||
interactive_t args(scope, "a");
|
interactive_t args(scope, "a");
|
||||||
|
|
@ -858,6 +863,8 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
||||||
case 'u':
|
case 'u':
|
||||||
if (is_eq(p, "underline"))
|
if (is_eq(p, "underline"))
|
||||||
return WRAP_FUNCTOR(fn_underline);
|
return WRAP_FUNCTOR(fn_underline);
|
||||||
|
else if (is_eq(p, "unrounded"))
|
||||||
|
return MAKE_FUNCTOR(report_t::fn_unrounded);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
|
|
|
||||||
|
|
@ -145,6 +145,7 @@ public:
|
||||||
value_t fn_scrub(call_scope_t& scope);
|
value_t fn_scrub(call_scope_t& scope);
|
||||||
value_t fn_quantity(call_scope_t& scope);
|
value_t fn_quantity(call_scope_t& scope);
|
||||||
value_t fn_rounded(call_scope_t& scope);
|
value_t fn_rounded(call_scope_t& scope);
|
||||||
|
value_t fn_unrounded(call_scope_t& scope);
|
||||||
value_t fn_truncated(call_scope_t& scope);
|
value_t fn_truncated(call_scope_t& scope);
|
||||||
value_t fn_abs(call_scope_t& scope);
|
value_t fn_abs(call_scope_t& scope);
|
||||||
value_t fn_justify(call_scope_t& scope);
|
value_t fn_justify(call_scope_t& scope);
|
||||||
|
|
@ -639,7 +640,9 @@ public:
|
||||||
parent->HANDLER(limit_).on("uncleared|pending");
|
parent->HANDLER(limit_).on("uncleared|pending");
|
||||||
});
|
});
|
||||||
|
|
||||||
OPTION(report_t, unround);
|
OPTION_(report_t, unround, DO() {
|
||||||
|
parent->HANDLER(amount_).set_expr("unrounded(amount)");
|
||||||
|
});
|
||||||
|
|
||||||
OPTION_(report_t, weekly, DO() { // -W
|
OPTION_(report_t, weekly, DO() { // -W
|
||||||
parent->HANDLER(period_).on("weekly");
|
parent->HANDLER(period_).on("weekly");
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue