/*
 *  guiddef.h   Globally unique identifier definitions
 *
 * =========================================================================
 *
 *                          Open Watcom Project
 *
 * Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
 *
 *    This file is automatically generated. Do not edit directly.
 *
 * =========================================================================
 */

#ifndef _ENABLE_AUTODEPEND
 #pragma read_only_file;
#endif

/* Macro used to specify extern "C" */
#ifdef __cplusplus
    #define EXTERN_C    extern "C"
#else
    #define EXTERN_C    extern
#endif

/* Macro to define a GUID */
#ifdef DEFINE_GUID
    #undef DEFINE_GUID
#endif
#ifdef INITGUID
    #define DEFINE_GUID( x, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) \
        EXTERN_C const GUID x = { p1, p2, p3, { p4, p5, p6, p7, p8, p9, p10, p11 } }
#else
    #define DEFINE_GUID( x, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 ) \
        EXTERN_C const GUID x
#endif

#ifndef _GUIDDEF_H_
#define _GUIDDEF_H_

#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Null values */
#define IID_NULL    GUID_NULL
#define CLSID_NULL  GUID_NULL
#define FMTID_NULL  GUID_NULL

/* Globally unique identifier */
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID {
    unsigned long   Data1;
    unsigned short  Data2;
    unsigned short  Data3;
    unsigned char   Data4[8];
} GUID;
#endif

#ifndef __LPGUID_DEFINED__
#define __LPGUID_DEFINED__
typedef GUID        *LPGUID;
#endif
#ifndef __LPCGUID_DEFINED__
#define __LPCGUID_DEFINED__
typedef const GUID  *LPCGUID;
#endif

/* Interface identifier */
typedef GUID    IID;
typedef IID     *LPIID;

/* Class identifier */
typedef GUID    CLSID;
typedef CLSID   *LPCLSID;

/* Format identifier */
typedef GUID    FMTID;
typedef FMTID   *LPFMTID;

/* Reference data types */
#ifdef __cplusplus
    #define REFGUID     const GUID &
    #define REFIID      const IID &
    #define REFCLSID    const CLSID &
    #define REFFMTID    const FMTID &
#else
    #define REFGUID     const GUID *const
    #define REFIID      const IID *const
    #define REFCLSID    const CLSID *const
    #define REFFMTID    const FMTID *const
#endif

/* Macro used to define a standard GUID */
#define DEFINE_OLEGUID( x, p1, p2, p3 ) \
    DEFINE_GUID( x, p1, p2, p3, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46 )

/* GUID comparison macros */
#ifndef __cplusplus
    #define IsEqualGUID( p1, p2 )   (!memcmp( p1, p2, sizeof( GUID ) ))
#endif
#define IsEqualIID( p1, p2 )        IsEqualGUID( p1, p2 )
#define IsEqualCLSID( p1, p2 )      IsEqualGUID( p1, p2 )
#define IsEqualFMTID( p1, p2 )      IsEqualGUID( p1, p2 )

#ifdef __cplusplus
} /* extern "C" */
#endif

#ifdef __cplusplus

__inline int IsEqualGUID( REFGUID p1, REFGUID p2 )
{
    return( !memcmp( &p1, &p2, sizeof( GUID ) ) );
}

__inline int operator==( REFGUID p1, REFGUID p2 )
{
    return( IsEqualGUID( p1, p2 ) );
}

__inline int operator!=( REFGUID p1, REFGUID p2 )
{
    return( !(p1 == p2) );
}

#endif /* __cplusplus */

#endif /* _GUIDDEF_H_ */
