1 // Copyright (c) 1994 James Clark
2 // See the file COPYING for copying permission.
5 #define rtti_INCLUDED 1
9 #define DYNAMIC_CAST_PTR(T, p) dynamic_cast<T *>(p)
10 #define DYNAMIC_CAST_CONST_PTR(T, p) dynamic_cast<const T *>(p)
15 #define RTTI_DEF1(T, B1)
16 #define RTTI_DEF2(T, B1, B2)
17 #define RTTI_DEF3(T, B1, B2, B3)
19 #else /* not SP_HAVE_RTTI */
25 virtual TypeId dynamicType() const; \
26 static inline TypeId staticType() { return TypeId(RTTI_bases_); } \
28 static const void *RTTI_bases_[]; \
31 #define RTTI_DEF0(T) \
32 const void *T::RTTI_bases_[] = { 0 }; \
33 TypeId T::dynamicType() const { return staticType(); }
35 #define RTTI_DEF1(T, B1) \
36 const void *T::RTTI_bases_[] = { B1::RTTI_bases_, 0 }; \
37 TypeId T::dynamicType() const { return staticType(); }
39 #define RTTI_DEF2(T, B1, B2) \
40 const void *T::RTTI_bases_[] = { B1::RTTI_bases_, B2::RTTI_bases_, 0 }; \
41 TypeId T::dynamicType() const { return staticType(); }
43 #define RTTI_DEF3(T, B1, B2, B3) \
44 const void *T::RTTI_bases_[] = { \
45 B1::RTTI_bases_, B2::RTTI_bases_, B3::RTTI_bases_, 0 }; \
46 TypeId T::dynamicType() const { return staticType(); }
48 #define DYNAMIC_CAST_PTR(T, p) \
49 ((p) && (p)->dynamicType().canCast(T::staticType(), (p)->staticType()) \
52 #define DYNAMIC_CAST_CONST_PTR(T, p) \
53 ((p) && (p)->dynamicType().canCast(T::staticType(), (p)->staticType()) \
57 #endif /* not SP_HAVE_RTTI */
59 #endif /* not rtti_INCLUDED */