Reactos
at master 167 lines 4.7 kB view raw
1/* 2 * Copyright (C) 2000 Alexandre Julliard 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19#ifndef GUID_DEFINED 20#define GUID_DEFINED 21 22typedef struct _GUID 23{ 24#ifdef _MSC_VER 25 unsigned long Data1; 26#else 27 unsigned int Data1; 28#endif 29 unsigned short Data2; 30 unsigned short Data3; 31 unsigned char Data4[ 8 ]; 32} GUID; 33#endif 34 35#ifndef FAR 36#define FAR 37#endif 38 39#ifndef DECLSPEC_SELECTANY 40#define DECLSPEC_SELECTANY __declspec(selectany) 41#endif 42 43#ifndef EXTERN_C 44#ifdef __cplusplus 45#define EXTERN_C extern "C" 46#else 47#define EXTERN_C extern 48#endif 49#endif 50 51#undef DEFINE_GUID 52 53#ifdef INITGUID 54#ifdef __cplusplus 55#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 56 EXTERN_C const GUID DECLSPEC_SELECTANY name = \ 57 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 58#else 59#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 60 const GUID DECLSPEC_SELECTANY name = \ 61 { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } } 62#endif 63#else 64#if __GNUC__ >= 8 65#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 66 EXTERN_C const GUID DECLSPEC_SELECTANY name 67#else 68#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ 69 EXTERN_C const GUID name 70#endif // __GNUC__ >= 7 71#endif 72 73#define DEFINE_OLEGUID(name, l, w1, w2) \ 74 DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) 75 76#ifndef _GUIDDEF_H_ 77#define _GUIDDEF_H_ 78 79#ifndef __LPGUID_DEFINED__ 80#define __LPGUID_DEFINED__ 81typedef GUID *LPGUID; 82#endif 83 84#ifndef __LPCGUID_DEFINED__ 85#define __LPCGUID_DEFINED__ 86typedef const GUID *LPCGUID; 87#endif 88 89#ifndef __IID_DEFINED__ 90#define __IID_DEFINED__ 91 92typedef GUID IID,*LPIID; 93typedef GUID CLSID,*LPCLSID; 94typedef GUID FMTID,*LPFMTID; 95#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2) 96#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2) 97#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2) 98#define IID_NULL GUID_NULL 99#define CLSID_NULL GUID_NULL 100#define FMTID_NULL GUID_NULL 101 102#ifdef __midl_proxy 103#define __MIDL_CONST 104#else 105#define __MIDL_CONST const 106#endif 107 108#endif /* ndef __IID_DEFINED__ */ 109 110#ifdef __cplusplus 111#define REFGUID const GUID & 112#define REFCLSID const CLSID & 113#define REFIID const IID & 114#define REFFMTID const FMTID & 115#else 116#define REFGUID const GUID* __MIDL_CONST 117#define REFCLSID const CLSID* __MIDL_CONST 118#define REFIID const IID* __MIDL_CONST 119#define REFFMTID const FMTID* __MIDL_CONST 120#endif 121 122#if !defined(__midl) && !defined(__WIDL__) 123#include <string.h> 124#ifdef __cplusplus 125 126__inline int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) 127{ 128 return ( 129 ((unsigned long *) &rguid1)[0] == ((unsigned long *) &rguid2)[0] && 130 ((unsigned long *) &rguid1)[1] == ((unsigned long *) &rguid2)[1] && 131 ((unsigned long *) &rguid1)[2] == ((unsigned long *) &rguid2)[2] && 132 ((unsigned long *) &rguid1)[3] == ((unsigned long *) &rguid2)[3]); 133} 134 135__inline int IsEqualGUID(REFGUID rguid1, REFGUID rguid2) 136{ 137 return !memcmp(&rguid1, &rguid2, sizeof(GUID)); 138} 139 140#else 141 142#define InlineIsEqualGUID(rguid1, rguid2) \ 143 (((unsigned long *)rguid1)[0] == ((unsigned long *)rguid2)[0] && \ 144 ((unsigned long *)rguid1)[1] == ((unsigned long *)rguid2)[1] && \ 145 ((unsigned long *)rguid1)[2] == ((unsigned long *)rguid2)[2] && \ 146 ((unsigned long *)rguid1)[3] == ((unsigned long *)rguid2)[3]) 147#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) 148 149#endif 150#endif /* __midl && __WIDL__ */ 151 152#ifdef __cplusplus 153#include <string.h> 154#if !defined _SYS_GUID_OPERATOR_EQ_ && !defined _NO_SYS_GUID_OPERATOR_EQ_ 155#define _SYS_GUID_OPERATOR_EQ_ 156inline bool operator==(const GUID& guidOne, const GUID& guidOther) 157{ 158 return !memcmp(&guidOne,&guidOther,sizeof(GUID)); 159} 160inline bool operator!=(const GUID& guidOne, const GUID& guidOther) 161{ 162 return !(guidOne == guidOther); 163} 164#endif 165#endif 166 167#endif /* _GUIDDEF_H_ */