libzypp 17.38.3
Capability.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_CAPABILITY_H
13#define ZYPP_CAPABILITY_H
14
15#include <iosfwd>
16
17#include <zypp-core/Globals.h>
19
20#include <zypp/IdString.h>
21#include <zypp/Edition.h>
22#include <zypp/Rel.h>
23#include <zypp/ResTraits.h>
25#include <zypp/CapMatch.h>
26
28namespace zypp
29{
30
31 class Capability;
32 class CapDetail;
33 class Arch;
34
35 using CapabilitySet = std::unordered_set<Capability>;
36
38 //
39 // CLASS NAME : Capability
40 //
63 {
64 public:
66
67 public:
69 Capability() : _id( sat::detail::emptyId ) {}
70
72 explicit Capability( sat::detail::IdType id_r ) : _id( id_r ) {}
73
77
89 explicit Capability( const char * str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
91 explicit Capability( const std::string & str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
93 Capability( const Arch & arch_r, const char * str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
95 Capability( const Arch & arch_r, const std::string & str_r, const ResKind & prefix_r = ResKind(), CtorFlag flag_r = UNPARSED );
96
98 Capability( const char * str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
100 Capability( const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
102 Capability( const Arch & arch_r, const char * str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
104 Capability( const Arch & arch_r, const std::string & str_r, CtorFlag flag_r, const ResKind & prefix_r = ResKind() );
106
107
111
112 Capability( const std::string & name_r, const std::string & op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
114 Capability( const std::string & name_r, Rel op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
116 Capability( const std::string & name_r, Rel op_r, const Edition & ed_r, const ResKind & prefix_r = ResKind() );
118
122
123 Capability( const std::string & arch_r, const std::string & name_r, const std::string & op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
125 Capability( const std::string & arch_r, const std::string & name_r, Rel op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
127 Capability( const std::string & arch_r, const std::string & name_r, Rel op_r, const Edition & ed_r, const ResKind & prefix_r = ResKind() );
129 Capability( const Arch & arch_r, const std::string & name_r, const std::string & op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
131 Capability( const Arch & arch_r, const std::string & name_r, Rel op_r, const std::string & ed_r, const ResKind & prefix_r = ResKind() );
133 Capability( const Arch & arch_r, const std::string & name_r, Rel op_r, const Edition & ed_r, const ResKind & prefix_r = ResKind() );
135
141 Capability( ResolverNamespace namespace_r, IdString value_r = IdString::Null );
142 Capability( ResolverNamespace namespace_r, const char * value_r ) : Capability( namespace_r, IdString(value_r) ) {}
143 Capability( ResolverNamespace namespace_r, const std::string & value_r ) : Capability( namespace_r, IdString(value_r) ) {}
145
148
152 {
153 CAP_AND = 16,
154 CAP_OR = 17,
155
156 CAP_COND = 22,
158 CAP_ELSE = 26,
159
160 CAP_WITH = 18,
162
164 CAP_ARCH = 20,
165 };
166
167 Capability( CapRel rel_r, const Capability & lhs_r, const Capability & rhs_r );
169
170 public:
172 static const Capability Null;
173
175 static const Capability Empty;
176
177 public:
179 explicit operator bool() const
180 { return ! empty(); }
181
185 bool empty() const
186 { return( _id == sat::detail::emptyId || _id == sat::detail::noId ); }
187
188 public:
190 const char * c_str() const;
191
193 std::string asString() const
194 { return c_str(); }
195
196 public:
198 CapDetail detail() const;
199
200 public:
211 static CapMatch matches( const Capability & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
212 static CapMatch matches( const Capability & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
213 static CapMatch matches( const Capability & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
214 static CapMatch matches( const Capability & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() );}
215
216 static CapMatch matches( const IdString & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
217 static CapMatch matches( const IdString & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
218 static CapMatch matches( const IdString & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
219 static CapMatch matches( const IdString & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
220
221 static CapMatch matches( const std::string & lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
222 static CapMatch matches( const std::string & lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
223 static CapMatch matches( const std::string & lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
224 static CapMatch matches( const std::string & lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
225
226 static CapMatch matches( const char * lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
227 static CapMatch matches( const char * lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
228 static CapMatch matches( const char * lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
229 static CapMatch matches( const char * lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
230
231 CapMatch matches( const Capability & rhs ) const { return _doMatch( id(), rhs.id() ); }
232 CapMatch matches( const IdString & rhs ) const { return _doMatch( id(), rhs.id() ); }
233 CapMatch matches( const std::string & rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
234 CapMatch matches( const char * rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
236
239 struct Matches
240 {
241 CapMatch operator()( const Capability & lhs, const Capability & rhs ) const
242 { return Capability::matches( lhs, rhs ); }
243 };
244
245 public:
251 static bool isInterestingFileSpec( const IdString & name_r ) { return isInterestingFileSpec( name_r.c_str() ); }
252 static bool isInterestingFileSpec( const std::string & name_r ) { return isInterestingFileSpec( name_r.c_str() ); }
253 static bool isInterestingFileSpec( const char * name_r );
254
279 static Capability guessPackageSpec( const std::string & str_r );
284 static Capability guessPackageSpec( const std::string & str_r, bool & rewrote_r );
285
286 public:
289 { return _id; }
290 private:
292 static CapMatch _doMatch( sat::detail::IdType lhs, sat::detail::IdType rhs );
293 private:
295 };
296
297
299 std::ostream & operator<<( std::ostream & str, const Capability & obj ) ZYPP_API;
300
302 std::ostream & dumpOn( std::ostream & str, const Capability & obj ) ZYPP_API;
303
305 std::ostream & operator<<( std::ostream & str, Capability::CapRel obj ) ZYPP_API;
306
308 inline bool operator==( const Capability & lhs, const Capability & rhs )
309 { return lhs.id() == rhs.id(); }
310
312 inline bool operator!=( const Capability & lhs, const Capability & rhs )
313 { return lhs.id() != rhs.id(); }
314
316 inline bool operator<( const Capability & lhs, const Capability & rhs )
317 { return lhs.id() < rhs.id(); }
318
331 {
333 : _cap { cap_r }
334 {}
335 private:
336 friend std::ostream & operator<<( std::ostream & str, const dumpCap & obj );
337 std::ostream & dumpOn( std::ostream & str ) const;
338 private:
339 std::ostream & _dumpRec( std::ostream & str, Capability cap_r, std::string lvl_r="" ) const;
341 };
342
343 inline std::ostream & operator<<( std::ostream & str, const dumpCap & obj )
344 { return obj.dumpOn( str ); }
345
347 //
348 // CLASS NAME : CapDetail
349 //
365 {
366 public:
367 enum Kind
368 {
369 NOCAP = 0x00,
370 NAMED = 0x01,
371 VERSIONED = 0x02,
373 };
374
394
395 public:
397 : _kind( NOCAP ), _lhs( 0 ), _rhs( 0 ), _flag( 0 ), _archIfSimple( 0 )
398 {}
399 explicit CapDetail( const Capability & cap_r )
400 : _kind( NOCAP ), _lhs( cap_r.id() ), _rhs( 0 ), _flag( 0 ), _archIfSimple( 0 )
401 { _init(); }
403 : _kind( NOCAP ), _lhs( id_r ), _rhs( 0 ), _flag( 0 ), _archIfSimple( 0 )
404 { _init(); }
405
406 public:
407 Kind kind() const { return _kind; }
408 bool isNull() const { return _kind == NOCAP; }
409 bool isNamed() const { return _kind == NAMED; }
410 bool isVersioned() const { return _kind == VERSIONED; }
411 bool isSimple() const { return _kind & (NAMED|VERSIONED); }
412 bool isExpression() const { return _kind == EXPRESSION; }
413
416 bool hasArch() const { return _archIfSimple; }
418 IdString name() const { return isSimple() ? IdString( _lhs ) : IdString(); }
419 Rel op() const { return isVersioned() ? Rel( _flag ) : isSimple() ? Rel::ANY : Rel::NONE; }
420 Edition ed() const { return isVersioned() ? Edition( _rhs ) : Edition(); }
422
426 CapRel capRel() const { return isExpression() ? CapRel(_flag) : REL_NONE; }
429
430 private:
431 void _init();
432 private:
436 unsigned _flag;
438 };
439
440
442 std::ostream & operator<<( std::ostream & str, const CapDetail & obj ) ZYPP_API;
443
445 std::ostream & operator<<( std::ostream & str, CapDetail::Kind obj ) ZYPP_API;
446
448 std::ostream & operator<<( std::ostream & str, CapDetail::CapRel obj ) ZYPP_API;
449
451
452 inline CapDetail Capability::detail() const { return CapDetail( _id ); }
453
455} // namespace zypp
457
459
460#endif // ZYPP_CAPABILITY_H
Provides API related macros.
#define ZYPP_DEFINE_ID_HASHABLE(C)
Define hash function for id based classes.
Definition Hash.h:26
Architecture.
Definition Arch.h:37
Helper providing more detailed information about a Capability.
Definition Capability.h:365
CapDetail(const Capability &cap_r)
Definition Capability.h:399
bool isNamed() const
Definition Capability.h:409
bool isSimple() const
Definition Capability.h:411
IdString name() const
Definition Capability.h:418
bool isNull() const
Definition Capability.h:408
bool hasArch() const
Definition Capability.h:416
CapDetail(sat::detail::IdType id_r)
Definition Capability.h:402
IdString arch() const
Definition Capability.h:417
Capability rhs() const
Definition Capability.h:427
Edition ed() const
Definition Capability.h:420
Rel op() const
Definition Capability.h:419
sat::detail::IdType _archIfSimple
Definition Capability.h:437
Capability lhs() const
Definition Capability.h:425
Kind kind() const
Definition Capability.h:407
sat::detail::IdType _rhs
Definition Capability.h:435
CapRel capRel() const
Definition Capability.h:426
sat::detail::IdType _lhs
Definition Capability.h:434
CapRel
Enum values corresponding with libsolv defines.
Definition Capability.h:379
@ REL_NONE
Not an expression.
Definition Capability.h:380
@ CAP_WITHOUT
without
Definition Capability.h:389
@ CAP_ARCH
Used internally.
Definition Capability.h:392
@ CAP_UNLESS
unless
Definition Capability.h:385
bool isVersioned() const
Definition Capability.h:410
bool isExpression() const
Definition Capability.h:412
Tri state Capability match result.
Definition CapMatch.h:39
A sat capability.
Definition Capability.h:63
static CapMatch matches(const char *lhs, const char *rhs)
Definition Capability.h:229
static CapMatch matches(const IdString &lhs, const std::string &rhs)
Definition Capability.h:218
Capability(ResolverNamespace namespace_r, const char *value_r)
Definition Capability.h:142
sat::detail::IdType id() const
Expert backdoor.
Definition Capability.h:288
CapMatch matches(const char *rhs) const
Definition Capability.h:234
static CapMatch matches(const char *lhs, const IdString &rhs)
Definition Capability.h:227
std::string asString() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition Capability.h:193
CapMatch matches(const IdString &rhs) const
Definition Capability.h:232
static CapMatch matches(const std::string &lhs, const Capability &rhs)
Definition Capability.h:221
static CapMatch matches(const Capability &lhs, const std::string &rhs)
Definition Capability.h:213
CapMatch matches(const std::string &rhs) const
Definition Capability.h:233
static CapMatch matches(const IdString &lhs, const Capability &rhs)
Definition Capability.h:216
static const Capability Null
No or Null Capability ( Id 0 ).
Definition Capability.h:172
static CapMatch matches(const IdString &lhs, const char *rhs)
Definition Capability.h:219
static CapMatch matches(const Capability &lhs, const Capability &rhs)
Definition Capability.h:211
CapMatch matches(const Capability &rhs) const
Definition Capability.h:231
sat::detail::IdType _id
Definition Capability.h:294
Capability()
Default ctor, Empty capability.
Definition Capability.h:69
bool empty() const
Whether the Capability is empty.
Definition Capability.h:185
CapRel
Enum values correspond with libsolv defines.
Definition Capability.h:152
@ CAP_WITHOUT
without
Definition Capability.h:161
@ CAP_ARCH
Used internally.
Definition Capability.h:164
CapDetail detail() const
Helper providing more detailed information about a Capability.
Definition Capability.h:452
static CapMatch matches(const Capability &lhs, const char *rhs)
Definition Capability.h:214
bool operator!=(const Capability &lhs, const Capability &rhs)
Definition Capability.h:312
static CapMatch matches(const std::string &lhs, const IdString &rhs)
Definition Capability.h:222
const char * c_str() const
Conversion to const char *.
bool operator==(const Capability &lhs, const Capability &rhs)
Definition Capability.h:308
static CapMatch _doMatch(sat::detail::IdType lhs, sat::detail::IdType rhs)
Match two Capabilities.
static bool isInterestingFileSpec(const IdString &name_r)
Test for a filename that is likely being REQUIRED.
Definition Capability.h:251
bool operator<(const Capability &lhs, const Capability &rhs)
Arbitrary order.
Definition Capability.h:316
static CapMatch matches(const Capability &lhs, const IdString &rhs)
Definition Capability.h:212
Capability(ResolverNamespace namespace_r, const std::string &value_r)
Definition Capability.h:143
static const Capability Empty
Empty Capability.
Definition Capability.h:175
static bool isInterestingFileSpec(const std::string &name_r)
Definition Capability.h:252
Capability(sat::detail::IdType id_r)
Ctor from id.
Definition Capability.h:72
static CapMatch matches(const IdString &lhs, const IdString &rhs)
Definition Capability.h:217
static CapMatch matches(const char *lhs, const Capability &rhs)
Definition Capability.h:226
static CapMatch matches(const char *lhs, const std::string &rhs)
Definition Capability.h:228
static CapMatch matches(const std::string &lhs, const char *rhs)
Definition Capability.h:224
static CapMatch matches(const std::string &lhs, const std::string &rhs)
Definition Capability.h:223
Edition represents [epoch:]version[-release].
Definition Edition.h:61
Access to the sat-pools string space.
Definition IdString.h:44
const char * c_str() const
Conversion to const char *.
Definition IdString.cc:50
IdType id() const
Expert backdoor.
Definition IdString.h:133
static const IdString Null
No or Null string ( Id 0 ).
Definition IdString.h:75
Resolvable kinds.
Definition ResKind.h:33
String related utilities and Regular expression matching.
static const IdType emptyId(1)
static const IdType noId(0)
int IdType
Generic Id type.
Definition PoolMember.h:104
Libsolv interface
Easy-to use interface to the ZYPP dependency resolver.
ResolverNamespace
The resolver's dependency namespaces.
std::ostream & dumpOn(std::ostream &str, const Capability &obj)
std::ostream & operator<<(std::ostream &str, const SerialNumber &obj)
std::unordered_set< Capability > CapabilitySet
Definition Capability.h:35
const Arch Arch_armv7hnl Arch_armv7nhl ZYPP_API
Definition Arch.h:247
CapMatch operator()(const Capability &lhs, const Capability &rhs) const
Definition Capability.h:241
Relational operators.
Definition Rel.h:46
static const Rel NONE
Definition Rel.h:59
static const Rel ANY
Definition Rel.h:58
Capability _cap
Definition Capability.h:340
friend std::ostream & operator<<(std::ostream &str, const dumpCap &obj)
std::ostream & _dumpRec(std::ostream &str, Capability cap_r, std::string lvl_r="") const
dumpCap(Capability cap_r)
Definition Capability.h:332
std::ostream & dumpOn(std::ostream &str) const
Backlink to the associated PoolImpl.
Definition PoolMember.h:89