windows-nt/Source/XPSP1/NT/base/crts/langapi/include/rttidata.h
2020-09-26 16:20:57 +08:00

151 lines
4.6 KiB
C

//
// _RTTIBaseClassDescriptor
//
// TypeDescriptor is declared in ehdata.h
//
#if defined(_M_IA64) || defined(VERSP_P7) /*IFSTRIP=IGN*/
#pragma pack(push, rttidata, 4)
#endif
#ifndef WANT_NO_TYPES
typedef const struct _s_RTTIBaseClassDescriptor {
#if defined(_M_IA64) && !defined(VERSP_P7)
__int32 pTypeDescriptor; // Image relative offset of TypeDescriptor
#else
TypeDescriptor *pTypeDescriptor;
#endif
DWORD numContainedBases;
PMD where;
DWORD attributes;
} _RTTIBaseClassDescriptor;
#endif // WANT_NO_TYPES
#define BCD_NOTVISIBLE 0x00000001
#define BCD_AMBIGUOUS 0x00000002
#define BCD_PRIVORPROTINCOMPOBJ 0x00000004
#define BCD_PRIVORPROTBASE 0x00000008
#define BCD_VBOFCONTOBJ 0x00000010
#define BCD_NONPOLYMORPHIC 0x00000020
#define BCD_PTD(bcd) ((bcd).pTypeDescriptor)
#define BCD_NUMCONTBASES(bcd) ((bcd).numContainedBases)
#define BCD_WHERE(bcd) ((bcd).where)
#define BCD_ATTRIBUTES(bcd) ((bcd).attributes)
#if defined(_M_IA64)
#define BCD_PTD_IB(bcd,ib) ((TypeDescriptor*)((ib) + (bcd).pTypeDescriptor))
#endif
//
// _RTTIBaseClassArray
//
#pragma warning(disable:4200) // get rid of obnoxious nonstandard extension warning
#ifndef WANT_NO_TYPES
typedef const struct _s_RTTIBaseClassArray {
#if defined(_M_IA64) && !defined(VERSP_P7)
__int32 arrayOfBaseClassDescriptors[]; // Image relative offset of _RTTIBaseClassDescriptor
#else
_RTTIBaseClassDescriptor *arrayOfBaseClassDescriptors[];
#endif
} _RTTIBaseClassArray;
#endif // WANT_NO_TYPES
#pragma warning(default:4200)
//
// _RTTIClassHierarchyDescriptor
//
#ifndef WANT_NO_TYPES
typedef const struct _s_RTTIClassHierarchyDescriptor {
DWORD signature;
DWORD attributes;
DWORD numBaseClasses;
#if defined(_M_IA64) && !defined(VERSP_P7)
__int32 pBaseClassArray; // Image relative offset of _RTTIBaseClassArray
#else
_RTTIBaseClassArray *pBaseClassArray;
#endif
} _RTTIClassHierarchyDescriptor;
#endif // WANT_NO_TYPES
#define CHD_MULTINH 0x00000001
#define CHD_VIRTINH 0x00000002
#define CHD_AMBIGUOUS 0x00000004
#define CHD_SIGNATURE(chd) ((chd).signature)
#define CHD_ATTRIBUTES(chd) ((chd).attributes)
#define CHD_NUMBASES(chd) ((chd).numBaseClasses)
#define CHD_PBCA(chd) ((chd).pBaseClassArray)
#define CHD_PBCD(bcd) (bcd)
#if defined(_M_IA64)
#define CHD_PBCA_IB(chd,ib) ((_RTTIBaseClassArray*)((ib) + (chd).pBaseClassArray))
#define CHD_PBCD_IB(bcd,ib) ((_RTTIBaseClassDescriptor*)((ib) + bcd))
#endif
//
// _RTTICompleteObjectLocator
//
#ifndef WANT_NO_TYPES
typedef const struct _s_RTTICompleteObjectLocator {
DWORD signature;
DWORD offset;
DWORD cdOffset;
#if defined(_M_IA64) && !defined(VERSP_P7)
__int32 pTypeDescriptor; // Image relative offset of TypeDescriptor
__int32 pClassDescriptor; // Image relative offset of _RTTIClassHierarchyDescriptor
#else
TypeDescriptor *pTypeDescriptor;
_RTTIClassHierarchyDescriptor *pClassDescriptor;
#endif
} _RTTICompleteObjectLocator;
#endif // WANT_NO_TYPES
#define COL_SIGNATURE(col) ((col).signature)
#define COL_OFFSET(col) ((col).offset)
#define COL_CDOFFSET(col) ((col).cdOffset)
#define COL_PTD(col) ((col).pTypeDescriptor)
#define COL_PCHD(col) ((col).pClassDescriptor)
#if defined(_M_IA64)
#define COL_PTD_IB(col,ib) ((TypeDescriptor*)((ib) + (col).pTypeDescriptor))
#define COL_PCHD_IB(col,ib) ((_RTTIClassHierarchyDescriptor*)((ib) + (col).pClassDescriptor))
#endif
#ifdef BUILDING_TYPESRC_C
//
// Type of the result of __RTtypeid and internal applications of typeid().
// This also introduces the tag "type_info" as an incomplete type.
//
typedef const class type_info &__RTtypeidReturnType;
//
// Declaration of CRT entrypoints, as seen by the compiler. Types are
// simplified so as to avoid type matching hassles.
//
#ifndef THROWSPEC
#if _MSC_VER >= 1300
#define THROWSPEC(_ex) throw _ex
#else
#define THROWSPEC(_ex)
#endif
#endif
// Perform a dynamic_cast on obj. of polymorphic type
extern "C" PVOID __cdecl __RTDynamicCast (
PVOID, // ptr to vfptr
LONG, // offset of vftable
PVOID, // src type
PVOID, // target type
BOOL) THROWSPEC((...)); // isReference
// Perform 'typeid' on obj. of polymorphic type
extern "C" PVOID __cdecl __RTtypeid (PVOID) THROWSPEC((...)); // ptr to vfptr
// Perform a dynamic_cast from obj. of polymorphic type to void*
extern "C" PVOID __cdecl __RTCastToVoid (PVOID) THROWSPEC((...)); // ptr to vfptr
#endif
#if defined(_M_IA64) || defined(VERSP_P7) /*IFSTRIP=IGN*/
#pragma pack(pop, rttidata)
#endif