uuid.hpp 2.2 KB
Newer Older
Martin Sustrik's avatar
Martin Sustrik committed
1
/*
2
    Copyright (c) 2007-2010 iMatix Corporation
Martin Sustrik's avatar
Martin Sustrik committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    This file is part of 0MQ.

    0MQ is free software; you can redistribute it and/or modify it under
    the terms of the Lesser GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    0MQ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    Lesser GNU General Public License for more details.

    You should have received a copy of the Lesser GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

Martin Sustrik's avatar
Martin Sustrik committed
20 21
#ifndef __ZMQ_UUID_HPP_INCLUDED__
#define __ZMQ_UUID_HPP_INCLUDED__
Martin Sustrik's avatar
Martin Sustrik committed
22 23

#include "platform.hpp"
unknown's avatar
unknown committed
24
#include "stdint.hpp"
Martin Sustrik's avatar
Martin Sustrik committed
25

unknown's avatar
unknown committed
26
#if defined ZMQ_HAVE_FREEBSD
Martin Sustrik's avatar
Martin Sustrik committed
27
#include <uuid.h>
Martin Sustrik's avatar
Martin Sustrik committed
28
#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OSX
Martin Sustrik's avatar
Martin Sustrik committed
29
#include <uuid/uuid.h>
malosek's avatar
malosek committed
30 31
#elif defined ZMQ_HAVE_WINDOWS
#include <Rpc.h>
Martin Sustrik's avatar
Martin Sustrik committed
32 33
#endif

Martin Sustrik's avatar
Martin Sustrik committed
34
namespace zmq
Martin Sustrik's avatar
Martin Sustrik committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
{

    //  This class provides RFC 4122 (a Universally Unique IDentifier)
    //  implementation.

    class uuid_t
    {
    public:

        uuid_t ();
        ~uuid_t ();

        //  Returns a pointer to buffer containing the textual
        //  representation of the UUID. The caller is reponsible to
        //  free the allocated memory.
        const char *to_string ();

    private:

        //  The length of textual representation of UUID.
        enum { uuid_string_len = 36 };

Martin Sustrik's avatar
Martin Sustrik committed
57
#if defined ZMQ_HAVE_WINDOWS
malosek's avatar
malosek committed
58 59 60 61
#ifdef ZMQ_HAVE_MINGW32
        typedef unsigned char* RPC_CSTR;
#endif
        ::UUID uuid;
unknown's avatar
unknown committed
62
        RPC_CSTR uuid_str;
Martin Sustrik's avatar
Martin Sustrik committed
63
#elif defined ZMQ_HAVE_FREEBSD
Martin Sustrik's avatar
Martin Sustrik committed
64 65
        ::uuid_t uuid;
        char *uuid_str;
Martin Sustrik's avatar
Martin Sustrik committed
66
#elif defined ZMQ_HAVE_LINUX || defined ZMQ_HAVE_SOLARIS || defined ZMQ_HAVE_OSX
Martin Sustrik's avatar
Martin Sustrik committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
        ::uuid_t uuid;
        char uuid_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 uuid_buf [uuid_string_len + 1];
#endif
    };

}

#endif