yast2-core
RepDef.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | |
3 | __ __ ____ _____ ____ |
4 | \ \ / /_ _/ ___|_ _|___ \ |
5 | \ V / _` \___ \ | | __) | |
6 | | | (_| |___) || | / __/ |
7 | |_|\__,_|____/ |_| |_____| |
8 | |
9 | core system |
10 | (C) SuSE GmbH |
11 \----------------------------------------------------------------------/
12 
13  File: RepDef.h
14 
15  Author: Michael Andres <ma@suse.de>
16  Maintainer: Michael Andres <ma@suse.de>
17 
18  Purpose: Provides a set of macros to define data and pointer classes.
19  See class RepPtrStore in Rep.h.
20 
21 /-*/
22 #ifndef RepDef_h
23 #define RepDef_h
24 
25 #include <y2util/Rep.h>
26 
28 //
29 // NOTE: Data classes must inherit class Rep:
30 //
31 // class CLNAME : public Rep {
32 // REP_BODY(CLNAME);
33 // ...
34 // };
35 //
37 
38 #define REP_BODY(NAME) GEN_REP_BODY( NAME, #NAME )
39 
41 
42 #define GEN_REP_BODY(CLNAME,STRNAME) \
43  CLNAME( const CLNAME & ); /* no copy */ \
44  CLNAME & operator=(const CLNAME & ); /* no assign */ \
45  public: \
46  virtual const char * repName() const \
47  { return STRNAME; } \
48  virtual size_t mem_size () const { return sizeof (CLNAME); }\
49  private:
50 
52 
53 #define DEFINE_BASE_POINTER(NAME) \
54  class NAME; \
55  typedef Ptr<NAME> NAME##Ptr; \
56  typedef constPtr<NAME> const##NAME##Ptr; \
57  extern template class RepPtrStore<NAME>; \
58  extern template class RepPtrStore<const NAME>;
59 
60 #define DEFINE_BASE_POINTER_IN_NAMESPACE(NS,NAME) \
61  namespace NS { \
62  class NAME; \
63  typedef Ptr<NAME> NAME##Ptr; \
64  typedef constPtr<NAME> const##NAME##Ptr; \
65  } \
66  extern template class RepPtrStore<NS::NAME>; \
67  extern template class RepPtrStore<const NS::NAME>;
68 
69 #define DEFINE_DERIVED_POINTER(NAME,BASE) \
70  class NAME; \
71  typedef Ptr<NAME,BASE> NAME##Ptr; \
72  typedef constPtr<NAME,BASE> const##NAME##Ptr; \
73  extern template class RepPtrStore<NAME,BASE>; \
74  extern template class RepPtrStore<const NAME,const BASE>;
75 
76 #define DEFINE_DERIVED_POINTER_IN_NAMESPACE(NS,NAME,BASE) \
77  namespace NS { \
78  class NAME; \
79  typedef Ptr<NAME,BASE> NAME##Ptr; \
80  typedef constPtr<NAME,BASE> const##NAME##Ptr; \
81  } \
82  extern template class RepPtrStore<NS::NAME,BASE>; \
83  extern template class RepPtrStore<const NS::NAME,const BASE>;
84 
86 
87 #define IMPL_BASE_POINTER(NAME) \
88 template class RepPtrStore<NAME>; \
89 template class RepPtrStore<const NAME>;
90 
91 #define IMPL_BASE_POINTER_IN_NAMESPACE(NS,NAME) \
92 template class RepPtrStore<NS::NAME>; \
93 template class RepPtrStore<const NS::NAME>;
94 
95 #define IMPL_DERIVED_POINTER(NAME,BASE) \
96 template class RepPtrStore<NAME,BASE>; \
97 template class RepPtrStore<const NAME,const BASE>;
98 
99 #define IMPL_DERIVED_POINTER_IN_NAMESPACE(NS,NAME,BASE) \
100 template class RepPtrStore<NS::NAME,BASE>; \
101 template class RepPtrStore<const NS::NAME,const BASE>;
102 
104 
105 #endif // RepDef_h

Generated on a sunny day for yast2-core by doxygen 1.8.11