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