Edition.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00012 #ifndef ZYPP_EDITION_H
00013 #define ZYPP_EDITION_H
00014 
00015 #include <iosfwd>
00016 #include <string>
00017 #include <functional>
00018 
00019 #include "zypp/IdStringType.h"
00020 #include "zypp/RelCompare.h"
00021 #include "zypp/Range.h"
00022 
00024 namespace zypp
00025 { 
00026 
00028   //
00029   //    CLASS NAME : Edition
00030   //
00060   class Edition : public IdStringType<Edition>
00061   {
00062     public:
00064       typedef unsigned epoch_t;
00065 
00067       static const epoch_t noepoch = 0;
00068 
00073       static const Edition noedition;
00074 
00075     public:
00077       Edition() {}
00078 
00080       explicit Edition( IdString::IdType id_r )     : _str( id_r ) {}
00081       explicit Edition( const IdString & idstr_r )  : _str( idstr_r ) {}
00082       explicit Edition( const std::string & str_r ) : _str( str_r ) {}
00083       explicit Edition( const char * cstr_r )       : _str( cstr_r ) {}
00084 
00086       Edition( const std::string & version_r,
00087                const std::string & release_r,
00088                epoch_t epoch_r = noepoch );
00090       Edition( const char * version_r,
00091                const char * release_r,
00092                epoch_t epoch_r = noepoch );
00093 
00095       Edition( const std::string & version_r,
00096                const std::string & release_r,
00097                const std::string & epoch_r );
00099       Edition( const char * version_r,
00100                const char * release_r,
00101                const char * epoch_r );
00102 
00103     public:
00105       epoch_t epoch() const;
00106 
00108       std::string version() const;
00109 
00111       std::string release() const;
00112 
00113     public:
00117       typedef zypp::Compare<Edition> Compare;
00118 
00122       typedef Range<Edition> CompareRange;
00123 
00124     public:
00130       static int match( const Edition & lhs,     const Edition & rhs )     { return match( lhs.idStr(), rhs.idStr() ); }
00131       static int match( const Edition & lhs,     const IdString & rhs )    { return match( lhs.idStr(), rhs ); }
00132       static int match( const Edition & lhs,     const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
00133       static int match( const Edition & lhs,     const char * rhs )        { return _doMatch( lhs.c_str(), rhs );}
00134 
00135       static int match( const IdString & lhs,    const Edition & rhs )     { return match( lhs, rhs.idStr() ); }
00136       static int match( const IdString & lhs,    const IdString & rhs )    { return lhs.compareEQ( rhs ) ? 0 :
00137                                                                                     _doMatch( lhs.c_str(), rhs.c_str() ); }
00138       static int match( const IdString & lhs,    const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
00139       static int match( const IdString & lhs,    const char * rhs )        { return _doMatch( lhs.c_str(), rhs ); }
00140 
00141       static int match( const std::string & lhs, const Edition & rhs )     { return _doMatch( lhs.c_str(), rhs.c_str() );}
00142       static int match( const std::string & lhs, const IdString & rhs )    { return _doMatch( lhs.c_str(), rhs.c_str() ); }
00143       static int match( const std::string & lhs, const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
00144       static int match( const std::string & lhs, const char * rhs )        { return _doMatch( lhs.c_str(), rhs ); }
00145 
00146       static int match( const char * lhs,        const Edition & rhs )     { return _doMatch( lhs, rhs.c_str() );}
00147       static int match( const char * lhs,        const IdString & rhs )    { return _doMatch( lhs, rhs.c_str() ); }
00148       static int match( const char * lhs,        const std::string & rhs ) { return _doMatch( lhs, rhs.c_str() ); }
00149       static int match( const char * lhs,        const char * rhs )        { return _doMatch( lhs, rhs ); }
00150 
00151       int match( const Edition & rhs )     const { return match( idStr(), rhs.idStr() ); }
00152       int match( const IdString & rhs )    const { return match( idStr(), rhs ); }
00153       int match( const std::string & rhs ) const { return _doMatch( c_str(), rhs.c_str() ); }
00154       int match( const char * rhs )        const { return _doMatch( c_str(), rhs ); }
00156 
00160       struct Match: public std::binary_function<Edition,Edition,int>
00161       {
00162         int operator()( const Edition & lhs, const Edition & rhs ) const
00163         { return Edition::match( lhs, rhs ); }
00164       };
00165 
00169       typedef Range<Edition, Match> MatchRange;
00170 
00171     private:
00172       static int _doCompare( const char * lhs,  const char * rhs );
00173       static int _doMatch( const char * lhs,  const char * rhs );
00174 
00175     private:
00176       friend class IdStringType<Edition>;
00177       IdString _str;
00178   };
00180 
00182 } // namespace zypp
00184 #endif // ZYPP_EDITION_H

doxygen