////////////////////////////////////////////////////////////////////////////// // // cast macros // ////////////////////////////////////////////////////////////////////////////// #ifndef _cast_H_ #define _cast_H_ #if !defined(_DEBUG) || defined(DREAMCAST) template void CastTo(DestType*& pdest, SourceType* psource) { pdest = (DestType*)(psource); } template void CastTo(TRef& pdest, SourceType* psource) { pdest = (DestType*)(psource); } template void CastTo(DestType*& pdest, const TRef& psource) { pdest = (DestType*)((SourceType*)psource); } template void CastTo(TRef& pdest, const TRef& psource) { pdest = (DestType*)((SourceType*)psource); } #else template void CastTo(DestType*& pdest, SourceType* psource) { if (psource != NULL) { pdest = dynamic_cast(psource); ZAssert(pdest != NULL); } pdest = (DestType*)(psource); } template void CastTo(TRef& pdest, SourceType* psource) { if (psource != NULL) { pdest = dynamic_cast(psource); ZAssert(pdest != NULL); } pdest = (DestType*)(psource); } template void CastTo(DestType*& pdest, const TRef& psource) { if (psource != NULL) { pdest = dynamic_cast((SourceType*)psource); ZAssert(pdest != NULL); } pdest = (DestType*)((SourceType*)psource); } template void CastTo(TRef& pdest, const TRef& psource) { if (psource != NULL) { pdest = dynamic_cast((SourceType*)psource); ZAssert(pdest != NULL); } pdest = (DestType*)((SourceType*)psource); } #endif ////////////////////////////////////////////////////////////////////////////// // // Runtime Casting macros // ////////////////////////////////////////////////////////////////////////////// #if 0 template void RuntimeCastTo(DestType*& pdest, SourceType* psource) { pdest = dynamic_cast(psource); } template void RuntimeCastTo(TRef& pdest, SourceType* psource) { pdest = dynamic_cast(psource); } template void RuntimeCastTo(DestType*& pdest, TRef& psource) { pdest = dynamic_cast((SourceType*)psource); } template void RuntimeCastTo(TRef& pdest, TRef& psource) { pdest = dynamic_cast((SourceType*)psource); } #endif ////////////////////////////////////////////////////////////////////////////// // // Cast to a class pointer macro // ////////////////////////////////////////////////////////////////////////////// #define DefineCastMember(Type) \ template \ static Type* Cast(TypeSource* pvalue) \ { \ Type* p; CastTo(p, pvalue); \ return p; \ } #endif