1
/*---------------------------------------------------------------------\
3
| |__ / \ / / . \ . \ |
8
\---------------------------------------------------------------------*/
9
/** \file zypp/pool/ByIdent.h
12
#ifndef ZYPP_POOL_BYIDENT_H
13
#define ZYPP_POOL_BYIDENT_H
15
#include "zypp/PoolItem.h"
17
///////////////////////////////////////////////////////////////////
19
{ /////////////////////////////////////////////////////////////////
20
///////////////////////////////////////////////////////////////////
22
{ /////////////////////////////////////////////////////////////////
24
/** Main filter selecting PoolItems by \c name and \c kind.
33
explicit ByIdent( sat::Solvable slv_r )
34
: _id( makeIdent( slv_r ) )
37
explicit ByIdent( IdString ident_r )
41
ByIdent( ResKind kind_r, IdString name_r )
42
: _id( makeIdent( kind_r, name_r ) )
45
ByIdent( ResKind kind_r, const C_Str & name_r )
46
: _id( makeIdent( kind_r, name_r ) )
50
bool operator()( sat::Solvable slv_r ) const
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 ) );
56
bool operator()( const PoolItem & pi_r ) const
57
{ return operator()( pi_r.satSolvable() ); }
59
bool operator()( ResObject::constPtr p_r ) const
60
{ return p_r ? operator()( p_r->satSolvable() ) : !_id; }
63
sat::detail::IdType makeIdent( sat::Solvable slv_r )
65
return slv_r.isKind( ResKind::srcpackage ) ? -slv_r.ident().id()
69
sat::detail::IdType makeIdent( ResKind kind_r, IdString name_r )
71
if ( kind_r == ResKind::package )
73
else if ( kind_r == ResKind::srcpackage )
75
return IdString( str::form( "%s:%s", kind_r.c_str(), name_r.c_str() ) ).id();
78
sat::detail::IdType makeIdent( ResKind kind_r, const C_Str & name_r )
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();
88
sat::detail::IdType get() const { return _id; }
91
/** negative \c _id for \c srcpackage, as they use the same \c ident
94
sat::detail::IdType _id;
97
/////////////////////////////////////////////////////////////////
99
///////////////////////////////////////////////////////////////////
100
/////////////////////////////////////////////////////////////////
102
///////////////////////////////////////////////////////////////////
103
#endif // ZYPP_POOL_BYIDENT_H