libzypp 17.37.17
SolvableType.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
11#ifndef ZYPP_SAT_SOLVABLETYPE_H
12#define ZYPP_SAT_SOLVABLETYPE_H
13
14#include <iosfwd>
15
16#include <zypp/sat/Solvable.h>
17#include <zypp/Repository.h>
18#include <zypp-core/OnMediaLocation>
19#include <zypp/ByteCount.h>
20#include <zypp/CheckSum.h>
21#include <zypp/CpeId.h>
22#include <zypp/Date.h>
23
25namespace zypp
26{
28 namespace sat
29 {
53 template <class Derived>
55 {
57 Solvable satSolvable() const { return Solvable(static_cast<const Derived&>(*this)); }
58
59 explicit operator bool() const { return bool(satSolvable()); }
60
61 IdString ident() const { return satSolvable().ident(); }
62
63 ResKind kind() const { return satSolvable().kind(); }
64 bool isKind( const ResKind & kind_r ) const { return satSolvable().isKind( kind_r ); }
65 template<class TRes>
66 bool isKind() const { return satSolvable().template isKind<TRes>(); }
67 template<class TIterator>
68 bool isKind( TIterator begin, TIterator end ) const { return satSolvable().isKind( begin, end ); }
69
70 std::string name() const { return satSolvable().name(); }
71 Edition edition() const { return satSolvable().edition(); }
72 Arch arch() const { return satSolvable().arch(); }
73 IdString vendor() const { return satSolvable().vendor(); }
74
76 RepoInfo repoInfo() const { return satSolvable().repoInfo(); }
77
78 bool isSystem() const { return satSolvable().isSystem(); }
79 bool onSystemByUser() const { return satSolvable().onSystemByUser(); }
80 bool onSystemByAuto() const { return satSolvable().onSystemByAuto(); }
83 bool isNeedreboot() const { return satSolvable().isNeedreboot(); }
84
85 bool isBlacklisted() const { return satSolvable().isBlacklisted(); }
86 bool isRetracted() const { return satSolvable().isRetracted(); }
87 bool isPtf() const { return satSolvable().isPtf(); }
88 bool isPtfMaster() const { return satSolvable().isPtfMaster(); }
89 bool isPtfPackage() const { return satSolvable().isPtfPackage(); }
90
91 Date buildtime() const { return satSolvable().buildtime(); }
92 Date installtime() const { return satSolvable().installtime(); }
93
94 std::string asString() const { return satSolvable().asString(); }
95 std::string asUserString() const { return satSolvable().asUserString(); }
96
97 bool identical( const Solvable & rhs ) const { return satSolvable().identical( rhs ); }
98 template <class RDerived>
99 bool identical( const SolvableType<RDerived> & rhs ) const { return satSolvable().identical( rhs.satSolvable() ); }
100
101 bool sameNVRA( const Solvable &rhs ) const { return satSolvable().sameNVRA( rhs ); }
102 template <class RDerived>
103 bool sameNVRA( const SolvableType<RDerived> & rhs ) const { return satSolvable().sameNVRA( rhs.satSolvable() ); }
104
114 Capabilities dep( Dep which_r ) const { return satSolvable().dep(which_r); }
115 Capabilities operator[]( Dep which_r ) const { return satSolvable()[which_r]; }
116
117#if __cplusplus < 202002L
119 Capabilities requires() const { return satSolvable().dep_requires(); }
127#endif
128
129
130 CapabilitySet providesNamespace( const std::string & namespace_r ) const { return satSolvable().providesNamespace( namespace_r ); }
131 CapabilitySet valuesOfNamespace( const std::string & namespace_r ) const { return satSolvable().valuesOfNamespace( namespace_r ); }
132
133 bool supportsLocales() const { return satSolvable().supportsLocales(); }
134 bool supportsLocale( const Locale & locale_r ) const { return satSolvable().supportsLocale( locale_r ); }
135 bool supportsLocale( const LocaleSet & locales_r ) const { return satSolvable().supportsLocale( locales_r ); }
138
139 CpeId cpeId() const { return satSolvable().cpeId(); }
140 unsigned mediaNr() const { return satSolvable().mediaNr(); }
143 std::string distribution() const { return satSolvable().distribution(); }
144
145 std::string summary( const Locale & lang_r = Locale() ) const { return satSolvable().summary( lang_r ); }
146 std::string description( const Locale & lang_r = Locale() ) const { return satSolvable().description( lang_r ); }
147 std::string insnotify( const Locale & lang_r = Locale() ) const { return satSolvable().insnotify( lang_r ); }
148 std::string delnotify( const Locale & lang_r = Locale() ) const { return satSolvable().delnotify( lang_r ); }
149 std::string licenseToConfirm( const Locale & lang_r = Locale() ) const { return satSolvable().licenseToConfirm( lang_r ); }
151
152 public:
153 std::string lookupStrAttribute( const SolvAttr & attr ) const { return satSolvable().lookupStrAttribute( attr ); }
154 std::string lookupStrAttribute( const SolvAttr & attr, const Locale & lang_r ) const { return satSolvable().lookupStrAttribute( attr, lang_r ); }
155 bool lookupBoolAttribute( const SolvAttr & attr ) const { return satSolvable().lookupBoolAttribute( attr ); }
156 detail::IdType lookupIdAttribute( const SolvAttr & attr ) const { return satSolvable().lookupIdAttribute( attr ); }
157 unsigned long long lookupNumAttribute( const SolvAttr & attr ) const { return satSolvable().lookupNumAttribute( attr ); }
158 unsigned long long lookupNumAttribute( const SolvAttr & attr, unsigned long long notfound_r ) const { return satSolvable().lookupNumAttribute( attr, notfound_r ); }
161 Solvable::IdType id() const { return satSolvable().id(); }
162
163 protected:
165 SolvableType( const SolvableType & ) = default;
166 SolvableType &operator=( const SolvableType & ) = default;
167 SolvableType( SolvableType && ) noexcept = default;
168 SolvableType &operator=( SolvableType && ) noexcept = default;
170 };
171
173 template <class Derived>
174 inline std::ostream & operator<<( std::ostream & str, const SolvableType<Derived> & obj )
175 { return str << obj.satSolvable(); }
176
178 template <class Derived>
179 inline std::ostream & dumpOn( std::ostream & str, const SolvableType<Derived> & obj )
180 { return dumpOn( str, obj.satSolvable() ); }
181
183 template <class LDerived, class RDerived>
184 inline bool operator==( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
185 { return lhs.satSolvable() == rhs.satSolvable(); }
186
187 template <class Derived>
188 inline bool operator==( const SolvableType<Derived> & lhs, const Solvable & rhs )
189 { return lhs.satSolvable() == rhs; }
190
191 template <class Derived>
192 inline bool operator==( const Solvable & lhs, const SolvableType<Derived> & rhs )
193 { return lhs == rhs.satSolvable(); }
194
196 template <class LDerived, class RDerived>
197 inline bool operator!=( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
198 { return lhs.satSolvable() != rhs.satSolvable(); }
199
200 template <class Derived>
201 inline bool operator!=( const SolvableType<Derived> & lhs, const Solvable & rhs )
202 { return lhs.satSolvable() != rhs; }
203
204 template <class Derived>
205 inline bool operator!=( const Solvable & lhs, const SolvableType<Derived> & rhs )
206 { return lhs != rhs.satSolvable(); }
207
209 template <class LDerived, class RDerived>
210 inline bool operator<( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
211 { return lhs.satSolvable() < rhs.satSolvable(); }
212
213 template <class Derived>
214 inline bool operator<( const SolvableType<Derived> & lhs, const Solvable & rhs )
215 { return lhs.satSolvable() < rhs; }
216
217 template <class Derived>
218 inline bool operator<( const Solvable & lhs, const SolvableType<Derived> & rhs )
219 { return lhs < rhs.satSolvable(); }
220
222 template<class TRes, class Derived>
223 inline bool isKind( const SolvableType<Derived> & solvable_r )
224 { return isKind<TRes>( solvable_r.satSolvable() ); }
225
227 template <class LDerived, class RDerived>
228 inline bool identical( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
229 { return identical( lhs.satSolvable(), rhs.satSolvable() ); }
230
231 template <class Derived>
232 inline bool identical( const SolvableType<Derived> & lhs, const Solvable & rhs )
233 { return identical( lhs.satSolvable(), rhs ); }
234
235 template <class Derived>
236 inline bool identical( const Solvable & lhs, const SolvableType<Derived> & rhs )
237 { return identical( lhs, rhs.satSolvable() ); }
238
240 template <class LDerived, class RDerived>
241 inline bool sameNVRA( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
242 { return sameNVRA( lhs.satSolvable(), rhs.satSolvable() ); }
243
244 template <class Derived>
245 inline bool sameNVRA( const SolvableType<Derived> & lhs, const Solvable & rhs )
246 { return sameNVRA( lhs.satSolvable(), rhs ); }
247
248 template <class Derived>
249 inline bool sameNVRA( const Solvable & lhs, const SolvableType<Derived> & rhs )
250 { return sameNVRA( lhs, rhs.satSolvable() ); }
251
252
254 template <class LDerived, class RDerived>
255 inline int compareByN( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
256 { return compareByN( lhs.satSolvable(), rhs.satSolvable() ); }
257
258 template <class Derived>
259 inline bool compareByN( const SolvableType<Derived> & lhs, const Solvable & rhs )
260 { return compareByN( lhs.satSolvable(), rhs ); }
261
262 template <class Derived>
263 inline bool compareByN( const Solvable & lhs, const SolvableType<Derived> & rhs )
264 { return compareByN( lhs, rhs.satSolvable() ); }
265
266
268 template <class LDerived, class RDerived>
269 inline int compareByNVR( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
270 { return compareByNVR( lhs.satSolvable(), rhs.satSolvable() ); }
271
272 template <class Derived>
273 inline bool compareByNVR( const SolvableType<Derived> & lhs, const Solvable & rhs )
274 { return compareByNVR( lhs.satSolvable(), rhs ); }
275
276 template <class Derived>
277 inline bool compareByNVR( const Solvable & lhs, const SolvableType<Derived> & rhs )
278 { return compareByNVR( lhs, rhs.satSolvable() ); }
279
281 template <class LDerived, class RDerived>
282 inline int compareByNVRA( const SolvableType<LDerived> & lhs, const SolvableType<RDerived> & rhs )
283 { return compareByNVRA( lhs.satSolvable(), rhs.satSolvable() ); }
284
285 template <class Derived>
286 inline bool compareByNVRA( const SolvableType<Derived> & lhs, const Solvable & rhs )
287 { return compareByNVRA( lhs.satSolvable(), rhs ); }
288
289 template <class Derived>
290 inline bool compareByNVRA( const Solvable & lhs, const SolvableType<Derived> & rhs )
291 { return compareByNVRA( lhs, rhs.satSolvable() ); }
292
293 } // namespace sat
295} // namespace zypp
297#endif // ZYPP_SAT_SOLVABLETYPE_H
Architecture.
Definition Arch.h:37
Store and operate with byte count.
Definition ByteCount.h:32
Container of Capability (currently read only).
Common Platform Enumearation (2.3) See http://cpe.mitre.org/ for more information on the Common Platf...
Definition CpeId.h:33
Store and operate on date (time_t).
Definition Date.h:33
Edition represents [epoch:]version[-release]
Definition Edition.h:61
Access to the sat-pools string space.
Definition IdString.h:44
'Language[_Country]' codes.
Definition Locale.h:51
Describes a resource file located on a medium.
What is known about a repository.
Definition RepoInfo.h:72
Resolvable kinds.
Definition ResKind.h:33
Solvable attribute keys.
Definition SolvAttr.h:41
A Solvable object within the sat Pool.
Definition Solvable.h:54
IdType id() const
Expert backdoor.
Definition Solvable.h:445
bool isKind(const Solvable &solvable_r)
Test whether a Solvable is of a certain Kind.
Definition Solvable.h:475
bool isPtfPackage() const
Subset of isPtf (provides ptfPackageToken).
Definition Solvable.cc:424
bool isNeedreboot() const
Whether this solvable triggers the reboot-needed hint if installed/updated.
Definition Solvable.cc:395
bool identIsAutoInstalled() const
Whether an installed solvable with the same ident is flagged as AutoInstalled.
Definition Solvable.h:143
OnMediaLocation lookupLocation() const
returns OnMediaLocation data: This is everything we need to download e.g.
Definition Solvable.cc:225
Capabilities dep_suggests() const
Definition Solvable.cc:510
Capabilities dep(Dep which_r) const
Return Capabilities selected by Dep constant.
Definition Solvable.h:247
Capabilities dep_conflicts() const
Definition Solvable.cc:495
bool lookupBoolAttribute(const SolvAttr &attr) const
returns the boolean attribute value for attr or false if it does not exists.
Definition Solvable.cc:171
IdString vendor() const
The vendor.
Definition Solvable.cc:358
ByteCount installSize() const
Installed (unpacked) size.
Definition Solvable.cc:719
Date buildtime() const
The items build time.
Definition Solvable.cc:437
bool needToAcceptLicense() const
True except for well known exceptions (i.e show license but no need to accept it).
Definition Solvable.cc:778
ResKind kind() const
The Solvables ResKind.
Definition Solvable.cc:276
CapabilitySet providesNamespace(const std::string &namespace_r) const
Return the namespaced provides 'namespace([value])[ op edition]' of this Solvable.
Definition Solvable.cc:551
Capabilities dep_supplements() const
Definition Solvable.cc:520
std::string asString() const
String representation "ident-edition.arch" or "noSolvable".
Definition Solvable.cc:449
std::string distribution() const
The distribution string.
Definition Solvable.cc:731
unsigned mediaNr() const
Media number the solvable is located on (0 if no media access required).
Definition Solvable.cc:706
bool isBlacklisted() const
Whether this solvable is blacklisted (retracted,ptf,...).
Definition Solvable.cc:402
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
returns the numeric attribute value for attr or 0 if it does not exists.
Definition Solvable.cc:159
Capabilities dep_enhances() const
Definition Solvable.cc:515
std::string lookupStrAttribute(const SolvAttr &attr) const
returns the string attribute value for attr or an empty string if it does not exists.
Definition Solvable.cc:131
Capabilities dep_recommends() const
Definition Solvable.cc:505
bool multiversionInstall() const
Whether different versions of this package can be installed at the same time.
Definition Solvable.cc:431
CpeId cpeId() const
The solvables CpeId if available.
Definition Solvable.cc:700
Date installtime() const
The items install time (false if not installed).
Definition Solvable.cc:443
Edition edition() const
The edition (version-release).
Definition Solvable.cc:338
bool sameNVRA(const Solvable &rhs) const
Test for same name-version-release.arch.
Definition Solvable.h:215
bool isPtfMaster() const
Subset of isPtf (provides ptfMasterToken).
Definition Solvable.cc:418
Capabilities dep_obsoletes() const
Definition Solvable.cc:500
LocaleSet getSupportedLocales() const
Return the supported locales.
Definition Solvable.cc:693
bool supportsRequestedLocales() const
Whether this Solvable supports at least one requested locale.
Definition Solvable.cc:690
Arch arch() const
The architecture.
Definition Solvable.cc:344
bool isSystem() const
Return whether this Solvable belongs to the system repo.
Definition Solvable.cc:374
std::string licenseToConfirm(const Locale &lang_r=Locale()) const
License or agreement to accept before installing the solvable (opt.
Definition Solvable.cc:761
bool supportsLocales() const
Whether this Solvable claims to support locales.
Definition Solvable.cc:670
std::string asUserString() const
String representation "ident-edition.arch(repo)" or "noSolvable".
Definition Solvable.cc:458
std::string summary(const Locale &lang_r=Locale()) const
Short (singleline) text describing the solvable (opt.
Definition Solvable.cc:737
Capabilities dep_prerequires() const
Definition Solvable.cc:525
Capabilities dep_provides() const
Definition Solvable.cc:485
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
returns the id attribute value for attr or detail::noId if it does not exists.
Definition Solvable.cc:177
std::string name() const
The name (without any ResKind prefix).
Definition Solvable.cc:330
bool supportsLocale(const Locale &locale_r) const
Whether this Solvable supports a specific Locale.
Definition Solvable.cc:676
Capabilities dep_requires() const
Definition Solvable.cc:490
ByteCount downloadSize() const
Download size.
Definition Solvable.cc:725
bool isKind(const ResKind &kind_r) const
Test whether a Solvable is of a certain ResKind.
Definition Solvable.cc:303
bool onSystemByAuto() const
Whether this is known to be automatically installed (as dependency of a user request package).
Definition Solvable.cc:385
std::string delnotify(const Locale &lang_r=Locale()) const
UI hint text when selecting the solvable for uninstall (opt.
Definition Solvable.cc:755
CapabilitySet valuesOfNamespace(const std::string &namespace_r) const
Return 'value[ op edition]' for namespaced provides 'namespace(value)[ op edition]'.
Definition Solvable.cc:565
IdString ident() const
The identifier.
Definition Solvable.cc:270
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
returns the CheckSum attribute value for attr or an empty CheckSum if ir does not exist.
Definition Solvable.cc:183
std::string description(const Locale &lang_r=Locale()) const
Long (multiline) text describing the solvable (opt.
Definition Solvable.cc:743
bool onSystemByUser() const
Whether this is known to be installed on behalf of a user request.
Definition Solvable.cc:380
RepoInfo repoInfo() const
The repositories RepoInfo.
Definition Solvable.cc:370
Repository repository() const
The Repository this Solvable belongs to.
Definition Solvable.cc:364
bool isPtf() const
Whether this solvable belongs to a PTF (provides ptfMasterToken or ptfPackageToken).
Definition Solvable.cc:415
sat::detail::SolvableIdType IdType
Definition Solvable.h:56
bool isRetracted() const
Whether this solvable is retracted (provides retractedToken).
Definition Solvable.cc:405
std::string insnotify(const Locale &lang_r=Locale()) const
UI hint text when selecting the solvable for install (opt.
Definition Solvable.cc:749
bool identical(const Solvable &rhs) const
Test whether two Solvables have the same content.
Definition Solvable.cc:468
String related utilities and Regular expression matching.
int IdType
Generic Id type.
Definition PoolMember.h:104
Libsolv interface
bool compareByNVR(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool operator!=(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool compareByNVRA(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
std::ostream & dumpOn(std::ostream &str, const LocaleSupport &obj)
bool operator<(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool compareByN(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool sameNVRA(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool identical(const SolvableType< Derived > &lhs, const Solvable &rhs)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool operator==(const Map &lhs, const Map &rhs)
Definition Map.cc:125
Easy-to use interface to the ZYPP dependency resolver.
std::unordered_set< Locale > LocaleSet
Definition Locale.h:29
std::unordered_set< Capability > CapabilitySet
Definition Capability.h:35
Enumeration class of dependency types.
Definition Dep.h:30
Base class for creating Solvable based types.
Capabilities suggests() const
bool operator==(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Equal.
Capabilities dep_recommends() const
std::string summary(const Locale &lang_r=Locale()) const
OnMediaLocation lookupLocation() const
Capabilities obsoletes() const
Capabilities provides() const
CapabilitySet valuesOfNamespace(const std::string &namespace_r) const
bool identical(const Solvable &rhs) const
Capabilities dep(Dep which_r) const
Solvable::IdType id() const
Capabilities dep_conflicts() const
std::string name() const
CheckSum lookupCheckSumAttribute(const SolvAttr &attr) const
bool onSystemByUser() const
bool isKind(const ResKind &kind_r) const
Capabilities dep_obsoletes() const
std::ostream & operator<<(std::ostream &str, const SolvableType< Derived > &obj)
Stream output.
bool supportsLocale(const Locale &locale_r) const
Capabilities supplements() const
bool isBlacklisted() const
std::string asUserString() const
int compareByN(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Compare according to kind and name.
bool identical(const SolvableType< RDerived > &rhs) const
std::string distribution() const
Capabilities dep_enhances() const
bool lookupBoolAttribute(const SolvAttr &attr) const
bool sameNVRA(const SolvableType< RDerived > &rhs) const
IdString vendor() const
Capabilities dep_provides() const
bool operator!=(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
NotEqual.
bool onSystemByAuto() const
SolvableType(SolvableType &&) noexcept=default
Capabilities dep_requires() const
bool isKind(TIterator begin, TIterator end) const
Capabilities prerequires() const
bool needToAcceptLicense() const
bool supportsRequestedLocales() const
std::string lookupStrAttribute(const SolvAttr &attr) const
RepoInfo repoInfo() const
int compareByNVRA(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Compare according to kind, name, edition and arch.
int compareByNVR(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Compare according to kind, name and edition.
Solvable satSolvable() const
Return the corresponding sat::Solvable.
std::string delnotify(const Locale &lang_r=Locale()) const
IdString ident() const
std::string asString() const
Capabilities conflicts() const
unsigned long long lookupNumAttribute(const SolvAttr &attr) const
ResKind kind() const
bool sameNVRA(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Test for same name version release and arch.
unsigned mediaNr() const
Capabilities dep_suggests() const
Capabilities enhances() const
bool isKind(const SolvableType< Derived > &solvable_r)
Test whether the Solvable is of a certain ResKind.
std::string lookupStrAttribute(const SolvAttr &attr, const Locale &lang_r) const
LocaleSet getSupportedLocales() const
ByteCount downloadSize() const
ByteCount installSize() const
bool isNeedreboot() const
bool supportsLocales() const
bool supportsLocale(const LocaleSet &locales_r) const
std::string licenseToConfirm(const Locale &lang_r=Locale()) const
Repository repository() const
bool sameNVRA(const Solvable &rhs) const
Edition edition() const
detail::IdType lookupIdAttribute(const SolvAttr &attr) const
unsigned long long lookupNumAttribute(const SolvAttr &attr, unsigned long long notfound_r) const
SolvableType & operator=(const SolvableType &)=default
std::string insnotify(const Locale &lang_r=Locale()) const
Capabilities dep_prerequires() const
CapabilitySet providesNamespace(const std::string &namespace_r) const
bool identical(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Test for same content.
Capabilities dep_supplements() const
SolvableType(const SolvableType &)=default
Capabilities recommends() const
bool multiversionInstall() const
bool isPtfPackage() const
std::ostream & dumpOn(std::ostream &str, const SolvableType< Derived > &obj)
More verbose stream output including dependencies.
bool operator<(const SolvableType< LDerived > &lhs, const SolvableType< RDerived > &rhs)
Less.
Capabilities operator[](Dep which_r) const
bool identIsAutoInstalled() const
std::string description(const Locale &lang_r=Locale()) const