libzypp  17.31.13
Arch.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_ARCH_H
13 #define ZYPP_ARCH_H
14 
15 #include <iosfwd>
16 #include <functional>
17 #include <set>
18 #include <string>
19 
20 #include <zypp/base/String.h>
21 #include <zypp/base/Iterator.h>
22 
23 #include <zypp/IdStringType.h>
24 #include <zypp/RelCompare.h>
25 
27 namespace zypp
28 {
29 
31  //
32  // CLASS NAME : Arch
33  //
36  class Arch
37  {
38  public:
40  Arch();
41 
43  explicit Arch( IdString::IdType id_r );
44  explicit Arch( const IdString & idstr_r );
45  explicit Arch( const std::string & str_r );
46  explicit Arch( const char * cstr_r );
47 
48  public:
55  IdString idStr() const;
57  const std::string & asString() const;
59  const char * c_str() const
60  { return asString().c_str(); }
61 
63  bool empty() const
64  { return asString().empty(); }
65 
67  unsigned size() const
68  { return asString().size(); }
69 
72  { return idStr().id(); }
74 
75  public:
81  bool isBuiltIn() const;
82 
83  public:
92  bool compatibleWith( const Arch & targetArch_r ) const;
93 
98  Arch baseArch() const;
99 
101  static Arch baseArch( const Arch & targetArch_r )
102  { return targetArch_r.baseArch(); }
103 
109  int compare( const Arch & rhs ) const;
110 
112  static int compare( const Arch & lhs, const Arch & rhs )
113  { return lhs.compare( rhs ); }
114 
115  public:
117  typedef std::set<Arch,CompareByGT<Arch> > CompatSet;
118 
132  static CompatSet compatSet( const Arch & targetArch_r );
133 
135  static std::string asString( const CompatSet & cset )
136  {
137  return str::join( make_transform_iterator( cset.begin(), std::mem_fn(&Arch::asString) ),
138  make_transform_iterator( cset.end(), std::mem_fn(&Arch::asString) ) );
139  }
140 
141  public:
142  struct CompatEntry;
143  private:
144  Arch( const CompatEntry & );
146  };
148 
162  extern const Arch Arch_empty;
163 
165  extern const Arch Arch_noarch;
166 
168  extern const Arch Arch_pentium4;
170  extern const Arch Arch_pentium3;
171 
173  extern const Arch Arch_x86_64_v4;
175  extern const Arch Arch_x86_64_v3;
177  extern const Arch Arch_x86_64_v2;
179  extern const Arch Arch_x86_64;
181  extern const Arch Arch_athlon;
183  extern const Arch Arch_i686;
185  extern const Arch Arch_i586;
187  extern const Arch Arch_i486;
189  extern const Arch Arch_i386;
190 
192  extern const Arch Arch_s390x;
194  extern const Arch Arch_s390;
195 
197  extern const Arch Arch_ppc64le;
198 
200  extern const Arch Arch_ppc64p7;
202  extern const Arch Arch_ppc64;
204  extern const Arch Arch_ppc;
205 
207  extern const Arch Arch_ia64;
208 
210  extern const Arch Arch_alphaev67;
212  extern const Arch Arch_alphaev6;
214  extern const Arch Arch_alphapca56;
216  extern const Arch Arch_alphaev56;
218  extern const Arch Arch_alphaev5;
220  extern const Arch Arch_alpha;
221 
223  extern const Arch Arch_sparc64v;
225  extern const Arch Arch_sparc64;
227  extern const Arch Arch_sparcv9v;
229  extern const Arch Arch_sparcv9;
231  extern const Arch Arch_sparcv8;
233  extern const Arch Arch_sparc;
234 
236  extern const Arch Arch_aarch64;
237 
239  extern const Arch Arch_armv7tnhl; /* exists? */
241  extern const Arch Arch_armv7thl; /* exists? */
242 
244  extern const Arch Arch_armv7hnl, /* legacy: */Arch_armv7nhl;
246  extern const Arch Arch_armv7hl;
248  extern const Arch Arch_armv6hl;
249 
251  extern const Arch Arch_armv8hl;
253  extern const Arch Arch_armv8l;
255  extern const Arch Arch_armv7l;
257  extern const Arch Arch_armv6l;
259  extern const Arch Arch_armv5tejl;
261  extern const Arch Arch_armv5tel;
263  extern const Arch Arch_armv5tl;
265  extern const Arch Arch_armv5l;
267  extern const Arch Arch_armv4tl;
269  extern const Arch Arch_armv4l;
271  extern const Arch Arch_armv3l;
272 
274  extern const Arch Arch_riscv64;
275 
277  extern const Arch Arch_sh3;
278 
280  extern const Arch Arch_sh4;
282  extern const Arch Arch_sh4a;
283 
285  extern const Arch Arch_m68k;
286 
288  extern const Arch Arch_mips;
290  extern const Arch Arch_mipsel;
292  extern const Arch Arch_mips64;
294  extern const Arch Arch_mips64el;
296 
298 
300  inline std::ostream & operator<<( std::ostream & str, const Arch & obj )
301  { return str << obj.asString(); }
302 
304  inline std::ostream & dumpAsXmlOn( std::ostream & str, const Arch & obj )
305  { return str << "<arch>" << obj << "</arch>"; }
306 
310  inline bool operator==( const Arch & lhs, const Arch & rhs )
311  { return lhs.asString() == rhs.asString(); }
312 
314  inline bool operator==( const Arch & lhs, const std::string & rhs )
315  { return lhs.asString() == rhs; }
316 
318  inline bool operator==( const std::string & lhs, const Arch & rhs )
319  { return lhs == rhs.asString(); }
320 
322  inline bool operator!=( const Arch & lhs, const Arch & rhs )
323  { return !( lhs == rhs ); }
324 
326  inline bool operator!=( const Arch & lhs, const std::string & rhs )
327  { return !( lhs == rhs ); }
328 
330  inline bool operator!=( const std::string & lhs, const Arch & rhs )
331  { return !( lhs == rhs ); }
333 
335 
340  {
344  ArchCompatibleWith( const Arch & targetArch_r )
345  : _targetArch( targetArch_r )
346  {}
348  bool operator()( const Arch & rhs ) const
349  { return rhs.compatibleWith( _targetArch ); }
350  };
351 
353 } // namespace zypp
355 
357 namespace std
358 {
359 
360  template<>
361 #ifdef __clang__
362 constexpr
363 #endif
364  inline bool less<zypp::Arch>::operator()( const zypp::Arch & lhs, const zypp::Arch & rhs ) const
365  { return lhs.compare( rhs ) < 0; }
367 } // namespace zypp
369 #endif // ZYPP_ARCH_H
const Arch Arch_sh3
Definition: Arch.h:277
const Arch Arch_sparc64
Definition: Arch.h:225
const Arch Arch_armv3l
Definition: Arch.h:271
bool operator!=(const std::string &lhs, const Arch &rhs)
Definition: Arch.h:330
const Arch Arch_x86_64_v4
Definition: Arch.h:173
static int compare(const Arch &lhs, const Arch &rhs)
Arch comparison (static version).
Definition: Arch.h:112
unsigned size() const
Size of the string representation.
Definition: Arch.h:67
const Arch Arch_sh4
Definition: Arch.h:280
const Arch Arch_armv8l
Definition: Arch.h:253
const Arch Arch_armv5tejl
Definition: Arch.h:259
bool operator!=(const Arch &lhs, const Arch &rhs)
Definition: Arch.h:322
Architecture.
Definition: Arch.h:36
bool operator==(const std::string &lhs, const Arch &rhs)
Definition: Arch.h:318
std::string join(TIterator begin, TIterator end, const C_Str &sep_r=" ")
Join strings using separator sep_r (defaults to BLANK).
Definition: String.h:776
std::ostream & operator<<(std::ostream &str, const Arch &obj)
Definition: Arch.h:300
bool empty() const
Test for an empty Arch (this is Arch_epmty, not Arch_noarch ).
Definition: Arch.h:63
const Arch Arch_alpha
Definition: Arch.h:220
std::set< Arch, CompareByGT< Arch > > CompatSet
Reversed arch order, best Arch first.
Definition: Arch.h:117
IdType id() const
Expert backdoor.
Definition: IdString.h:122
const Arch Arch_mips
Definition: Arch.h:288
const Arch Arch_i386
Definition: Arch.h:189
const Arch Arch_athlon
Definition: Arch.h:181
const Arch Arch_alphaev67
Definition: Arch.h:210
String related utilities and Regular expression matching.
const Arch Arch_armv5l
Definition: Arch.h:265
Definition: Arch.h:357
Access to the sat-pools string space.
Definition: IdString.h:42
const Arch Arch_s390x
Definition: Arch.h:192
const Arch Arch_pentium3
Definition: Arch.h:170
int compare(const Arch &rhs) const
Arch comparison.
Definition: Arch.cc:556
const Arch Arch_empty
Definition: Arch.h:162
bool compatibleWith(const Arch &targetArch_r) const
Compatibility relation.
Definition: Arch.cc:511
const Arch Arch_ppc64le
Definition: Arch.h:197
const Arch Arch_ppc
Definition: Arch.h:204
const Arch Arch_armv8hl
Definition: Arch.h:251
bool operator==(const Arch &lhs, const Arch &rhs)
Definition: Arch.h:310
const char * c_str() const
Definition: Arch.h:59
const Arch Arch_sparcv9v
Definition: Arch.h:227
const Arch Arch_armv6hl
Definition: Arch.h:248
const Arch Arch_aarch64
Definition: Arch.h:236
const CompatEntry * _entry
Definition: Arch.h:145
static std::string asString(const CompatSet &cset)
Definition: Arch.h:135
const Arch Arch_armv7tnhl
Definition: Arch.h:239
bool operator==(const Arch &lhs, const std::string &rhs)
Definition: Arch.h:314
const Arch Arch_alphaev5
Definition: Arch.h:218
const Arch Arch_alphaev56
Definition: Arch.h:216
const Arch Arch_noarch
Definition: Arch.h:165
const Arch Arch_sh4a
Definition: Arch.h:282
sat::detail::IdType IdType
Definition: IdString.h:45
const Arch Arch_armv7thl
Definition: Arch.h:241
const Arch Arch_mips64
Definition: Arch.h:292
const Arch Arch_mipsel
Definition: Arch.h:290
Arch baseArch() const
Definition: Arch.cc:519
const Arch Arch_sparc
Definition: Arch.h:233
const Arch Arch_armv7l
Definition: Arch.h:255
const Arch Arch_i486
Definition: Arch.h:187
const Arch Arch_s390
Definition: Arch.h:194
const Arch Arch_m68k
Definition: Arch.h:285
const Arch Arch_sparcv9
Definition: Arch.h:229
IdString::IdType id() const
Expert backdoor.
Definition: Arch.h:71
static CompatSet compatSet(const Arch &targetArch_r)
Return a set of all Arch&#39;s compatibleWith a targetArch_r.
Definition: Arch.cc:564
bool operator!=(const Arch &lhs, const std::string &rhs)
Definition: Arch.h:326
const Arch Arch_armv5tl
Definition: Arch.h:263
const Arch Arch_x86_64
Definition: Arch.h:179
const Arch Arch_ppc64p7
Definition: Arch.h:200
const Arch Arch_armv7nhl
const Arch Arch_riscv64
Definition: Arch.h:274
const Arch Arch_x86_64_v2
Definition: Arch.h:177
const Arch Arch_alphaev6
Definition: Arch.h:212
const Arch Arch_x86_64_v3
Definition: Arch.h:175
const Arch Arch_ppc64
Definition: Arch.h:202
static Arch baseArch(const Arch &targetArch_r)
Definition: Arch.h:101
const Arch Arch_sparc64v
Definition: Arch.h:223
ArchCompatibleWith(const Arch &targetArch_r)
Ctor taking the target architecture.
Definition: Arch.h:344
const Arch Arch_armv4tl
Definition: Arch.h:267
IdString idStr() const
String representation of Arch.
Definition: Arch.cc:487
const Arch Arch_armv4l
Definition: Arch.h:269
Arch()
Default ctor Arc_noarch.
Definition: Arch.cc:458
const Arch Arch_pentium4
Definition: Arch.h:168
const Arch Arch_sparcv8
Definition: Arch.h:231
const Arch Arch_alphapca56
Definition: Arch.h:214
const Arch Arch_armv7hl
Definition: Arch.h:246
const Arch Arch_armv5tel
Definition: Arch.h:261
bool isBuiltIn() const
Whether this is a buitin (or known) architecture.
Definition: Arch.cc:503
Arch _targetArch
The target architecture.
Definition: Arch.h:342
const std::string & asString() const
Definition: Arch.cc:495
const Arch Arch_armv6l
Definition: Arch.h:257
bool operator()(const Arch &rhs) const
Call Arch::compatibleWith ( _targetArch ) on rhs.
Definition: Arch.h:348
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
const Arch Arch_i586
Definition: Arch.h:185
const Arch Arch_mips64el
Definition: Arch.h:294
const Arch Arch_i686
Definition: Arch.h:183
std::ostream & dumpAsXmlOn(std::ostream &str, const Arch &obj)
Definition: Arch.h:304
const Arch Arch_armv7hnl
Definition: Arch.h:244
Functor finding compatible architectures.
Definition: Arch.h:339
Holds an architecture ID and its compatible relation.
Definition: Arch.cc:38
const Arch Arch_ia64
Definition: Arch.h:207