small changes
This commit is contained in:
parent
57ee0f1b7d
commit
bf8c4a74a1
3 changed files with 15 additions and 24 deletions
|
|
@ -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") {
|
||||||
|
|
|
||||||
35
valexpr.cc
35
valexpr.cc
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue