From 71e7157a650c5296e792e5a88cce14d7bfcbaec4 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Mon, 26 Jan 2009 20:50:54 -0400 Subject: Added is_nonzero and a stream-based read() method to value_t. --- src/value.cc | 28 ++++++++++++++++++++++++++++ src/value.h | 5 +++++ 2 files changed, 33 insertions(+) (limited to 'src') diff --git a/src/value.cc b/src/value.cc index 1ebc3110..2d6d42d1 100644 --- a/src/value.cc +++ b/src/value.cc @@ -1747,6 +1747,34 @@ void value_t::print(std::ostream& out, const bool relaxed) const } } +void value_t::read(std::istream& in) +{ + switch (static_cast(binary::read_long(in))) { + case BOOLEAN: + set_boolean(binary::read_bool(in)); + break; + case INTEGER: + set_long(binary::read_long(in)); + break; + case DATETIME: + set_datetime(parse_datetime(binary::read_string(in))); + break; + case DATE: + set_date(parse_date(binary::read_string(in))); + break; + case AMOUNT: { + amount_t temp; + temp.read(in); + set_amount(temp); + break; + } + default: + break; + } + + throw_(value_error, "Cannot read " << label() << " from a stream"); +} + void value_t::read(const char *& data) { switch (static_cast(binary::read_long(data))) { diff --git a/src/value.h b/src/value.h index 5c55a117..3c6c1d41 100644 --- a/src/value.h +++ b/src/value.h @@ -429,6 +429,10 @@ public: */ operator bool() const; + bool is_nonzero() const { + return ! is_zero(); + } + bool is_realzero() const; bool is_zero() const; bool is_null() const { @@ -892,6 +896,7 @@ public: * stream or a character pointer, and it may be serialized to an * output stream. The methods used are: */ + void read(std::istream& in); void read(const char *& data); void write(std::ostream& out) const; -- cgit v1.2.3