Added a `terminus' global, which if set marks the "current time" as
seen by the value expression logic. This has the effect of changing valexprs that test against the current time, such as for calculating the market value of commodities.
This commit is contained in:
parent
83cc662b85
commit
00fe8bc815
3 changed files with 12 additions and 3 deletions
|
|
@ -3,6 +3,7 @@
|
|||
#include "option.h"
|
||||
#include "datetime.h"
|
||||
#include "quotes.h"
|
||||
#include "valexpr.h"
|
||||
#include "walk.h"
|
||||
#ifdef USE_BOOST_PYTHON
|
||||
#include "py_eval.h"
|
||||
|
|
@ -647,6 +648,8 @@ OPT_BEGIN(end, "e:") {
|
|||
config.predicate += "d<[";
|
||||
config.predicate += buf;
|
||||
config.predicate += "]";
|
||||
|
||||
terminus = interval.end;
|
||||
} OPT_END(end);
|
||||
|
||||
OPT_BEGIN(current, "c") {
|
||||
|
|
@ -811,6 +814,8 @@ OPT_BEGIN(period, "p:") {
|
|||
config.predicate += "d<[";
|
||||
config.predicate += buf;
|
||||
config.predicate += "]";
|
||||
|
||||
terminus = interval.end;
|
||||
}
|
||||
} OPT_END(period);
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ namespace ledger {
|
|||
std::auto_ptr<value_expr_t> amount_expr;
|
||||
std::auto_ptr<value_expr_t> total_expr;
|
||||
|
||||
std::time_t terminus = now;
|
||||
|
||||
void value_expr_t::compute(value_t& result, const details_t& details) const
|
||||
{
|
||||
switch (kind) {
|
||||
|
|
@ -112,7 +114,7 @@ void value_expr_t::compute(value_t& result, const details_t& details) const
|
|||
else if (details.entry)
|
||||
result = long(details.entry->date());
|
||||
else
|
||||
result = long(now);
|
||||
result = long(terminus);
|
||||
break;
|
||||
case CLEARED:
|
||||
if (details.xact)
|
||||
|
|
@ -286,7 +288,7 @@ void value_expr_t::compute(value_t& result, const details_t& details) const
|
|||
assert(left);
|
||||
left->compute(result, details);
|
||||
|
||||
std::time_t moment = now;
|
||||
std::time_t moment = terminus;
|
||||
if (right) {
|
||||
switch (right->kind) {
|
||||
case DATE:
|
||||
|
|
@ -453,7 +455,7 @@ value_expr_t * parse_value_term(std::istream& in)
|
|||
// Basic terms
|
||||
case 'm':
|
||||
node.reset(new value_expr_t(value_expr_t::CONSTANT_T));
|
||||
node->constant_t = now;
|
||||
node->constant_t = terminus;
|
||||
break;
|
||||
|
||||
case 'a': node.reset(new value_expr_t(value_expr_t::AMOUNT)); break;
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@ struct value_expr_t
|
|||
extern std::auto_ptr<value_expr_t> amount_expr;
|
||||
extern std::auto_ptr<value_expr_t> total_expr;
|
||||
|
||||
extern std::time_t terminus;
|
||||
|
||||
inline void compute_amount(value_t& result, const details_t& details) {
|
||||
if (amount_expr.get())
|
||||
amount_expr->compute(result, details);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue