libzypp  12.16.5
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_fun_ref(&Arch::asString) ),
138  make_transform_iterator( cset.end(), std::mem_fun_ref(&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;
175  extern const Arch Arch_athlon;
177  extern const Arch Arch_i686;
179  extern const Arch Arch_i586;
181  extern const Arch Arch_i486;
183  extern const Arch Arch_i386;
184 
186  extern const Arch Arch_s390x;
188  extern const Arch Arch_s390;
189 
191  extern const Arch Arch_ppc64;
193  extern const Arch Arch_ppc;
194 
196  extern const Arch Arch_ia64;
197 
199  extern const Arch Arch_alphaev67;
201  extern const Arch Arch_alphaev6;
203  extern const Arch Arch_alphapca56;
205  extern const Arch Arch_alphaev56;
207  extern const Arch Arch_alphaev5;
209  extern const Arch Arch_alpha;
210 
212  extern const Arch Arch_sparc64v;
214  extern const Arch Arch_sparc64;
216  extern const Arch Arch_sparcv9v;
218  extern const Arch Arch_sparcv9;
220  extern const Arch Arch_sparcv8;
222  extern const Arch Arch_sparc;
223 
225  extern const Arch Arch_aarch64;
227  extern const Arch Arch_armv7tnhl;
229  extern const Arch Arch_armv7thl;
231  extern const Arch Arch_armv7nhl;
233  extern const Arch Arch_armv7hl;
235  extern const Arch Arch_armv7l;
237  extern const Arch Arch_armv6l;
239  extern const Arch Arch_armv5tejl;
241  extern const Arch Arch_armv5tel;
243  extern const Arch Arch_armv5l;
245  extern const Arch Arch_armv4tl;
247  extern const Arch Arch_armv4l;
249  extern const Arch Arch_armv3l;
250 
252  extern const Arch Arch_sh3;
253 
255  extern const Arch Arch_sh4;
257  extern const Arch Arch_sh4a;
259 
261 
263  inline std::ostream & operator<<( std::ostream & str, const Arch & obj )
264  { return str << obj.asString(); }
265 
269  inline bool operator==( const Arch & lhs, const Arch & rhs )
270  { return lhs.asString() == rhs.asString(); }
271 
273  inline bool operator==( const Arch & lhs, const std::string & rhs )
274  { return lhs.asString() == rhs; }
275 
277  inline bool operator==( const std::string & lhs, const Arch & rhs )
278  { return lhs == rhs.asString(); }
279 
281  inline bool operator!=( const Arch & lhs, const Arch & rhs )
282  { return !( lhs == rhs ); }
283 
285  inline bool operator!=( const Arch & lhs, const std::string & rhs )
286  { return !( lhs == rhs ); }
287 
289  inline bool operator!=( const std::string & lhs, const Arch & rhs )
290  { return !( lhs == rhs ); }
292 
294 
298  struct ArchCompatibleWith : public std::unary_function<Arch,bool>
299  {
303  ArchCompatibleWith( const Arch & targetArch_r )
304  : _targetArch( targetArch_r )
305  {}
307  bool operator()( const Arch & rhs ) const
308  { return rhs.compatibleWith( _targetArch ); }
309  };
310 
312 } // namespace zypp
314 
316 namespace std
317 {
318 
319  template<>
320  inline bool less<zypp::Arch>::operator()( const zypp::Arch & lhs, const zypp::Arch & rhs ) const
321  { return lhs.compare( rhs ) < 0; }
323 } // namespace zypp
325 #endif // ZYPP_ARCH_H