00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef RepDef_h
00023 #define RepDef_h
00024
00025 #include <y2util/Rep.h>
00026
00028
00029
00030
00031
00032
00033
00034
00035
00037
00038 #define REP_BODY(NAME) GEN_REP_BODY( NAME, #NAME )
00039
00041
00042 #define GEN_REP_BODY(CLNAME,STRNAME) \
00043 CLNAME( const CLNAME & ); \
00044 CLNAME & operator=(const CLNAME & ); \
00045 public: \
00046 virtual const char * repName() const \
00047 { return STRNAME; } \
00048 virtual size_t mem_size () const { return sizeof (CLNAME); }\
00049 private:
00050
00052
00053 #define DEFINE_BASE_POINTER(NAME) \
00054 class NAME; \
00055 typedef Ptr<NAME> NAME##Ptr; \
00056 typedef constPtr<NAME> const##NAME##Ptr; \
00057 extern template class RepPtrStore<NAME>; \
00058 extern template class RepPtrStore<const NAME>;
00059
00060 #define DEFINE_BASE_POINTER_IN_NAMESPACE(NS,NAME) \
00061 namespace NS { \
00062 class NAME; \
00063 typedef Ptr<NAME> NAME##Ptr; \
00064 typedef constPtr<NAME> const##NAME##Ptr; \
00065 } \
00066 extern template class RepPtrStore<NS::NAME>; \
00067 extern template class RepPtrStore<const NS::NAME>;
00068
00069 #define DEFINE_DERIVED_POINTER(NAME,BASE) \
00070 class NAME; \
00071 typedef Ptr<NAME,BASE> NAME##Ptr; \
00072 typedef constPtr<NAME,BASE> const##NAME##Ptr; \
00073 extern template class RepPtrStore<NAME,BASE>; \
00074 extern template class RepPtrStore<const NAME,const BASE>;
00075
00076 #define DEFINE_DERIVED_POINTER_IN_NAMESPACE(NS,NAME,BASE) \
00077 namespace NS { \
00078 class NAME; \
00079 typedef Ptr<NAME,BASE> NAME##Ptr; \
00080 typedef constPtr<NAME,BASE> const##NAME##Ptr; \
00081 } \
00082 extern template class RepPtrStore<NS::NAME,BASE>; \
00083 extern template class RepPtrStore<const NS::NAME,const BASE>;
00084
00086
00087 #define IMPL_BASE_POINTER(NAME) \
00088 template class RepPtrStore<NAME>; \
00089 template class RepPtrStore<const NAME>;
00090
00091 #define IMPL_BASE_POINTER_IN_NAMESPACE(NS,NAME) \
00092 template class RepPtrStore<NS::NAME>; \
00093 template class RepPtrStore<const NS::NAME>;
00094
00095 #define IMPL_DERIVED_POINTER(NAME,BASE) \
00096 template class RepPtrStore<NAME,BASE>; \
00097 template class RepPtrStore<const NAME,const BASE>;
00098
00099 #define IMPL_DERIVED_POINTER_IN_NAMESPACE(NS,NAME,BASE) \
00100 template class RepPtrStore<NS::NAME,BASE>; \
00101 template class RepPtrStore<const NS::NAME,const BASE>;
00102
00104
00105 #endif // RepDef_h