b329dad2f923af9868e67d01d38b7c064d77a787
[gpgme.git] / complus / guiddef.h
1 /* guiddef.h 
2
3  Copyright (c) 1993-2000 the Wine project authors (see the file WINE-AUTHORS
4  for a complete list)
5  
6  Permission is hereby granted, free of charge, to any person obtaining a copy
7  of this software and associated documentation files (the "Software"), to deal
8  in the Software without restriction, including without limitation the rights
9  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  copies of the Software, and to permit persons to whom the Software is
11  furnished to do so, subject to the following conditions:
12  
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15  
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
19  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  */
23
24 /* already defined bu Mingw32/cpd
25 #ifndef GUID_DEFINED
26 #define GUID_DEFINED
27 typedef struct _GUID
28 {
29     unsigned long  Data1;
30     unsigned short Data2;
31     unsigned short Data3;
32     unsigned char  Data4[ 8 ];
33 } GUID;
34 #endif
35 */
36
37 #undef DEFINE_GUID
38
39 #ifdef INITGUID
40 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
41         const GUID name = \
42         { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
43 #else
44 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
45     extern const GUID name
46 #endif
47
48 #define DEFINE_OLEGUID(name, l, w1, w2) \
49         DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
50
51 #ifndef _GUIDDEF_H_
52 #define _GUIDDEF_H_
53
54 /*   typedef GUID *LPGUID;
55      typedef GUID CLSID,*LPCLSID; */
56 typedef GUID IID,*LPIID;
57 typedef GUID FMTID,*LPFMTID;
58
59 #if defined(__cplusplus) && !defined(CINTERFACE)
60 #define REFGUID             const GUID &
61 #define REFCLSID            const CLSID &
62 #define REFIID              const IID &
63 #define REFFMTID            const FMTID &
64 #else /* !defined(__cplusplus) && !defined(CINTERFACE) */
65 #define REFGUID             const GUID* const
66 #define REFCLSID            const CLSID* const
67 #define REFIID              const IID* const
68 #define REFFMTID            const FMTID* const
69 #endif /* !defined(__cplusplus) && !defined(CINTERFACE) */
70
71 #if defined(__cplusplus) && !defined(CINTERFACE)
72 #define IsEqualGUID(rguid1, rguid2) (!memcmp(&(rguid1), &(rguid2), sizeof(GUID)))
73 #else /* defined(__cplusplus) && !defined(CINTERFACE) */
74 #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))
75 #endif /* defined(__cplusplus) && !defined(CINTERFACE) */
76 #define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
77 #define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
78
79 #if defined(__cplusplus) && !defined(CINTERFACE)
80 inline bool operator==(const GUID& guidOne, const GUID& guidOther)
81 {
82     return !memcmp(&guidOne,&guidOther,sizeof(GUID));
83 }
84 inline bool operator!=(const GUID& guidOne, const GUID& guidOther)
85 {
86     return !(guidOne == guidOther);
87 }
88 #endif 
89
90 extern const IID GUID_NULL;
91 #define IID_NULL            GUID_NULL
92 #define CLSID_NULL GUID_NULL
93 #define FMTID_NULL          GUID_NULL
94    
95 #endif /* _GUIDDEF_H_ */