|
yast2-core
|
00001 /*---------------------------------------------------------------------\ 00002 | | 00003 | __ __ ____ _____ ____ | 00004 | \ \ / /_ _/ ___|_ _|___ \ | 00005 | \ V / _` \___ \ | | __) | | 00006 | | | (_| |___) || | / __/ | 00007 | |_|\__,_|____/ |_| |_____| | 00008 | | 00009 | core system | 00010 | (C) SuSE GmbH | 00011 \----------------------------------------------------------------------/ 00012 00013 File: RepDef.h 00014 00015 Author: Michael Andres <ma@suse.de> 00016 Maintainer: Michael Andres <ma@suse.de> 00017 00018 Purpose: Provides a set of macros to define data and pointer classes. 00019 See class RepPtrStore in Rep.h. 00020 00021 /-*/ 00022 #ifndef RepDef_h 00023 #define RepDef_h 00024 00025 #include <y2util/Rep.h> 00026 00028 // 00029 // NOTE: Data classes must inherit class Rep: 00030 // 00031 // class CLNAME : public Rep { 00032 // REP_BODY(CLNAME); 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 & ); /* no copy */ \ 00044 CLNAME & operator=(const CLNAME & ); /* no assign */ \ 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
1.7.3