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 
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_sparcv9v;
00206   extern const Arch Arch_sparc64;
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 } // namespace zypp
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 } // namespace zypp
00305 #endif // ZYPP_ARCH_H

doxygen