diff options
author | John Wiegley <johnw@newartisans.com> | 2009-11-06 15:35:16 -0500 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2009-11-06 15:35:16 -0500 |
commit | f03d386013f220e5b88a056c514c20319c83e9e7 (patch) | |
tree | 107234c2ca0947fac84be819611ff5c0c610dac6 /src/value.cc | |
parent | 312d4c5f5339c61253e86cd9ce825370eb4be053 (diff) | |
parent | 205639669981f1ab9dc355d07c60c123c4da0ca0 (diff) | |
download | ledger-f03d386013f220e5b88a056c514c20319c83e9e7.tar.gz ledger-f03d386013f220e5b88a056c514c20319c83e9e7.tar.bz2 ledger-f03d386013f220e5b88a056c514c20319c83e9e7.zip |
Merge branch 'next'
Diffstat (limited to 'src/value.cc')
-rw-r--r-- | src/value.cc | 29 |
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()) { |