1#ifndef NW4R_UT_RUNTIME_TYPE_INFO_H
2#define NW4R_UT_RUNTIME_TYPE_INFO_H
3#include <nw4r/types_nw4r.h>
14struct RuntimeTypeInfo {
15 explicit RuntimeTypeInfo(
const RuntimeTypeInfo* pBase)
16 : mParentTypeInfo(pBase) {}
18 bool IsDerivedFrom(
const RuntimeTypeInfo* pInfo)
const {
19 for (
const RuntimeTypeInfo* pIt =
this; pIt != NULL;
20 pIt = pIt->mParentTypeInfo) {
30 const RuntimeTypeInfo* mParentTypeInfo;
45template <
typename TDerived,
typename TBase>
46inline TDerived DynamicCast(TBase* pPtr) {
47 const detail::RuntimeTypeInfo* pDerivedTypeInfo =
48 detail::GetTypeInfoFromPtr_(
static_cast<TDerived
>(NULL));
51 if (pPtr->GetRuntimeTypeInfo()->IsDerivedFrom(pDerivedTypeInfo)) {
52 return static_cast<TDerived
>(pPtr);
69#define NW4R_UT_RTTI_DECL(T) \
70 virtual const nw4r::ut::detail::RuntimeTypeInfo* GetRuntimeTypeInfo() \
75 static nw4r::ut::detail::RuntimeTypeInfo typeInfo;
80#define NW4R_UT_RTTI_DEF_BASE(T) \
81 nw4r::ut::detail::RuntimeTypeInfo T::typeInfo(NULL)
86#define NW4R_UT_RTTI_DEF_DERIVED(T, BASE) \
87 nw4r::ut::detail::RuntimeTypeInfo T::typeInfo(&BASE::typeInfo)
Debugging library which includes various utilities used by the rest of nw4r.