libzypp
10.5.0
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 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 // CLASS NAME : Arch 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_armv7tnhl; 00227 extern const Arch Arch_armv7thl; 00229 extern const Arch Arch_armv7nhl; 00231 extern const Arch Arch_armv7hl; 00233 extern const Arch Arch_armv7l; 00235 extern const Arch Arch_armv6l; 00237 extern const Arch Arch_armv5tejl; 00239 extern const Arch Arch_armv5tel; 00241 extern const Arch Arch_armv5l; 00243 extern const Arch Arch_armv4tl; 00245 extern const Arch Arch_armv4l; 00247 extern const Arch Arch_armv3l; 00248 00250 extern const Arch Arch_sh3; 00251 00253 extern const Arch Arch_sh4; 00255 extern const Arch Arch_sh4a; 00257 00259 00261 inline std::ostream & operator<<( std::ostream & str, const Arch & obj ) 00262 { return str << obj.asString(); } 00263 00267 inline bool operator==( const Arch & lhs, const Arch & rhs ) 00268 { return lhs.asString() == rhs.asString(); } 00269 00271 inline bool operator==( const Arch & lhs, const std::string & rhs ) 00272 { return lhs.asString() == rhs; } 00273 00275 inline bool operator==( const std::string & lhs, const Arch & rhs ) 00276 { return lhs == rhs.asString(); } 00277 00279 inline bool operator!=( const Arch & lhs, const Arch & rhs ) 00280 { return !( lhs == rhs ); } 00281 00283 inline bool operator!=( const Arch & lhs, const std::string & rhs ) 00284 { return !( lhs == rhs ); } 00285 00287 inline bool operator!=( const std::string & lhs, const Arch & rhs ) 00288 { return !( lhs == rhs ); } 00290 00292 00296 struct ArchCompatibleWith : public std::unary_function<Arch,bool> 00297 { 00299 Arch _targetArch; 00301 ArchCompatibleWith( const Arch & targetArch_r ) 00302 : _targetArch( targetArch_r ) 00303 {} 00305 bool operator()( const Arch & rhs ) const 00306 { return rhs.compatibleWith( _targetArch ); } 00307 }; 00308 00310 } // namespace zypp 00312 00314 namespace std 00315 { 00316 00317 template<> 00318 inline bool less<zypp::Arch>::operator()( const zypp::Arch & lhs, const zypp::Arch & rhs ) const 00319 { return lhs.compare( rhs ) < 0; } 00321 } // namespace zypp 00323 #endif // ZYPP_ARCH_H