1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/ResTraits.h
12 #ifndef ZYPP_RESTRAITS_H
13 #define ZYPP_RESTRAITS_H
15 #include "zypp/base/PtrTypes.h"
16 #include "zypp/base/KindOf.h"
18 ///////////////////////////////////////////////////////////////////
20 { /////////////////////////////////////////////////////////////////
22 /** \defgroup ZYPP_RESOLVABLE_SMART_POINTER_TYPES
23 * Resolvable smart pointer types.
25 * Forward declaration of all Resolvable smart pointer
26 * types provided in \c ResTraits.h (recommended in header files):
28 * #include<zypp/ResTraits.h>
30 * Resolvable_Ptr // Resolvable *
31 * ResTraits<Resolvable>::PtrType // same as above
33 * Resolvable_constPtr // const Resolvable *
34 * ResTraits<Resolvable>::constPtrType // same as above
37 * Synonym, but requires \c Resolvable.h being included:
39 * #include<zypp/Resolvable.h>
41 * Resolvable::Ptr // same as Resolvable_Ptr but requires Resolvable.h
42 * Resolvable::constPtr // same as Resolvable_constPtr but requires Resolvable.h
45 * \note When adding a \c NewResolvable type here, dont forgett to
46 * put <tt>IMPL_PTR_TYPE(NewResolvable);</tt> into the \c NewResolvable.cc.
49 DEFINE_PTR_TYPE( Resolvable );
50 DEFINE_PTR_TYPE( ResObject );
52 DEFINE_PTR_TYPE( Atom );
53 DEFINE_PTR_TYPE( Package );
54 DEFINE_PTR_TYPE( SrcPackage );
55 DEFINE_PTR_TYPE( Selection );
56 DEFINE_PTR_TYPE( Pattern );
57 DEFINE_PTR_TYPE( Product );
58 DEFINE_PTR_TYPE( Patch );
59 DEFINE_PTR_TYPE( Script );
60 DEFINE_PTR_TYPE( Message );
61 DEFINE_PTR_TYPE( Language );
63 DEFINE_PTR_TYPE( SystemResObject );
66 /** Base of ResTraits. Defines the Resolvable::Kind type. */
67 struct ResolvableTraits
69 typedef KindOf<Resolvable> KindType;
72 /** ResTraits. Defines common types and the Kind value. */
73 template<typename _Res>
74 struct ResTraits : public ResolvableTraits
76 typedef intrusive_ptr<_Res> PtrType;
77 typedef intrusive_ptr<const _Res> constPtrType;
79 static const KindType kind;
82 /** ResTraits specialisation for Resolvable.
83 * Resolvable is common base and has no Kind value.
86 struct ResTraits<Resolvable> : public ResolvableTraits
88 typedef intrusive_ptr<Resolvable> PtrType;
89 typedef intrusive_ptr<const Resolvable> constPtrType;
92 /** ResTraits specialisation for ResObject.
93 * ResObject is common base and has no Kind value.
96 struct ResTraits<ResObject> : public ResolvableTraits
98 typedef intrusive_ptr<ResObject> PtrType;
99 typedef intrusive_ptr<const ResObject> constPtrType;
102 /////////////////////////////////////////////////////////////////
104 ///////////////////////////////////////////////////////////////////
105 #endif // ZYPP_RESTRAITS_H