Added is_nonzero and a stream-based read() method to value_t.

This commit is contained in:
John Wiegley 2009-01-26 20:50:54 -04:00
parent 2170703310
commit 71e7157a65
2 changed files with 33 additions and 0 deletions

View file

@ -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<value_t::type_t>(binary::read_long<int>(in))) {
case BOOLEAN:
set_boolean(binary::read_bool(in));
break;
case INTEGER:
set_long(binary::read_long<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<value_t::type_t>(binary::read_long<int>(data))) {

View file

@ -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;