Apache Qpid - AMQP Messaging for Java JMS, C++, Python, Ruby, and .NET | Apache Qpid Documentation |
00001 #ifndef QPID_FRAMING_UUID_H 00002 #define QPID_FRAMING_UUID_H 00003 00004 /* 00005 * 00006 * Copyright (c) 2006 The Apache Software Foundation 00007 * 00008 * Licensed under the Apache License, Version 2.0 (the "License"); 00009 * you may not use this file except in compliance with the License. 00010 * You may obtain a copy of the License at 00011 * 00012 * http://www.apache.org/licenses/LICENSE-2.0 00013 * 00014 * Unless required by applicable law or agreed to in writing, software 00015 * distributed under the License is distributed on an "AS IS" BASIS, 00016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00017 * See the License for the specific language governing permissions and 00018 * limitations under the License. 00019 * 00020 */ 00021 00022 #include "qpid/CommonImportExport.h" 00023 #include "qpid/sys/IntegerTypes.h" 00024 00025 #include <boost/array.hpp> 00026 00027 #include <ostream> 00028 #include <istream> 00029 00030 namespace qpid { 00031 namespace framing { 00032 00033 class Buffer; 00034 00044 struct Uuid : public boost::array<uint8_t, 16> { 00046 QPID_COMMON_EXTERN Uuid(bool unique=false); 00047 00049 QPID_COMMON_EXTERN Uuid(const uint8_t* data); 00050 00052 QPID_COMMON_EXTERN Uuid(const std::string&); 00053 00054 // Default op= and copy ctor are fine. 00055 // boost::array gives us ==, < etc. 00056 00058 QPID_COMMON_EXTERN void assign(const uint8_t* data); 00059 00061 QPID_COMMON_EXTERN void generate(); 00062 00064 QPID_COMMON_EXTERN void clear(); 00065 00067 QPID_COMMON_EXTERN bool isNull() const; 00068 QPID_COMMON_INLINE_EXTERN operator bool() const { return !isNull(); } 00069 QPID_COMMON_INLINE_EXTERN bool operator!() const { return isNull(); } 00070 00071 QPID_COMMON_EXTERN void encode(framing::Buffer& buf) const; 00072 QPID_COMMON_EXTERN void decode(framing::Buffer& buf); 00073 QPID_COMMON_INLINE_EXTERN uint32_t encodedSize() const 00074 { return static_cast<uint32_t>(size()); } 00075 00077 QPID_COMMON_EXTERN std::string str() const; 00078 00079 template <class S> void serialize(S& s) { 00080 s.raw(begin(), size()); 00081 } 00082 }; 00083 00085 QPID_COMMON_EXTERN std::ostream& operator<<(std::ostream&, Uuid); 00086 00088 QPID_COMMON_EXTERN std::istream& operator>>(std::istream&, Uuid&); 00089 00090 }} // namespace qpid::framing 00091 00092 00093 00094 #endif