summaryrefslogtreecommitdiff
path: root/valexpr.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2005-10-28 07:20:34 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 02:41:20 -0400
commit00fe8bc815764a67b6d30411bcf9770320cc08ea (patch)
tree1b0d7310c1554ef143702a70ed23c737c1026ceb /valexpr.cc
parent83cc662b8570a173850e260b1c6adc8457d98a83 (diff)
downloadfork-ledger-00fe8bc815764a67b6d30411bcf9770320cc08ea.tar.gz
fork-ledger-00fe8bc815764a67b6d30411bcf9770320cc08ea.tar.bz2
fork-ledger-00fe8bc815764a67b6d30411bcf9770320cc08ea.zip
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.
Diffstat (limited to 'valexpr.cc')
-rw-r--r--valexpr.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/valexpr.cc b/valexpr.cc
index e65ecb26..78f481a6 100644
--- a/valexpr.cc
+++ b/valexpr.cc
@@ -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;