Author: aconway
Date: Tue Jul  3 13:39:16 2007
New Revision: 552970

URL: http://svn.apache.org/viewvc?view=rev&rev=552970
Log:
Added UUID type based on libuuid from e2fsprogs package.

Added:
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp   (with props)
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h   (with props)
    incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp   (with props)
Modified:
    incubator/qpid/trunk/qpid/cpp/README
    incubator/qpid/trunk/qpid/cpp/src/Makefile.am
    incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am

Modified: incubator/qpid/trunk/qpid/cpp/README
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/README?view=diff&rev=552970&r1=552969&r2=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/README (original)
+++ incubator/qpid/trunk/qpid/cpp/README Tue Jul  3 13:39:16 2007
@@ -39,6 +39,7 @@
  * boost   <http://www.boost.org>           (1.33.1)
  * cppunit <http://cppunit.sourceforge.net> (1.11.4)
  * libdaemon <http://www.stud.uni-hamburg.de/users/lennart/projects/libdaemon> 
(0.10)
+ * uuid    <http://e2fsprogs.sourceforge.net/> (1.39)
 
 Using tools:
 
@@ -73,7 +74,7 @@
 On linux most packages can be installed using your distribution's package
 management tool. For example on Fedora:
 
-  # yum install apr-devel boost-devel cppunit-devel libdaemon-devel 
+  # yum install apr-devel boost-devel cppunit-devel libdaemon-devel  
e2fsprogs-devel
   # yum install pkgconfig doxygen graphviz help2man
 
 Follow the manual installation instruction below for any packages not

Modified: incubator/qpid/trunk/qpid/cpp/src/Makefile.am
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/Makefile.am?view=diff&rev=552970&r1=552969&r2=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/Makefile.am Tue Jul  3 13:39:16 2007
@@ -152,6 +152,7 @@
   qpid/framing/Correlator.cpp \
   qpid/framing/Value.cpp \
   qpid/framing/Proxy.cpp \
+  qpid/framing/Uuid.cpp \
   qpid/framing/Handler.h \
   qpid/framing/FrameHandler.h \
   qpid/framing/HandlerUpdater.h \
@@ -345,6 +346,7 @@
   qpid/framing/Requester.h \
   qpid/framing/Responder.h \
   qpid/framing/Value.h \
+  qpid/framing/Uuid.h \
   qpid/framing/amqp_framing.h \
   qpid/framing/amqp_types.h \
   qpid/framing/amqp_types_full.h \

Added: 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=auto&rev=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp Tue Jul  3 13:39:16 
2007
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "Uuid.h"
+#include "uuid/uuid.h"
+
+namespace qpid {
+namespace framing {
+
+using namespace std;
+
+Uuid::Uuid() { uuid_generate(c_array()); }
+
+Uuid::Uuid(uint8_t* uu) { uuid_copy(c_array(),uu); }
+
+static const size_t UNPARSED_SIZE=36; 
+
+ostream& operator<<(ostream& out, const Uuid& uuid) {
+    char unparsed[UNPARSED_SIZE + 1];
+    uuid_unparse(uuid.data(), unparsed);
+    return out << unparsed;
+}
+
+istream& operator>>(istream& in, Uuid& uuid) {
+    char unparsed[UNPARSED_SIZE + 1] = {0};
+    in.get(unparsed, sizeof(unparsed));
+    if (uuid_parse(unparsed, uuid.c_array()) != 0) 
+        in.setstate(ios::failbit);
+    return in;
+}
+
+}} // namespace qpid::framing

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.cpp
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=auto&rev=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h (added)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h Tue Jul  3 13:39:16 
2007
@@ -0,0 +1,56 @@
+#ifndef QPID_FRAMING_UUID_H
+#define QPID_FRAMING_UUID_H
+
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <boost/array.hpp>
+#include <ostream>
+#include <istream>
+
+namespace qpid {
+namespace framing {
+
+/**
+ * A UUID is represented as a boost::array of 16 bytes.
+ *
+ * Full value semantics, operators ==, < etc.  are provided by
+ * boost::array so Uuid can be the key type in a map etc.
+ */
+struct Uuid : public boost::array<uint8_t, 16> {
+    /** Geneate universally  unique identifier */
+    Uuid();
+
+    /** Initialize from 16 bytes of data */
+    Uuid(uint8_t* data);
+
+    // Default op= and copy ctor are fine.
+    // boost::array gives us ==, < etc.
+};
+
+/** Print in format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb */
+std::ostream& operator<<(std::ostream&, const Uuid&);
+
+/** Read from format 1b4e28ba-2fa1-11d2-883f-b9a761bde3fb */
+std::istream& operator>>(std::istream&, Uuid&);
+
+}} // namespace qpid::framing
+
+
+
+#endif  /*!QPID_FRAMING_UUID_H*/

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Uuid.h
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am?view=diff&rev=552970&r1=552969&r2=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/Makefile.am Tue Jul  3 13:39:16 2007
@@ -27,6 +27,11 @@
 Url_SOURCES=Url.cpp test_tools.h
 Url_LDADD=-lboost_unit_test_framework $(lib_common) 
 
+TESTS+=Uuid
+check_PROGRAMS+=Uuid
+Uuid_SOURCES=Uuid.cpp test_tools.h
+Uuid_LDADD=-lboost_unit_test_framework $(lib_common) 
+
 include cluster.mk
 
 # NB: CppUnit test libraries below will be migrated to boost test programs.

Added: 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=auto&rev=552970
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp (added)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp Tue Jul  3 13:39:16 2007
@@ -0,0 +1,60 @@
+/*
+ *
+ * Copyright (c) 2006 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include "qpid/framing/Uuid.h"
+
+#define BOOST_AUTO_TEST_MAIN
+#include <boost/test/auto_unit_test.hpp>
+
+#include <set>
+
+using namespace std;
+using namespace qpid::framing;
+
+struct UniqueSet : public std::set<Uuid> {
+    void operator()(const Uuid& uuid) {
+        BOOST_REQUIRE(find(uuid) == end());
+        insert(uuid);
+    }
+};
+
+BOOST_AUTO_TEST_CASE(testUuidCtor) {
+    // Uniqueness
+    boost::array<Uuid,1000> uuids;
+    UniqueSet unique;
+    for_each(uuids.begin(), uuids.end(), unique);
+}
+
+boost::array<uint8_t, 16>  sample =  {{'\x1b', '\x4e', '\x28', '\xba', '\x2f', 
'\xa1', '\x11', '\xd2', '\x88', '\x3f', '\xb9', '\xa7', '\x61', '\xbd', '\xe3', 
'\xfb'}};
+const string sampleStr("1b4e28ba-2fa1-11d2-883f-b9a761bde3fb");
+
+BOOST_AUTO_TEST_CASE(testUuidIstream) {
+    Uuid uuid;
+    istringstream in(sampleStr);
+    in >> uuid;
+    BOOST_CHECK(!in.fail());
+    BOOST_CHECK(uuid == sample);
+}
+
+BOOST_AUTO_TEST_CASE(testUuidOstream) {
+    Uuid uuid(sample.c_array());
+    ostringstream out;
+    out << uuid;
+    BOOST_CHECK(out.good());
+    BOOST_CHECK_EQUAL(out.str(), sampleStr);
+}

Propchange: incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/qpid/trunk/qpid/cpp/src/tests/Uuid.cpp
------------------------------------------------------------------------------
    svn:keywords = Rev Date


Reply via email to