Author: aconway
Date: Tue Jul 3 22:26:26 2007
New Revision: 553083
URL: http://svn.apache.org/viewvc?view=rev&rev=553083
Log:
Encode/decode for UUIDs.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h
incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp?view=diff&rev=553083&r1=553082&r2=553083
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.cpp Tue Jul 3
22:26:26 2007
@@ -181,3 +181,13 @@
s.assign(data + position, len);
position += len;
}
+
+void qpid::framing::Buffer::putRawData(const uint8_t* s, size_t len){
+ memcpy(data + position, s, len);
+ position += len;
+}
+
+void qpid::framing::Buffer::getRawData(uint8_t* s, size_t len){
+ memcpy(s, data + position, len);
+ position += len;
+}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h?view=diff&rev=553083&r1=553082&r2=553083
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Buffer.h Tue Jul 3 22:26:26
2007
@@ -78,6 +78,9 @@
void putRawData(const string& s);
void getRawData(string& s, uint32_t size);
+ void putRawData(const uint8_t* data, size_t size);
+ void getRawData(uint8_t* data, size_t size);
+
};
}} // namespace qpid::framing
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp?view=diff&rev=553083&r1=553082&r2=553083
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp Tue Jul 3 22:26:26
2007
@@ -17,7 +17,11 @@
*/
#include "Uuid.h"
-#include "uuid/uuid.h"
+
+#include "qpid/QpidError.h"
+#include "qpid/framing/Buffer.h"
+
+#include <uuid/uuid.h>
namespace qpid {
namespace framing {
@@ -29,6 +33,16 @@
Uuid::Uuid(uint8_t* uu) { uuid_copy(c_array(),uu); }
static const size_t UNPARSED_SIZE=36;
+
+void Uuid::encode(Buffer& buf) {
+ buf.putRawData(data(), size());
+}
+
+void Uuid::decode(Buffer& buf) {
+ if (buf.available() < size())
+ THROW_QPID_ERROR(FRAMING_ERROR, "Not enough data for UUID.");
+ buf.getRawData(c_array(), size());
+}
ostream& operator<<(ostream& out, const Uuid& uuid) {
char unparsed[UNPARSED_SIZE + 1];
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h?view=diff&rev=553083&r1=553082&r2=553083
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h Tue Jul 3 22:26:26
2007
@@ -26,6 +26,8 @@
namespace qpid {
namespace framing {
+class Buffer;
+
/**
* A UUID is represented as a boost::array of 16 bytes.
*
@@ -41,6 +43,9 @@
// Default op= and copy ctor are fine.
// boost::array gives us ==, < etc.
+
+ void encode(framing::Buffer& buf);
+ void decode(framing::Buffer& buf);
};
/** Print in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb */
Modified: incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp?view=diff&rev=553083&r1=553082&r2=553083
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp Tue Jul 3 22:26:26 2007
@@ -17,6 +17,7 @@
*/
#include "qpid/framing/Uuid.h"
+#include "qpid/framing/Buffer.h"
#define BOOST_AUTO_TEST_MAIN
#include <boost/test/auto_unit_test.hpp>
@@ -57,4 +58,14 @@
out << uuid;
BOOST_CHECK(out.good());
BOOST_CHECK_EQUAL(out.str(), sampleStr);
+}
+
+BOOST_AUTO_TEST_CASE(testUuidEncodeDecode) {
+ Buffer buf(Uuid::size());
+ Uuid uuid;
+ uuid.encode(buf);
+ buf.flip();
+ Uuid decoded;
+ decoded.decode(buf);
+ BOOST_CHECK(uuid==decoded);
}