small changes

This commit is contained in:
John Wiegley 2004-08-17 20:32:14 -04:00
parent 57ee0f1b7d
commit bf8c4a74a1
3 changed files with 15 additions and 24 deletions

View file

@ -176,7 +176,7 @@ OPT_BEGIN(end_date, "e:") {
OPT_BEGIN(current, "c") { OPT_BEGIN(current, "c") {
if (! config->predicate.empty()) if (! config->predicate.empty())
config->predicate += "&"; config->predicate += "&";
config->predicate += "(d<N)"; config->predicate += "(d<=N)";
} OPT_END(current); } OPT_END(current);
OPT_BEGIN(cleared, "C") { OPT_BEGIN(cleared, "C") {

View file

@ -144,10 +144,6 @@ void value_expr_t::compute(balance_t& result, const details_t& details) const
result = (unsigned int) now; result = (unsigned int) now;
break; break;
case TODAY:
result = (unsigned int) now;
break;
case CLEARED: case CLEARED:
if (details.entry) { if (details.entry) {
result = details.entry->state == entry_t::CLEARED; result = details.entry->state == entry_t::CLEARED;
@ -190,9 +186,7 @@ void value_expr_t::compute(balance_t& result, const details_t& details) const
break; break;
case DEPTH: case DEPTH:
if (details.xact) if (details.account)
result = details.xact->account->depth - 1;
else if (details.account)
result = details.account->depth - 1; result = details.account->depth - 1;
break; break;
@ -252,25 +246,21 @@ void value_expr_t::compute(balance_t& result, const details_t& details) const
assert(left); assert(left);
left->compute(result, details); left->compute(result, details);
std::time_t moment = -1; std::time_t moment = now;
if (right) { if (right) {
switch (right->type) { switch (right->type) {
case DATE: case DATE:
if (details.entry) if (details.entry)
moment = details.entry->date; moment = details.entry->date;
else
moment = now;
break; break;
case TODAY: case CONSTANT_T:
moment = now; moment = right->constant_t;
break; break;
default: default:
throw compute_error("Invalid date passed to P(value,date)"); throw compute_error("Invalid date passed to P(value,date)");
} }
} else {
moment = now;
} }
result = result.value(moment); result = result.value(moment);
break; break;
@ -315,9 +305,8 @@ void value_expr_t::compute(balance_t& result, const details_t& details) const
case O_GTE: { case O_GTE: {
assert(left); assert(left);
assert(right); assert(right);
left->compute(result, details); balance_t temp;
balance_t temp = result; left->compute(temp, details);
result = 0;
right->compute(result, details); right->compute(result, details);
switch (type) { switch (type) {
case O_EQ: result = temp == result; break; case O_EQ: result = temp == result; break;
@ -336,9 +325,8 @@ void value_expr_t::compute(balance_t& result, const details_t& details) const
case O_DIV: { case O_DIV: {
assert(left); assert(left);
assert(right); assert(right);
right->compute(result, details); balance_t temp;
balance_t temp = result; right->compute(temp, details);
result = 0;
left->compute(result, details); left->compute(result, details);
switch (type) { switch (type) {
case O_ADD: result += temp; break; case O_ADD: result += temp; break;
@ -390,10 +378,14 @@ value_expr_t * parse_value_term(std::istream& in)
in.get(c); in.get(c);
switch (c) { switch (c) {
// Basic terms // Basic terms
case 'N':
node = new value_expr_t(value_expr_t::CONSTANT_T);
node->constant_t = now;
break;
case 'a': node = new value_expr_t(value_expr_t::AMOUNT); break; case 'a': node = new value_expr_t(value_expr_t::AMOUNT); break;
case 'c': node = new value_expr_t(value_expr_t::COST); break; case 'c': node = new value_expr_t(value_expr_t::COST); break;
case 'd': node = new value_expr_t(value_expr_t::DATE); break; case 'd': node = new value_expr_t(value_expr_t::DATE); break;
case 'N': node = new value_expr_t(value_expr_t::TODAY); break;
case 'X': node = new value_expr_t(value_expr_t::CLEARED); break; case 'X': node = new value_expr_t(value_expr_t::CLEARED); break;
case 'R': node = new value_expr_t(value_expr_t::REAL); break; case 'R': node = new value_expr_t(value_expr_t::REAL); break;
case 'n': node = new value_expr_t(value_expr_t::INDEX); break; case 'n': node = new value_expr_t(value_expr_t::INDEX); break;
@ -727,7 +719,6 @@ void dump_value_expr(std::ostream& out, const value_expr_t * node)
case value_expr_t::AMOUNT: out << "AMOUNT"; break; case value_expr_t::AMOUNT: out << "AMOUNT"; break;
case value_expr_t::COST: out << "COST"; break; case value_expr_t::COST: out << "COST"; break;
case value_expr_t::DATE: out << "DATE"; break; case value_expr_t::DATE: out << "DATE"; break;
case value_expr_t::TODAY: out << "TODAY"; break;
case value_expr_t::CLEARED: out << "CLEARED"; break; case value_expr_t::CLEARED: out << "CLEARED"; break;
case value_expr_t::REAL: out << "REAL"; break; case value_expr_t::REAL: out << "REAL"; break;
case value_expr_t::INDEX: out << "INDEX"; break; case value_expr_t::INDEX: out << "INDEX"; break;

View file

@ -2,6 +2,7 @@
#define _EXPR_H #define _EXPR_H
#include "ledger.h" #include "ledger.h"
#include "value.h"
#include "error.h" #include "error.h"
namespace ledger { namespace ledger {
@ -49,7 +50,6 @@ struct value_expr_t
AMOUNT, AMOUNT,
COST, COST,
DATE, DATE,
TODAY,
CLEARED, CLEARED,
REAL, REAL,
INDEX, INDEX,