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_DERIVED_POINTER(NAME,BASE) \
00061 class NAME; \
00062 typedef Ptr<NAME,BASE> NAME##Ptr; \
00063 typedef constPtr<NAME,BASE> const##NAME##Ptr; \
00064 extern template class RepPtrStore<NAME,BASE>; \
00065 extern template class RepPtrStore<const NAME,const BASE>;
00066
00068
00069 #define IMPL_BASE_POINTER(NAME) \
00070 template class RepPtrStore<NAME>; \
00071 template class RepPtrStore<const NAME>;
00072
00073 #define IMPL_DERIVED_POINTER(NAME,BASE) \
00074 template class RepPtrStore<NAME,BASE>; \
00075 template class RepPtrStore<const NAME,const BASE>;
00076
00078
00079 #endif // RepDef_h