summaryrefslogtreecommitdiff
path: root/swig/ResTraits.i
blob: bdd4f2e32e1964f76b5f1cec7bbec41164429c3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

/** Base of ResTraits. Defines the Resolvable::Kind type. */
/*struct ResolvableTraits
{
    typedef KindOf<Resolvable>  KindType;
};*/

namespace zypp
{
  /** ResTraits. Defines common types and the Kind value. */
  template<typename _Res>
  struct ResTraits
  {
      typedef zypp::intrusive_ptr<_Res>       PtrType;
      typedef zypp::intrusive_ptr<const _Res> constPtrType;
  };

   typedef ::zypp::intrusive_ptr<const ResObject> ResObject_constPtr;
   typedef ::zypp::intrusive_ptr<ResObject>       ResObject_Ptr;
   %template(ResObject_constPtr)          ::zypp::intrusive_ptr<const zypp::ResObject>;
   %template(ResObject_Ptr)               ::zypp::intrusive_ptr<zypp::ResObject>;

}

namespace zypp::ResObject::TraitsType
{
  typedef ::zypp::intrusive_ptr<const zypp::ResObject> constPtrType;
}
namespace zypp::Resolvable::TraitsType
{
  typedef ::zypp::intrusive_ptr<const zypp::Resolvable> constPtrType;
}

%template(ResTraitsResolvable) zypp::ResTraits<zypp::Resolvable>;
%template(ResTraitsResObject)  zypp::ResTraits<zypp::ResObject>;

// Common definitions for all Resolvable types
// - *_Ptr and *_constPtr
// - isKind* to test whether a ResObject/PoolItem is
//   of a specific kind.
// - asKind* to convert a ResObject/PoolItem into a
//   specific *_constPtr.
%define %STUFF(X)
namespace zypp
{
  typedef ::zypp::intrusive_ptr<const X> X##_constPtr;
  typedef ::zypp::intrusive_ptr<X>       X##_Ptr;
  %template(X##_constPtr)        ::zypp::intrusive_ptr<const X>;
  %template(X##_Ptr)             ::zypp::intrusive_ptr<X>;

  bool isKind##X( const zypp::Resolvable::constPtr & p );
  bool isKind##X( const zypp::PoolItem & p );

  X##_constPtr asKind##X( const zypp::Resolvable::constPtr & p );
  X##_constPtr asKind##X( const zypp::PoolItem & p );
}

%header
{
  namespace zypp
  {
    inline bool isKind##X( const zypp::Resolvable::constPtr & p )
    { return isKind<X>( p ); }
    inline bool isKind##X( const zypp::PoolItem & p )
    { return isKind<X>( p.resolvable() ); }
    inline X::constPtr asKind##X( const zypp::Resolvable::constPtr & p )
    { return asKind<X>( p ); }
    inline X::constPtr asKind##X( const zypp::PoolItem & p )
    { return asKind<X>( p.resolvable() ); }
  }
}

#if defined(SWIGPYTHON)
%pythoncode
{
  def KindOf##X():
    return KindOfResolvable( #X )
}
#endif
%enddef

%STUFF(Package)
%STUFF(Patch)
%STUFF(SrcPackage)
%STUFF(Pattern)
%STUFF(Product)