From ac3f850123c903f00c163d6d2dbad22d98aec7a2 Mon Sep 17 00:00:00 2001 From: "Carl C. Trieloff" Date: Thu, 28 Feb 2008 18:55:21 +0000 Subject: QPID-820 from tross git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@632087 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/Buffer.cpp | 48 +++++++++++++++++++++++++++++++++++++++++ cpp/src/qpid/framing/Buffer.h | 8 ++++++- 2 files changed, 55 insertions(+), 1 deletion(-) (limited to 'cpp/src/qpid/framing') diff --git a/cpp/src/qpid/framing/Buffer.cpp b/cpp/src/qpid/framing/Buffer.cpp index 7eadf377b9..c0cd210042 100644 --- a/cpp/src/qpid/framing/Buffer.cpp +++ b/cpp/src/qpid/framing/Buffer.cpp @@ -74,6 +74,31 @@ void Buffer::putLongLong(uint64_t i){ putLong(lo); } +void Buffer::putFloat(float f){ + union { + uint32_t i; + float f; + } val; + + val.f = f; + putLong (val.i); +} + +void Buffer::putDouble(double f){ + union { + uint64_t i; + double f; + } val; + + val.f = f; + putLongLong (val.i); +} + +void Buffer::putBin128(uint8_t* b){ + memcpy (data + position, b, 16); + position += 16; +} + uint8_t Buffer::getOctet(){ return (uint8_t) data[position++]; } @@ -104,6 +129,24 @@ uint64_t Buffer::getLongLong(){ return hi | lo; } +float Buffer::getFloat(){ + union { + uint32_t i; + float f; + } val; + val.i = getLong(); + return val.f; +} + +double Buffer::getDouble(){ + union { + uint64_t i; + double f; + } val; + val.i = getLongLong(); + return val.f; +} + template <> uint64_t Buffer::getUInt<1>() { return getOctet(); @@ -172,6 +215,11 @@ void Buffer::getLongString(string& s){ position += len; } +void Buffer::getBin128(uint8_t* b){ + memcpy (b, data + position, 16); + position += 16; +} + void Buffer::putRawData(const string& s){ uint32_t len = s.length(); s.copy(data + position, len); diff --git a/cpp/src/qpid/framing/Buffer.h b/cpp/src/qpid/framing/Buffer.h index 5ab897d351..d0ca41f82b 100644 --- a/cpp/src/qpid/framing/Buffer.h +++ b/cpp/src/qpid/framing/Buffer.h @@ -57,11 +57,16 @@ public: void putShort(uint16_t i); void putLong(uint32_t i); void putLongLong(uint64_t i); + void putFloat(float f); + void putDouble(double f); + void putBin128(uint8_t* b); - uint8_t getOctet(); + uint8_t getOctet(); uint16_t getShort(); uint32_t getLong(); uint64_t getLongLong(); + float getFloat(); + double getDouble(); template uint64_t getUInt(); @@ -73,6 +78,7 @@ public: void putLongString(const string& s); void getShortString(string& s); void getLongString(string& s); + void getBin128(uint8_t* b); void putRawData(const string& s); void getRawData(string& s, uint32_t size); -- cgit v1.2.1