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);
 }


Reply via email to