summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wiegley <johnw@newartisans.com>2006-03-04 14:50:49 +0000
committerJohn Wiegley <johnw@newartisans.com>2008-04-13 05:48:44 -0400
commit1d9ed97c24352a2704d869a4b5d51b4bca82bc48 (patch)
tree06ddd307d77226182fed1b37e52ddbaaf763f3dd
parent581b3d5b9a3eebdd8f396d910386cadd9426b915 (diff)
downloadfork-ledger-1d9ed97c24352a2704d869a4b5d51b4bca82bc48.tar.gz
fork-ledger-1d9ed97c24352a2704d869a4b5d51b4bca82bc48.tar.bz2
fork-ledger-1d9ed97c24352a2704d869a4b5d51b4bca82bc48.zip
*** no comment ***
-rw-r--r--value.cc717
-rw-r--r--value.h1
2 files changed, 242 insertions, 476 deletions
diff --git a/value.cc b/value.cc
index fbdda0ae..2af9ecf6 100644
--- a/value.cc
+++ b/value.cc
@@ -57,486 +57,253 @@ value_t& value_t::operator=(const value_t& value)
return *this;
}
-value_t& value_t::operator+=(const value_t& value)
-{
- switch (type) {
- case BOOLEAN:
- case INTEGER:
- cast(INTEGER);
- switch (value.type) {
- case BOOLEAN:
- *((long *) data) += (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((long *) data) += *((long *) value.data);
- break;
- case AMOUNT:
- cast(AMOUNT);
- *((amount_t *) data) += *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) += *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) += *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case AMOUNT:
- switch (value.type) {
- case BOOLEAN:
- if (*((bool *) value.data) &&
- ((amount_t *) data)->commodity()) {
- cast(BALANCE);
- return *this += value;
- }
- *((amount_t *) data) += (*((bool *) value.data) ? 1L : 0L);
- break;
-
- case INTEGER:
- if (*((long *) value.data) &&
- ((amount_t *) data)->commodity()) {
- cast(BALANCE);
- return *this += value;
- }
- *((amount_t *) data) += *((long *) value.data);
- break;
-
- case AMOUNT:
- if (((amount_t *) data)->commodity() !=
- ((amount_t *) value.data)->commodity()) {
- cast(BALANCE);
- return *this += value;
- }
- *((amount_t *) data) += *((amount_t *) value.data);
- break;
-
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) += *((balance_t *) value.data);
- break;
-
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) += *((balance_pair_t *) value.data);
- break;
-
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE:
- switch (value.type) {
- case BOOLEAN:
- *((balance_t *) data) += (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_t *) data) += *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_t *) data) += *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_t *) data) += *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) += *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE_PAIR:
- switch (value.type) {
- case BOOLEAN:
- *((balance_pair_t *) data) += (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_pair_t *) data) += *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_pair_t *) data) += *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_pair_t *) data) += *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- *((balance_pair_t *) data) += *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- default:
- assert(0);
- break;
- }
- return *this;
-}
-
-value_t& value_t::operator-=(const value_t& value)
-{
- switch (type) {
- case BOOLEAN:
- case INTEGER:
- cast(INTEGER);
- switch (value.type) {
- case BOOLEAN:
- *((long *) data) -= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((long *) data) -= *((long *) value.data);
- break;
- case AMOUNT:
- cast(AMOUNT);
- *((amount_t *) data) -= *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) -= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) -= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case AMOUNT:
- switch (value.type) {
- case BOOLEAN:
- if (*((bool *) value.data) &&
- ((amount_t *) data)->commodity()) {
- cast(BALANCE);
- return *this -= value;
- }
- *((amount_t *) data) -= (*((bool *) value.data) ? 1L : 0L);
- break;
-
- case INTEGER:
- if (*((long *) value.data) &&
- ((amount_t *) data)->commodity()) {
- cast(BALANCE);
- return *this -= value;
- }
- *((amount_t *) data) -= *((long *) value.data);
- break;
-
- case AMOUNT:
- if (((amount_t *) data)->commodity() !=
- ((amount_t *) value.data)->commodity()) {
- cast(BALANCE);
- return *this -= value;
- }
- *((amount_t *) data) -= *((amount_t *) value.data);
- break;
-
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) -= *((balance_t *) value.data);
- break;
-
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) -= *((balance_pair_t *) value.data);
- break;
-
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE:
- switch (value.type) {
- case BOOLEAN:
- *((balance_t *) data) -= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_t *) data) -= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_t *) data) -= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_t *) data) -= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) -= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE_PAIR:
- switch (value.type) {
- case BOOLEAN:
- *((balance_pair_t *) data) -= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_pair_t *) data) -= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_pair_t *) data) -= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_pair_t *) data) -= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- *((balance_pair_t *) data) -= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- default:
- assert(0);
- break;
- }
-
- return *this;
+#define DEF_VALUE_ADDSUB_OP(OP) \
+value_t& value_t::operator OP(const value_t& value) \
+{ \
+ switch (type) { \
+ case BOOLEAN: \
+ case INTEGER: \
+ cast(INTEGER); \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((long *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((long *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ cast(AMOUNT); \
+ *((amount_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ cast(BALANCE); \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case AMOUNT: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ if (*((bool *) value.data) && \
+ ((amount_t *) data)->commodity()) { \
+ cast(BALANCE); \
+ return *this OP value; \
+ } \
+ *((amount_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ \
+ case INTEGER: \
+ if (*((long *) value.data) && \
+ ((amount_t *) data)->commodity()) { \
+ cast(BALANCE); \
+ return *this OP value; \
+ } \
+ *((amount_t *) data) OP *((long *) value.data); \
+ break; \
+ \
+ case AMOUNT: \
+ if (((amount_t *) data)->commodity() != \
+ ((amount_t *) value.data)->commodity()) { \
+ cast(BALANCE); \
+ return *this OP value; \
+ } \
+ *((amount_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ \
+ case BALANCE: \
+ cast(BALANCE); \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case BALANCE: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((balance_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((balance_t *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ *((balance_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case BALANCE_PAIR: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((balance_pair_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((balance_pair_t *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ *((balance_pair_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ *((balance_pair_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ return *this; \
}
-value_t& value_t::operator*=(const value_t& value)
-{
- switch (type) {
- case BOOLEAN:
- case INTEGER:
- cast(INTEGER);
- switch (value.type) {
- case BOOLEAN:
- *((long *) data) *= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((long *) data) *= *((long *) value.data);
- break;
- case AMOUNT:
- cast(AMOUNT);
- *((amount_t *) data) *= *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) *= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) *= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case AMOUNT:
- switch (value.type) {
- case BOOLEAN:
- *((amount_t *) data) *= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((amount_t *) data) *= *((long *) value.data);
- break;
- case AMOUNT:
- *((amount_t *) data) *= *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) *= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) *= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE:
- switch (value.type) {
- case BOOLEAN:
- *((balance_t *) data) *= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_t *) data) *= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_t *) data) *= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_t *) data) *= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) *= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE_PAIR:
- switch (value.type) {
- case BOOLEAN:
- *((balance_pair_t *) data) *= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_pair_t *) data) *= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_pair_t *) data) *= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_pair_t *) data) *= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- *((balance_pair_t *) data) *= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
+DEF_VALUE_ADDSUB_OP(+=)
+DEF_VALUE_ADDSUB_OP(-=)
- default:
- assert(0);
- break;
- }
- return *this;
+#define DEF_VALUE_MULDIV_OP(OP) \
+value_t& value_t::operator OP(const value_t& value) \
+{ \
+ switch (type) { \
+ case BOOLEAN: \
+ case INTEGER: \
+ cast(INTEGER); \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((long *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((long *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ cast(AMOUNT); \
+ *((amount_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ cast(BALANCE); \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case AMOUNT: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((amount_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((amount_t *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ *((amount_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ cast(BALANCE); \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case BALANCE: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((balance_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((balance_t *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ *((balance_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ *((balance_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ cast(BALANCE_PAIR); \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ case BALANCE_PAIR: \
+ switch (value.type) { \
+ case BOOLEAN: \
+ *((balance_pair_t *) data) OP (*((bool *) value.data) ? 1L : 0L); \
+ break; \
+ case INTEGER: \
+ *((balance_pair_t *) data) OP *((long *) value.data); \
+ break; \
+ case AMOUNT: \
+ *((balance_pair_t *) data) OP *((amount_t *) value.data); \
+ break; \
+ case BALANCE: \
+ *((balance_pair_t *) data) OP *((balance_t *) value.data); \
+ break; \
+ case BALANCE_PAIR: \
+ *((balance_pair_t *) data) OP *((balance_pair_t *) value.data); \
+ break; \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ break; \
+ \
+ default: \
+ assert(0); \
+ break; \
+ } \
+ return *this; \
}
-value_t& value_t::operator/=(const value_t& value)
-{
- switch (type) {
- case BOOLEAN:
- case INTEGER:
- cast(INTEGER);
- switch (value.type) {
- case BOOLEAN:
- *((long *) data) /= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((long *) data) /= *((long *) value.data);
- break;
- case AMOUNT:
- cast(AMOUNT);
- *((amount_t *) data) /= *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) /= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) /= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case AMOUNT:
- switch (value.type) {
- case BOOLEAN:
- *((amount_t *) data) /= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((amount_t *) data) /= *((long *) value.data);
- break;
- case AMOUNT:
- *((amount_t *) data) /= *((amount_t *) value.data);
- break;
- case BALANCE:
- cast(BALANCE);
- *((balance_t *) data) /= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) /= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE:
- switch (value.type) {
- case BOOLEAN:
- *((balance_t *) data) /= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_t *) data) /= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_t *) data) /= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_t *) data) /= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- cast(BALANCE_PAIR);
- *((balance_pair_t *) data) /= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- case BALANCE_PAIR:
- switch (value.type) {
- case BOOLEAN:
- *((balance_pair_t *) data) /= (*((bool *) value.data) ? 1L : 0L);
- break;
- case INTEGER:
- *((balance_pair_t *) data) /= *((long *) value.data);
- break;
- case AMOUNT:
- *((balance_pair_t *) data) /= *((amount_t *) value.data);
- break;
- case BALANCE:
- *((balance_pair_t *) data) /= *((balance_t *) value.data);
- break;
- case BALANCE_PAIR:
- *((balance_pair_t *) data) /= *((balance_pair_t *) value.data);
- break;
- default:
- assert(0);
- break;
- }
- break;
-
- default:
- assert(0);
- break;
- }
- return *this;
-}
+DEF_VALUE_MULDIV_OP(*=)
+DEF_VALUE_MULDIV_OP(/=)
#define DEF_VALUE_CMP_OP(OP) \
bool value_t::operator OP(const value_t& value) \
diff --git a/value.h b/value.h
index 59752dec..ad7a936d 100644
--- a/value.h
+++ b/value.h
@@ -89,7 +89,6 @@ class value_t
}
void destroy();
- void simplify();
value_t& operator=(const value_t& value);
value_t& operator=(const bool value) {