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
00099 int compare( const Arch & rhs ) const;
00100
00102 static int compare( const Arch & lhs, const Arch & rhs )
00103 { return lhs.compare( rhs ); }
00104
00105 public:
00107 typedef std::set<Arch,CompareByGT<Arch> > CompatSet;
00108
00122 static CompatSet compatSet( const Arch & targetArch_r );
00123
00125 static std::string asString( const CompatSet & cset )
00126 {
00127 return str::join( make_transform_iterator( cset.begin(), std::mem_fun_ref(&Arch::asString) ),
00128 make_transform_iterator( cset.end(), std::mem_fun_ref(&Arch::asString) ) );
00129 }
00130
00131 public:
00132 struct CompatEntry;
00133 private:
00134 Arch( const CompatEntry & );
00135 const CompatEntry * _entry;
00136 };
00138
00152 extern const Arch Arch_empty;
00153
00155 extern const Arch Arch_noarch;
00156
00158 extern const Arch Arch_pentium4;
00160 extern const Arch Arch_pentium3;
00161
00163 extern const Arch Arch_x86_64;
00165 extern const Arch Arch_athlon;
00167 extern const Arch Arch_i686;
00169 extern const Arch Arch_i586;
00171 extern const Arch Arch_i486;
00173 extern const Arch Arch_i386;
00174
00176 extern const Arch Arch_s390x;
00178 extern const Arch Arch_s390;
00179
00181 extern const Arch Arch_ppc64;
00183 extern const Arch Arch_ppc;
00184
00186 extern const Arch Arch_ia64;
00187
00189 extern const Arch Arch_alphaev67;
00191 extern const Arch Arch_alphaev6;
00193 extern const Arch Arch_alphapca56;
00195 extern const Arch Arch_alphaev56;
00197 extern const Arch Arch_alphaev5;
00199 extern const Arch Arch_alpha;
00200
00202 extern const Arch Arch_sparc64v;
00204 extern const Arch Arch_sparc64;
00206 extern const Arch Arch_sparcv9v;
00208 extern const Arch Arch_sparcv9;
00210 extern const Arch Arch_sparcv8;
00212 extern const Arch Arch_sparc;
00213
00215 extern const Arch Arch_armv7l;
00217 extern const Arch Arch_armv6l;
00219 extern const Arch Arch_armv5tejl;
00221 extern const Arch Arch_armv5tel;
00223 extern const Arch Arch_armv5l;
00225 extern const Arch Arch_armv4tl;
00227 extern const Arch Arch_armv4l;
00229 extern const Arch Arch_armv3l;
00230
00232 extern const Arch Arch_sh3;
00233
00235 extern const Arch Arch_sh4;
00237 extern const Arch Arch_sh4a;
00239
00241
00243 inline std::ostream & operator<<( std::ostream & str, const Arch & obj )
00244 { return str << obj.asString(); }
00245
00249 inline bool operator==( const Arch & lhs, const Arch & rhs )
00250 { return lhs.asString() == rhs.asString(); }
00251
00253 inline bool operator==( const Arch & lhs, const std::string & rhs )
00254 { return lhs.asString() == rhs; }
00255
00257 inline bool operator==( const std::string & lhs, const Arch & rhs )
00258 { return lhs == rhs.asString(); }
00259
00261 inline bool operator!=( const Arch & lhs, const Arch & rhs )
00262 { return !( lhs == rhs ); }
00263
00265 inline bool operator!=( const Arch & lhs, const std::string & rhs )
00266 { return !( lhs == rhs ); }
00267
00269 inline bool operator!=( const std::string & lhs, const Arch & rhs )
00270 { return !( lhs == rhs ); }
00272
00274
00278 struct ArchCompatibleWith : public std::unary_function<Arch,bool>
00279 {
00281 Arch _targetArch;
00283 ArchCompatibleWith( const Arch & targetArch_r )
00284 : _targetArch( targetArch_r )
00285 {}
00287 bool operator()( const Arch & rhs ) const
00288 { return rhs.compatibleWith( _targetArch ); }
00289 };
00290
00292 }
00294
00296 namespace std
00297 {
00298
00299 template<>
00300 inline bool less<zypp::Arch>::operator()( const zypp::Arch & lhs, const zypp::Arch & rhs ) const
00301 { return lhs.compare( rhs ) < 0; }
00303 }
00305 #endif // ZYPP_ARCH_H