Arch.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00012 #ifndef ZYPP_ARCH_H
00013 #define ZYPP_ARCH_H
00014
00015 #include <iosfwd>
00016 #include <functional>
00017 #include <set>
00018 #include <string>
00019
00020 #include "zypp/base/String.h"
00021 #include "zypp/base/Iterator.h"
00022
00023 #include "zypp/IdStringType.h"
00024 #include "zypp/RelCompare.h"
00025
00027 namespace zypp
00028 {
00029
00031
00032
00033
00036 class Arch
00037 {
00038 public:
00040 Arch();
00041
00043 explicit Arch( IdString::IdType id_r );
00044 explicit Arch( const IdString & idstr_r );
00045 explicit Arch( const std::string & str_r );
00046 explicit Arch( const char * cstr_r );
00047
00048 public:
00055 IdString idStr() const;
00057 const std::string & asString() const;
00059 const char * c_str() const
00060 { return asString().c_str(); }
00061
00063 bool empty() const
00064 { return asString().empty(); }
00065
00067 unsigned size() const
00068 { return asString().size(); }
00069
00071 IdString::IdType id() const
00072 { return idStr().id(); }
00074
00075 public:
00081 bool isBuiltIn() const;
00082
00083 public:
00092 bool compatibleWith( const Arch & targetArch_r ) const;
00093
00098 Arch baseArch() const;
00099
00101 static Arch baseArch( const Arch & targetArch_r )
00102 { return targetArch_r.baseArch(); }
00103
00109 int compare( const Arch & rhs ) const;
00110
00112 static int compare( const Arch & lhs, const Arch & rhs )
00113 { return lhs.compare( rhs ); }
00114
00115 public:
00117 typedef std::set<Arch,CompareByGT<Arch> > CompatSet;
00118
00132 static CompatSet compatSet( const Arch & targetArch_r );
00133
00135 static std::string asString( const CompatSet & cset )
00136 {
00137 return str::join( make_transform_iterator( cset.begin(), std::mem_fun_ref(&Arch::asString) ),
00138 make_transform_iterator( cset.end(), std::mem_fun_ref(&Arch::asString) ) );
00139 }
00140
00141 public:
00142 struct CompatEntry;
00143 private:
00144 Arch( const CompatEntry & );
00145 const CompatEntry * _entry;
00146 };
00148
00162 extern const Arch Arch_empty;
00163
00165 extern const Arch Arch_noarch;
00166
00168 extern const Arch Arch_pentium4;
00170 extern const Arch Arch_pentium3;
00171
00173 extern const Arch Arch_x86_64;
00175 extern const Arch Arch_athlon;
00177 extern const Arch Arch_i686;
00179 extern const Arch Arch_i586;
00181 extern const Arch Arch_i486;
00183 extern const Arch Arch_i386;
00184
00186 extern const Arch Arch_s390x;
00188 extern const Arch Arch_s390;
00189
00191 extern const Arch Arch_ppc64;
00193 extern const Arch Arch_ppc;
00194
00196 extern const Arch Arch_ia64;
00197
00199 extern const Arch Arch_alphaev67;
00201 extern const Arch Arch_alphaev6;
00203 extern const Arch Arch_alphapca56;
00205 extern const Arch Arch_alphaev56;
00207 extern const Arch Arch_alphaev5;
00209 extern const Arch Arch_alpha;
00210
00212 extern const Arch Arch_sparc64v;
00214 extern const Arch Arch_sparc64;
00216 extern const Arch Arch_sparcv9v;
00218 extern const Arch Arch_sparcv9;
00220 extern const Arch Arch_sparcv8;
00222 extern const Arch Arch_sparc;
00223
00225 extern const Arch Arch_armv7nhl;
00227 extern const Arch Arch_armv7hl;
00229 extern const Arch Arch_armv7l;
00231 extern const Arch Arch_armv6l;
00233 extern const Arch Arch_armv5tejl;
00235 extern const Arch Arch_armv5tel;
00237 extern const Arch Arch_armv5l;
00239 extern const Arch Arch_armv4tl;
00241 extern const Arch Arch_armv4l;
00243 extern const Arch Arch_armv3l;
00244
00246 extern const Arch Arch_sh3;
00247
00249 extern const Arch Arch_sh4;
00251 extern const Arch Arch_sh4a;
00253
00255
00257 inline std::ostream & operator<<( std::ostream & str, const Arch & obj )
00258 { return str << obj.asString(); }
00259
00263 inline bool operator==( const Arch & lhs, const Arch & rhs )
00264 { return lhs.asString() == rhs.asString(); }
00265
00267 inline bool operator==( const Arch & lhs, const std::string & rhs )
00268 { return lhs.asString() == rhs; }
00269
00271 inline bool operator==( const std::string & lhs, const Arch & rhs )
00272 { return lhs == rhs.asString(); }
00273
00275 inline bool operator!=( const Arch & lhs, const Arch & rhs )
00276 { return !( lhs == rhs ); }
00277
00279 inline bool operator!=( const Arch & lhs, const std::string & rhs )
00280 { return !( lhs == rhs ); }
00281
00283 inline bool operator!=( const std::string & lhs, const Arch & rhs )
00284 { return !( lhs == rhs ); }
00286
00288
00292 struct ArchCompatibleWith : public std::unary_function<Arch,bool>
00293 {
00295 Arch _targetArch;
00297 ArchCompatibleWith( const Arch & targetArch_r )
00298 : _targetArch( targetArch_r )
00299 {}
00301 bool operator()( const Arch & rhs ) const
00302 { return rhs.compatibleWith( _targetArch ); }
00303 };
00304
00306 }
00308
00310 namespace std
00311 {
00312
00313 template<>
00314 inline bool less<zypp::Arch>::operator()( const zypp::Arch & lhs, const zypp::Arch & rhs ) const
00315 { return lhs.compare( rhs ) < 0; }
00317 }
00319 #endif // ZYPP_ARCH_H