diff options
author | Alan Conway <aconway@apache.org> | 2006-09-27 19:50:23 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2006-09-27 19:50:23 +0000 |
commit | caca23c5dc055d985fecfe188573104bc707ad9d (patch) | |
tree | 154c0bbd4c7bca70080de28116b5654491657906 /cpp/common/framing/src/Value.cpp | |
parent | 9d718c2348708b0b27ce9fb9fcbf05c4b0a997cc (diff) | |
download | qpid-python-caca23c5dc055d985fecfe188573104bc707ad9d.tar.gz |
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@450556 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/common/framing/src/Value.cpp')
-rw-r--r-- | cpp/common/framing/src/Value.cpp | 82 |
1 files changed, 68 insertions, 14 deletions
diff --git a/cpp/common/framing/src/Value.cpp b/cpp/common/framing/src/Value.cpp index 240b086696..1c210fdb12 100644 --- a/cpp/common/framing/src/Value.cpp +++ b/cpp/common/framing/src/Value.cpp @@ -18,40 +18,94 @@ #include "Value.h" #include "Buffer.h" #include "FieldTable.h" +#include "QpidError.h" -void qpid::framing::StringValue::encode(Buffer& buffer){ +namespace qpid { +namespace framing { + +Value::~Value() {} + +void StringValue::encode(Buffer& buffer){ buffer.putLongString(value); } -void qpid::framing::StringValue::decode(Buffer& buffer){ +void StringValue::decode(Buffer& buffer){ buffer.getLongString(value); } -void qpid::framing::IntegerValue::encode(Buffer& buffer){ +void IntegerValue::encode(Buffer& buffer){ buffer.putLong((u_int32_t) value); } -void qpid::framing::IntegerValue::decode(Buffer& buffer){ +void IntegerValue::decode(Buffer& buffer){ value = buffer.getLong(); } -void qpid::framing::TimeValue::encode(Buffer& buffer){ +void TimeValue::encode(Buffer& buffer){ buffer.putLongLong(value); } -void qpid::framing::TimeValue::decode(Buffer& buffer){ +void TimeValue::decode(Buffer& buffer){ value = buffer.getLongLong(); } -void qpid::framing::DecimalValue::encode(Buffer& buffer){ - buffer.putOctet(decimals); - buffer.putLong(value); +void DecimalValue::encode(Buffer& buffer){ + buffer.putOctet(value.decimals); + buffer.putLong(value.value); } -void qpid::framing::DecimalValue::decode(Buffer& buffer){ - decimals = buffer.getOctet(); - value = buffer.getLong(); +void DecimalValue::decode(Buffer& buffer){ + value = Decimal(buffer.getLong(), buffer.getOctet()); } -void qpid::framing::FieldTableValue::encode(Buffer& buffer){ +void FieldTableValue::encode(Buffer& buffer){ buffer.putFieldTable(value); } -void qpid::framing::FieldTableValue::decode(Buffer& buffer){ +void FieldTableValue::decode(Buffer& buffer){ buffer.getFieldTable(value); } + +std::auto_ptr<Value> Value::decode_value(Buffer& buffer) +{ + std::auto_ptr<Value> value; + u_int8_t type = buffer.getOctet(); + switch(type){ + case 'S': + value.reset(new StringValue()); + break; + case 'I': + value.reset(new IntegerValue()); + break; + case 'D': + value.reset(new DecimalValue()); + break; + case 'T': + value.reset(new TimeValue()); + break; + case 'F': + value.reset(new FieldTableValue()); + break; + default: + THROW_QPID_ERROR(FRAMING_ERROR, "Unknown field table value type"); + } + value->decode(buffer); + return value; +} + +EmptyValue::~EmptyValue() {} + +void EmptyValue::print(std::ostream& out) const +{ + out << "<empty field value>"; +} + +std::ostream& operator<<(std::ostream& out, const Value& v) { + v.print(out); + return out; +} + +std::ostream& operator<<(std::ostream& out, const Decimal& d) +{ + return out << "Decimal(" << d.value << "," << d.decimals << ")"; +} + +}} + + + |