libzypp  13.10.6
Edition.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_EDITION_H
13 #define ZYPP_EDITION_H
14 
15 #include <iosfwd>
16 #include <string>
17 #include <functional>
18 
19 #include "zypp/IdStringType.h"
20 #include "zypp/RelCompare.h"
21 #include "zypp/Range.h"
22 
24 namespace zypp
25 {
26 
28  //
29  // CLASS NAME : Edition
30  //
60  class Edition : public IdStringType<Edition>
61  {
62  public:
64  typedef unsigned epoch_t;
65 
67  static const epoch_t noepoch = 0;
68 
73  static const Edition noedition;
74 
75  public:
77  Edition() {}
78 
80  explicit Edition( IdString::IdType id_r ) : _str( id_r ) {}
81  explicit Edition( const IdString & idstr_r ) : _str( idstr_r ) {}
82  explicit Edition( const std::string & str_r ) : _str( str_r ) {}
83  explicit Edition( const char * cstr_r ) : _str( cstr_r ) {}
84 
86  Edition( const std::string & version_r,
87  const std::string & release_r,
88  epoch_t epoch_r = noepoch );
90  Edition( const char * version_r,
91  const char * release_r,
92  epoch_t epoch_r = noepoch );
93 
95  Edition( const std::string & version_r,
96  const std::string & release_r,
97  const std::string & epoch_r );
99  Edition( const char * version_r,
100  const char * release_r,
101  const char * epoch_r );
102 
103  public:
105  epoch_t epoch() const;
106 
108  std::string version() const;
109 
111  std::string release() const;
112 
113  public:
118 
123 
124  public:
130  static int match( const Edition & lhs, const Edition & rhs ) { return match( lhs.idStr(), rhs.idStr() ); }
131  static int match( const Edition & lhs, const IdString & rhs ) { return match( lhs.idStr(), rhs ); }
132  static int match( const Edition & lhs, const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
133  static int match( const Edition & lhs, const char * rhs ) { return _doMatch( lhs.c_str(), rhs );}
134 
135  static int match( const IdString & lhs, const Edition & rhs ) { return match( lhs, rhs.idStr() ); }
136  static int match( const IdString & lhs, const IdString & rhs ) { return lhs.compareEQ( rhs ) ? 0 :
137  _doMatch( lhs.c_str(), rhs.c_str() ); }
138  static int match( const IdString & lhs, const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
139  static int match( const IdString & lhs, const char * rhs ) { return _doMatch( lhs.c_str(), rhs ); }
140 
141  static int match( const std::string & lhs, const Edition & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() );}
142  static int match( const std::string & lhs, const IdString & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
143  static int match( const std::string & lhs, const std::string & rhs ) { return _doMatch( lhs.c_str(), rhs.c_str() ); }
144  static int match( const std::string & lhs, const char * rhs ) { return _doMatch( lhs.c_str(), rhs ); }
145 
146  static int match( const char * lhs, const Edition & rhs ) { return _doMatch( lhs, rhs.c_str() );}
147  static int match( const char * lhs, const IdString & rhs ) { return _doMatch( lhs, rhs.c_str() ); }
148  static int match( const char * lhs, const std::string & rhs ) { return _doMatch( lhs, rhs.c_str() ); }
149  static int match( const char * lhs, const char * rhs ) { return _doMatch( lhs, rhs ); }
150 
151  int match( const Edition & rhs ) const { return match( idStr(), rhs.idStr() ); }
152  int match( const IdString & rhs ) const { return match( idStr(), rhs ); }
153  int match( const std::string & rhs ) const { return _doMatch( c_str(), rhs.c_str() ); }
154  int match( const char * rhs ) const { return _doMatch( c_str(), rhs ); }
156 
160  struct Match: public std::binary_function<Edition,Edition,int>
161  {
162  int operator()( const Edition & lhs, const Edition & rhs ) const
163  { return Edition::match( lhs, rhs ); }
164  };
165 
170 
171  private:
172  static int _doCompare( const char * lhs, const char * rhs );
173  static int _doMatch( const char * lhs, const char * rhs );
174 
175  private:
176  friend class IdStringType<Edition>;
178  };
180 
182  inline std::ostream & dumpAsXmlOn( std::ostream & str, const Edition & obj )
183  { return str << "<edition"
184  << " epoch=\"" << obj.epoch() << "\""
185  << " version=\"" << obj.version() << "\""
186  << " release=\"" << obj.release() << "\""
187  << "/>";
188  }
189 
191 } // namespace zypp
193 #endif // ZYPP_EDITION_H
static const epoch_t noepoch
Value representing noepoch.
Definition: Edition.h:67
zypp::Compare< Edition > Compare
compare functor.
Definition: Edition.h:117
static int _doMatch(const char *lhs, const char *rhs)
Definition: Edition.cc:127
int match(const std::string &rhs) const
Definition: Edition.h:153
static int match(const char *lhs, const Edition &rhs)
Definition: Edition.h:146
std::string release() const
Release.
Definition: Edition.cc:110
static int match(const char *lhs, const char *rhs)
Definition: Edition.h:149
static int match(const std::string &lhs, const IdString &rhs)
Definition: Edition.h:142
Range< Edition > CompareRange
Edition Range based on Compare.
Definition: Edition.h:122
Access to the sat-pools string space.
Definition: IdString.h:39
int match(const char *rhs) const
Definition: Edition.h:154
Edition represents [epoch:]version[-release]
Definition: Edition.h:60
static int match(const Edition &lhs, const IdString &rhs)
Definition: Edition.h:131
int match(const IdString &rhs) const
Definition: Edition.h:152
static int match(const IdString &lhs, const std::string &rhs)
Definition: Edition.h:138
unsigned epoch_t
Type of an epoch.
Definition: Edition.h:64
Base class for creating IdString based types.
Definition: IdStringType.h:86
Edition(const IdString &idstr_r)
Definition: Edition.h:81
static int _doCompare(const char *lhs, const char *rhs)
Definition: Edition.cc:120
Edition(const char *cstr_r)
Definition: Edition.h:83
match functor.
Definition: Edition.h:160
sat::detail::IdType IdType
Definition: IdString.h:42
static int match(const char *lhs, const std::string &rhs)
Definition: Edition.h:148
Edition()
Default ctor: noedition.
Definition: Edition.h:77
static int match(const IdString &lhs, const IdString &rhs)
Definition: Edition.h:136
static int match(const Edition &lhs, const Edition &rhs)
Definition: Edition.h:130
bool compareEQ(const IdString &rhs) const
Fast compare equal.
Definition: IdString.h:88
epoch_t epoch() const
Epoch.
Definition: Edition.cc:82
std::string version() const
Version.
Definition: Edition.cc:94
Range< Edition, Match > MatchRange
Edition Range based on Match.
Definition: Edition.h:169
IdString _str
Definition: Edition.h:177
int operator()(const Edition &lhs, const Edition &rhs) const
Definition: Edition.h:162
General compare functor returning -1, 0, 1.
Definition: RelCompare.h:86
const char * c_str() const
Conversion to const char *
Definition: IdString.cc:42
const char * c_str() const
Definition: IdStringType.h:105
Edition(IdString::IdType id_r)
Ctor taking edition as string.
Definition: Edition.h:80
Edition(const std::string &str_r)
Definition: Edition.h:82
std::ostream & dumpAsXmlOn(std::ostream &str, const Edition &obj)
Definition: Edition.h:182
static int match(const char *lhs, const IdString &rhs)
Definition: Edition.h:147
static int match(const IdString &lhs, const Edition &rhs)
Definition: Edition.h:135
int match(const Edition &rhs) const
Definition: Edition.h:151
static int match(const Edition &lhs, const std::string &rhs)
Definition: Edition.h:132
static int match(const std::string &lhs, const char *rhs)
Definition: Edition.h:144
static int match(const IdString &lhs, const char *rhs)
Definition: Edition.h:139
static int match(const std::string &lhs, const Edition &rhs)
Definition: Edition.h:141
static int match(const std::string &lhs, const std::string &rhs)
Definition: Edition.h:143
const IdString & idStr() const
Definition: IdStringType.h:101
static int match(const Edition &lhs, const char *rhs)
Definition: Edition.h:133
static const Edition noedition
Value representing noedition (&quot;&quot;) This is in fact a valid Edition.
Definition: Edition.h:73