summaryrefslogtreecommitdiff
path: root/src/value.cc
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2009-11-06 15:35:16 -0500
committerJohn Wiegley <johnw@newartisans.com>2009-11-06 15:35:16 -0500
commitf03d386013f220e5b88a056c514c20319c83e9e7 (patch)
tree107234c2ca0947fac84be819611ff5c0c610dac6 /src/value.cc
parent312d4c5f5339c61253e86cd9ce825370eb4be053 (diff)
parent205639669981f1ab9dc355d07c60c123c4da0ca0 (diff)
downloadledger-f03d386013f220e5b88a056c514c20319c83e9e7.tar.gz
ledger-f03d386013f220e5b88a056c514c20319c83e9e7.tar.bz2
ledger-f03d386013f220e5b88a056c514c20319c83e9e7.zip
Merge branch 'next'
Diffstat (limited to 'src/value.cc')
-rw-r--r--src/value.cc29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/value.cc b/src/value.cc
index 4529300a..e2c9dc8b 100644
--- a/src/value.cc
+++ b/src/value.cc
@@ -279,6 +279,35 @@ void value_t::in_place_simplify()
#endif
}
+value_t value_t::number() const
+{
+ switch (type()) {
+ case VOID:
+ return 0L;
+ case BOOLEAN:
+ return as_boolean() ? 1L : 0L;
+ case INTEGER:
+ return as_long();
+ case AMOUNT:
+ return as_amount().number();
+ case BALANCE:
+ return as_balance().number();
+ case SEQUENCE:
+ if (! as_sequence().empty()) {
+ value_t temp;
+ foreach (const value_t& value, as_sequence())
+ temp += value.number();
+ return temp;
+ }
+ break;
+ default:
+ break;
+ }
+
+ throw_(value_error, _("Cannot determine numeric value of %1") << label());
+ return false;
+}
+
value_t& value_t::operator+=(const value_t& val)
{
if (is_string()) {