summaryrefslogtreecommitdiff
path: root/src/annotate.h
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2012-03-05 23:01:41 -0600
committerJohn Wiegley <johnw@newartisans.com>2012-03-05 23:01:41 -0600
commit8ae2fb87211b2c1a0159480ea6908db2afa20189 (patch)
tree9a20711c1be681b5d016d2420f91aec9531d5196 /src/annotate.h
parent7b12b3041dccfb082949a5f1fdbd83396aae4f26 (diff)
downloadfork-ledger-8ae2fb87211b2c1a0159480ea6908db2afa20189.tar.gz
fork-ledger-8ae2fb87211b2c1a0159480ea6908db2afa20189.tar.bz2
fork-ledger-8ae2fb87211b2c1a0159480ea6908db2afa20189.zip
Add support for valuation expressions on commodities
Diffstat (limited to 'src/annotate.h')
-rw-r--r--src/annotate.h46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/annotate.h b/src/annotate.h
index 29294e88..eb87a1b2 100644
--- a/src/annotate.h
+++ b/src/annotate.h
@@ -46,29 +46,38 @@
#ifndef _ANNOTATE_H
#define _ANNOTATE_H
+#include "expr.h"
+
namespace ledger {
struct annotation_t : public supports_flags<>,
public equality_comparable<annotation_t>
{
-#define ANNOTATION_PRICE_CALCULATED 0x01
-#define ANNOTATION_PRICE_FIXATED 0x02
-#define ANNOTATION_DATE_CALCULATED 0x04
-#define ANNOTATION_TAG_CALCULATED 0x08
+#define ANNOTATION_PRICE_CALCULATED 0x01
+#define ANNOTATION_PRICE_FIXATED 0x02
+#define ANNOTATION_DATE_CALCULATED 0x04
+#define ANNOTATION_TAG_CALCULATED 0x08
+#define ANNOTATION_VALUE_EXPR_CALCULATED 0x10
optional<amount_t> price;
optional<date_t> date;
optional<string> tag;
-
- explicit annotation_t(const optional<amount_t>& _price = none,
- const optional<date_t>& _date = none,
- const optional<string>& _tag = none)
- : supports_flags<>(), price(_price), date(_date), tag(_tag) {
- TRACE_CTOR(annotation_t, "const optional<amount_t>& + date_t + string");
+ optional<expr_t> value_expr;
+
+ explicit annotation_t(const optional<amount_t>& _price = none,
+ const optional<date_t>& _date = none,
+ const optional<string>& _tag = none,
+ const optional<expr_t>& _value_expr = none)
+ : supports_flags<>(), price(_price), date(_date), tag(_tag),
+ value_expr(_value_expr) {
+ TRACE_CTOR(annotation_t,
+ "const optional<amount_t>& + date_t + string + expr_t");
}
annotation_t(const annotation_t& other)
: supports_flags<>(other.flags()),
- price(other.price), date(other.date), tag(other.tag) {
+ price(other.price), date(other.date), tag(other.tag),
+ value_expr(other.value_expr)
+ {
TRACE_CTOR(annotation_t, "copy");
}
~annotation_t() {
@@ -76,14 +85,15 @@ struct annotation_t : public supports_flags<>,
}
operator bool() const {
- return price || date || tag;
+ return price || date || tag || value_expr;
}
bool operator<(const annotation_t& rhs) const;
bool operator==(const annotation_t& rhs) const {
- return (price == rhs.price &&
- date == rhs.date &&
- tag == rhs.tag);
+ return (price == rhs.price &&
+ date == rhs.date &&
+ tag == rhs.tag &&
+ value_expr == rhs.value_expr);
}
void parse(std::istream& in);
@@ -133,6 +143,12 @@ inline void to_xml(std::ostream& out, const annotation_t& details)
push_xml y(out, "tag");
out << y.guard(*details.tag);
}
+
+ if (details.value_expr)
+ {
+ push_xml y(out, "value-expr");
+ out << y.guard(details.value_expr->text());
+ }
}
struct keep_details_t