diff options
author | Martin Sustrik <sustrik@250bpm.com> | 2011-04-29 07:19:22 +0200 |
---|---|---|
committer | Martin Sustrik <sustrik@250bpm.com> | 2011-04-29 07:19:22 +0200 |
commit | b2eb84f8ca2fc2b8a2af6cd2c54c0abc4535cfc4 (patch) | |
tree | 76a2cf52187979a3c2deea324bd2915e6b406d17 /src/uuid.hpp | |
parent | 10fbc78e5cab494c3af727f5ea451fdced1c9d95 (diff) |
Substantial simplification of uuid_t
The string format of UUID is not used in 0MQ. Further on,
it turns out that UUIDs have fixed microarchitecture-agnostic
binary layout (see RFC4122). Thus, the conversion to string
and back to binary can be avoided.
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
Diffstat (limited to 'src/uuid.hpp')
-rw-r--r-- | src/uuid.hpp | 84 |
1 files changed, 3 insertions, 81 deletions
diff --git a/src/uuid.hpp b/src/uuid.hpp index 5eab6c8..c338208 100644 --- a/src/uuid.hpp +++ b/src/uuid.hpp @@ -21,90 +21,12 @@ #ifndef __ZMQ_UUID_HPP_INCLUDED__ #define __ZMQ_UUID_HPP_INCLUDED__ -#include "platform.hpp" -#include "stdint.hpp" - -#if defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD -#include <uuid.h> -#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS ||\ - defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_CYGWIN -#include <uuid/uuid.h> -#elif defined ZMQ_HAVE_WINDOWS -#include "windows.hpp" -#include <rpc.h> -#elif defined ZMQ_HAVE_OPENVMS -typedef struct -{ - unsigned long data0; - unsigned short data1; - unsigned short data2; - unsigned char data3 [8]; -} uuid_t; -#endif - namespace zmq { - // This class provides RFC 4122 (a Universally Unique IDentifier) - // implementation. - - class uuid_t - { - public: - - uuid_t (); - ~uuid_t (); - - // The length of textual representation of UUID. - enum { uuid_string_len = 36 }; - - // Returns a pointer to buffer containing the textual - // representation of the UUID. The callee is reponsible to - // free the allocated memory. - const char *to_string (); - - // The length of binary representation of UUID. - enum { uuid_blob_len = 16 }; - - const unsigned char *to_blob (); - - private: - - // Converts one byte from hexa representation to binary. - unsigned char convert_byte (const char *hexa_); - - // Converts string representation of UUID into standardised BLOB. - // The function is endianness agnostic. - void create_blob (); - -#if defined ZMQ_HAVE_WINDOWS -#ifdef ZMQ_HAVE_MINGW32 - typedef unsigned char* RPC_CSTR; -#endif - ::UUID uuid; - RPC_CSTR string_buf; -#elif defined ZMQ_HAVE_FREEBSD || defined ZMQ_HAVE_NETBSD - ::uuid_t uuid; - char *string_buf; -#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS ||\ - defined ZMQ_HAVE_OSX || defined ZMQ_HAVE_CYGWIN ||\ - defined ZMQ_HAVE_OPENVMS - ::uuid_t uuid; - char string_buf [uuid_string_len + 1]; -#else - // RFC 4122 UUID's fields - uint32_t time_low; - uint16_t time_mid; - uint16_t time_hi_and_version; - uint8_t clock_seq_hi_and_reserved; - uint8_t clock_seq_low; - uint8_t node [6]; - - char string_buf [uuid_string_len + 1]; -#endif - - unsigned char blob_buf [uuid_blob_len]; - }; + // This function provides RFC 4122 (a Universally Unique IDentifier) + // implementation. The resulting UUID will be 16 bytes long. + void generate_uuid (void *buf_); } |