libzypp  10.5.0
Arch.h
Go to the documentation of this file.
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