1///////////////////////////////////////////////////////////////////////////////
2// Name:        ole/uuid.h
3// Purpose:     encapsulates an UUID with some added helper functions
4// Author:      Vadim Zeitlin
5// Modified by:
6// Created:     11.07.97
7// RCS-ID:      $Id: uuid.h 55113 2008-08-18 11:30:10Z VZ $
8// Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
9// Licence:     wxWindows licence
10//
11// Notes:       you should link your project with RPCRT4.LIB!
12///////////////////////////////////////////////////////////////////////////////
13
14#ifndef   _WX_OLEUUID_H
15#define   _WX_OLEUUID_H
16
17#include "wx/wxchar.h"
18// ------------------------------------------------------------------
19// UUID (Universally Unique IDentifier) definition
20// ------------------------------------------------------------------
21
22// ----- taken from RPC.H
23#ifndef UUID_DEFINED            // in some cases RPC.H will be already
24  #ifdef  __WIN32__             // included, so avoid redefinition
25    typedef struct
26    {
27      unsigned long   Data1;
28      unsigned short  Data2;
29      unsigned short  Data3;
30      unsigned char   Data4[8];
31    } UUID;                     // UUID = GUID = CLSID = LIBID = IID
32  #endif  // WIN32
33#endif  // UUID_DEFINED
34
35#ifndef GUID_DEFINED
36  typedef UUID GUID;
37  #define UUID_DEFINED          // prevent redefinition
38#endif  // GUID_DEFINED
39
40typedef unsigned char uchar;
41
42// ------------------------------------------------------------------
43// a class to store UUID and it's string representation
44// ------------------------------------------------------------------
45
46// uses RPC functions to create/convert Universally Unique Identifiers
47class WXDLLEXPORT Uuid
48{
49private:
50  UUID  m_uuid;
51  wxUChar *m_pszUuid;   // this string is alloc'd and freed by RPC
52  wxChar  *m_pszCForm;  // this string is allocated in Set/Create
53
54  void  UuidToCForm();
55
56  // function used to set initial state by all ctors
57  void  Init() { m_pszUuid = NULL; m_pszCForm = NULL; }
58
59public:
60  // ctors & dtor
61  Uuid()                 { Init();            }
62  Uuid(const wxChar *pc) { Init(); Set(pc);   }
63  Uuid(const UUID &uuid) { Init(); Set(uuid); }
64 ~Uuid();
65
66  // copy ctor and assignment operator needed for this class
67  Uuid(const Uuid& uuid);
68  Uuid& operator=(const Uuid& uuid);
69
70  // create a brand new UUID
71  void Create();
72
73  // set value of UUID
74  bool Set(const wxChar *pc); // from a string, returns true if ok
75  void Set(const UUID& uuid); // from another UUID (never fails)
76
77#if wxABI_VERSION >= 20809
78  // comparison operators
79  bool operator==(const Uuid& uuid) const;
80  bool operator!=(const Uuid& uuid) const;
81#endif // wxABI_VERSION >= 2.8.9
82
83  // accessors
84  operator const UUID*()   const { return &m_uuid;               }
85  operator const wxChar*() const { return (wxChar *)(m_pszUuid); }
86
87  // return string representation of the UUID in the C form
88  // (as in DEFINE_GUID macro)
89  const wxChar *CForm() const    { return m_pszCForm;            }
90};
91
92#endif //_WX_OLEUUID_H
93