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));
52 if (pPtr->GetRuntimeTypeInfo()->IsDerivedFrom(pDerivedTypeInfo)) {
53 return static_cast<TDerived
>(pPtr);
71#define NW4R_UT_RTTI_DECL(T) \
72 virtual const nw4r::ut::detail::RuntimeTypeInfo* GetRuntimeTypeInfo() \
77 static nw4r::ut::detail::RuntimeTypeInfo typeInfo;
82#define NW4R_UT_RTTI_DEF_BASE(T) \
83 nw4r::ut::detail::RuntimeTypeInfo T::typeInfo(NULL)
88#define NW4R_UT_RTTI_DEF_DERIVED(T, BASE) \
89 nw4r::ut::detail::RuntimeTypeInfo T::typeInfo(&BASE::typeInfo)
Debugging library which includes various utilities used by the rest of nw4r.