Added xact_t::count member

This allows reports to access the "whicheth" index of the reported
transaction.  It's used mainly by the --average report, which divides
the running total by this count to get the arithmetic mean.
This commit is contained in:
John Wiegley 2009-02-15 15:41:24 -04:00
parent 36b96c47ac
commit 03219d910f
3 changed files with 17 additions and 2 deletions

View file

@ -186,8 +186,13 @@ void calc_xacts::operator()(xact_t& xact)
try { try {
xact_t::xdata_t& xdata(xact.xdata()); xact_t::xdata_t& xdata(xact.xdata());
if (last_xact && last_xact->has_xdata()) if (last_xact) {
assert(last_xact->has_xdata());
add_or_set_value(xdata.total, last_xact->xdata().total); add_or_set_value(xdata.total, last_xact->xdata().total);
xdata.count = last_xact->xdata().count + 1;
} else {
xdata.count = 1;
}
xact.add_to_value(xdata.total, amount_expr); xact.add_to_value(xdata.total, amount_expr);

View file

@ -182,6 +182,11 @@ namespace {
return xact.amount; return xact.amount;
} }
value_t get_count(xact_t& xact) {
assert(xact.xdata_);
return xact.xdata_->count;
}
value_t get_account(call_scope_t& scope) value_t get_account(call_scope_t& scope)
{ {
xact_t& xact(find_scope<xact_t>(scope)); xact_t& xact(find_scope<xact_t>(scope));
@ -231,6 +236,8 @@ expr_t::ptr_op_t xact_t::lookup(const string& name)
return WRAP_FUNCTOR(get_wrapper<&get_code>); return WRAP_FUNCTOR(get_wrapper<&get_code>);
else if (name == "cost") else if (name == "cost")
return WRAP_FUNCTOR(get_wrapper<&get_cost>); return WRAP_FUNCTOR(get_wrapper<&get_cost>);
else if (name == "count")
return WRAP_FUNCTOR(get_wrapper<&get_count>);
else if (name == "calculated") else if (name == "calculated")
return WRAP_FUNCTOR(get_wrapper<&get_is_calculated>); return WRAP_FUNCTOR(get_wrapper<&get_is_calculated>);
break; break;

View file

@ -140,6 +140,7 @@ public:
#define XACT_EXT_MATCHES 0x80 #define XACT_EXT_MATCHES 0x80
value_t total; value_t total;
std::size_t count;
value_t value; value_t value;
date_t date; date_t date;
account_t * account; account_t * account;
@ -147,12 +148,14 @@ public:
std::list<sort_value_t> sort_values; std::list<sort_value_t> sort_values;
xdata_t() : supports_flags<>(), account(NULL), ptr(NULL) { xdata_t()
: supports_flags<>(), count(0), account(NULL), ptr(NULL) {
TRACE_CTOR(xact_t::xdata_t, ""); TRACE_CTOR(xact_t::xdata_t, "");
} }
xdata_t(const xdata_t& other) xdata_t(const xdata_t& other)
: supports_flags<>(other.flags()), : supports_flags<>(other.flags()),
total(other.total), total(other.total),
count(other.count),
value(other.value), value(other.value),
date(other.date), date(other.date),
account(other.account), account(other.account),