~thopiekar/zypper/libzypp-manual-import

« back to all changes in this revision

Viewing changes to zypp/pool/ByIdent.h

  • Committer: Thomas-Karl Pietrowski
  • Date: 2014-01-29 22:44:28 UTC
  • Revision ID: thopiekar@googlemail.com-20140129224428-gpcqnsdakby362n8
firstĀ import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*---------------------------------------------------------------------\
 
2
|                          ____ _   __ __ ___                          |
 
3
|                         |__  / \ / / . \ . \                         |
 
4
|                           / / \ V /|  _/  _/                         |
 
5
|                          / /__ | | | | | |                           |
 
6
|                         /_____||_| |_| |_|                           |
 
7
|                                                                      |
 
8
\---------------------------------------------------------------------*/
 
9
/** \file       zypp/pool/ByIdent.h
 
10
 *
 
11
*/
 
12
#ifndef ZYPP_POOL_BYIDENT_H
 
13
#define ZYPP_POOL_BYIDENT_H
 
14
 
 
15
#include "zypp/PoolItem.h"
 
16
 
 
17
///////////////////////////////////////////////////////////////////
 
18
namespace zypp
 
19
{ /////////////////////////////////////////////////////////////////
 
20
  ///////////////////////////////////////////////////////////////////
 
21
  namespace pool
 
22
  { /////////////////////////////////////////////////////////////////
 
23
 
 
24
    /** Main filter selecting PoolItems by \c name and \c kind.
 
25
     */
 
26
    class ByIdent
 
27
    {
 
28
      public:
 
29
        ByIdent()
 
30
        : _id( 0 )
 
31
        {}
 
32
 
 
33
        explicit ByIdent( sat::Solvable slv_r )
 
34
        : _id( makeIdent( slv_r ) )
 
35
        {}
 
36
 
 
37
        explicit ByIdent( IdString ident_r )
 
38
        : _id( ident_r.id() )
 
39
        {}
 
40
 
 
41
        ByIdent( ResKind kind_r, IdString name_r )
 
42
        : _id( makeIdent( kind_r, name_r ) )
 
43
        {}
 
44
 
 
45
        ByIdent( ResKind kind_r, const C_Str & name_r )
 
46
        : _id( makeIdent( kind_r, name_r ) )
 
47
        {}
 
48
 
 
49
      public:
 
50
        bool operator()( sat::Solvable slv_r ) const
 
51
        {
 
52
          return _id >= 0 ? ( slv_r.ident().id() == _id && ! slv_r.isKind( ResKind::srcpackage ) )
 
53
            : ( slv_r.ident().id() == -_id && slv_r.isKind( ResKind::srcpackage ) );
 
54
        }
 
55
 
 
56
        bool operator()( const PoolItem & pi_r ) const
 
57
        { return operator()( pi_r.satSolvable() ); }
 
58
 
 
59
        bool operator()( ResObject::constPtr p_r ) const
 
60
        { return p_r ? operator()( p_r->satSolvable() ) : !_id; }
 
61
 
 
62
      private:
 
63
        sat::detail::IdType makeIdent( sat::Solvable slv_r )
 
64
        {
 
65
          return slv_r.isKind( ResKind::srcpackage ) ? -slv_r.ident().id()
 
66
            : slv_r.ident().id();
 
67
        }
 
68
 
 
69
        sat::detail::IdType makeIdent( ResKind kind_r, IdString name_r )
 
70
        {
 
71
          if ( kind_r == ResKind::package )
 
72
            return name_r.id();
 
73
          else if ( kind_r == ResKind::srcpackage )
 
74
            return -name_r.id();
 
75
          return IdString( str::form( "%s:%s", kind_r.c_str(), name_r.c_str() ) ).id();
 
76
        }
 
77
 
 
78
        sat::detail::IdType makeIdent( ResKind kind_r, const C_Str & name_r )
 
79
        {
 
80
          if ( kind_r == ResKind::package )
 
81
            return IdString( name_r ).id();
 
82
          else if ( kind_r == ResKind::srcpackage )
 
83
            return -(IdString( name_r ).id());
 
84
          return IdString( str::form( "%s:%s", kind_r.c_str(), name_r.c_str() ) ).id();
 
85
        }
 
86
 
 
87
      public:
 
88
        sat::detail::IdType get() const { return _id; }
 
89
 
 
90
      private:
 
91
        /** negative \c _id for \c srcpackage, as they use the same \c ident
 
92
         * as \c package.
 
93
         */
 
94
        sat::detail::IdType _id;
 
95
    };
 
96
 
 
97
    /////////////////////////////////////////////////////////////////
 
98
  } // namespace pool
 
99
  ///////////////////////////////////////////////////////////////////
 
100
  /////////////////////////////////////////////////////////////////
 
101
} // namespace zypp
 
102
///////////////////////////////////////////////////////////////////
 
103
#endif // ZYPP_POOL_BYIDENT_H