libzypp  13.10.6
IdStringType.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_IDSTRINGTYPE_H
13 #define ZYPP_IDSTRINGTYPE_H
14 
15 #include "zypp/IdString.h"
16 
18 namespace zypp
19 {
20 
22  //
23  // CLASS NAME : IdStringType<Derived>
24  //
85  template <class Derived>
87  {
88  public:
90 
91  protected:
94  void operator=(const IdStringType &) {}
96 
97  private:
98  const Derived & self() const { return *static_cast<const Derived*>( this ); }
99 
100  public:
101  const IdString & idStr() const { return self()._str; }
102 
103  bool empty() const { return idStr().empty(); }
104  unsigned size() const { return idStr().size(); }
105  const char * c_str() const { return idStr().c_str(); }
106  std::string asString() const { return idStr().asString(); }
107 
108  IdType id() const { return idStr().id(); }
109 
110  public:
112  explicit operator bool() const
113  { return ! empty(); }
114 
115  public:
116  // - break it down to idString/const char* <=> idString/cont char*
117  // - handle idString(0)/NULL being the least value
118  // - everything else goes to _doCompare (no NULL)
119  static int compare( const Derived & lhs, const Derived & rhs ) { return compare( lhs.idStr(), rhs.idStr() ); }
120  static int compare( const Derived & lhs, const IdString & rhs ) { return compare( lhs.idStr(), rhs ); }
121  static int compare( const Derived & lhs, const std::string & rhs ) { return compare( lhs.idStr(), rhs.c_str() ); }
122  static int compare( const Derived & lhs, const char * rhs ) { return compare( lhs.idStr(), rhs );}
123 
124  static int compare( const IdString & lhs, const Derived & rhs ) { return compare( lhs, rhs.idStr() ); }
125  static int compare( const IdString & lhs, const IdString & rhs ) { return lhs == rhs ? 0 : Derived::_doCompare( (lhs ? lhs.c_str() : (const char *)0 ),
126  (rhs ? rhs.c_str() : (const char *)0 ) ); }
127  static int compare( const IdString & lhs, const std::string & rhs ) { return compare( lhs, rhs.c_str() ); }
128  static int compare( const IdString & lhs, const char * rhs ) { return Derived::_doCompare( (lhs ? lhs.c_str() : (const char *)0 ), rhs ); }
129 
130  static int compare( const std::string & lhs, const Derived & rhs ) { return compare( lhs.c_str(), rhs.idStr() ); }
131  static int compare( const std::string & lhs, const IdString & rhs ) { return compare( lhs.c_str(), rhs ); }
132  static int compare( const std::string & lhs, const std::string & rhs ) { return compare( lhs.c_str(), rhs.c_str() ); }
133  static int compare( const std::string & lhs, const char * rhs ) { return compare( lhs.c_str(), rhs ); }
134 
135  static int compare( const char * lhs, const Derived & rhs ) { return compare( lhs, rhs.idStr() ); }
136  static int compare( const char * lhs, const IdString & rhs ) { return Derived::_doCompare( lhs, (rhs ? rhs.c_str() : (const char *)0 ) ); }
137  static int compare( const char * lhs, const std::string & rhs ) { return compare( lhs, rhs.c_str() ); }
138  static int compare( const char * lhs, const char * rhs ) { return Derived::_doCompare( lhs, rhs ); }
139 
140  public:
141  int compare( const Derived & rhs ) const { return compare( idStr(), rhs.idStr() ); }
142  int compare( const IdStringType & rhs ) const { return compare( idStr(), rhs.idStr() ); }
143  int compare( const IdString & rhs ) const { return compare( idStr(), rhs ); }
144  int compare( const std::string & rhs ) const { return compare( idStr(), rhs.c_str() ); }
145  int compare( const char * rhs ) const { return compare( idStr(), rhs ); }
146 
147  private:
148  static int _doCompare( const char * lhs, const char * rhs )
149  {
150  if ( ! lhs ) return rhs ? -1 : 0;
151  return rhs ? ::strcmp( lhs, rhs ) : 1;
152  }
153  };
155 
157  template <class Derived>
158  inline std::ostream & operator<<( std::ostream & str, const IdStringType<Derived> & obj )
159  { return str << obj.c_str(); }
160 
162  template <class Derived>
163  inline bool operator==( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
164  { return lhs.compare( rhs ) == 0; }
166  template <class Derived>
167  inline bool operator==( const IdStringType<Derived> & lhs, const IdString & rhs )
168  { return lhs.compare( rhs ) == 0; }
170  template <class Derived>
171  inline bool operator==( const IdStringType<Derived> & lhs, const char * rhs )
172  { return lhs.compare( rhs ) == 0; }
174  template <class Derived>
175  inline bool operator==( const IdStringType<Derived> & lhs, const std::string & rhs )
176  { return lhs.compare( rhs ) == 0; }
178  template <class Derived>
179  inline bool operator==( const IdString & lhs, const IdStringType<Derived> & rhs )
180  { return rhs.compare( lhs ) == 0; }
182  template <class Derived>
183  inline bool operator==( const char * lhs, const IdStringType<Derived> & rhs )
184  { return rhs.compare( lhs ) == 0; }
186  template <class Derived>
187  inline bool operator==( const std::string & lhs, const IdStringType<Derived> & rhs )
188  { return rhs.compare( lhs ) == 0; }
189 
191  template <class Derived>
192  inline bool operator!=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
193  { return lhs.compare( rhs ) != 0; }
195  template <class Derived>
196  inline bool operator!=( const IdStringType<Derived> & lhs, const IdString & rhs )
197  { return lhs.compare( rhs ) != 0; }
199  template <class Derived>
200  inline bool operator!=( const IdStringType<Derived> & lhs, const char * rhs )
201  { return lhs.compare( rhs ) != 0; }
203  template <class Derived>
204  inline bool operator!=( const IdStringType<Derived> & lhs, const std::string & rhs )
205  { return lhs.compare( rhs ) != 0; }
207  template <class Derived>
208  inline bool operator!=( const IdString & lhs, const IdStringType<Derived> & rhs )
209  { return rhs.compare( lhs ) != 0; }
211  template <class Derived>
212  inline bool operator!=( const char * lhs, const IdStringType<Derived> & rhs )
213  { return rhs.compare( lhs ) != 0; }
215  template <class Derived>
216  inline bool operator!=( const std::string & lhs, const IdStringType<Derived> & rhs )
217  { return rhs.compare( lhs ) != 0; }
218 
220  template <class Derived>
221  inline bool operator<( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
222  { return lhs.compare( rhs ) < 0; }
224  template <class Derived>
225  inline bool operator<( const IdStringType<Derived> & lhs, const IdString & rhs )
226  { return lhs.compare( rhs ) < 0; }
228  template <class Derived>
229  inline bool operator<( const IdStringType<Derived> & lhs, const char * rhs )
230  { return lhs.compare( rhs ) < 0; }
232  template <class Derived>
233  inline bool operator<( const IdStringType<Derived> & lhs, const std::string & rhs )
234  { return lhs.compare( rhs ) < 0; }
236  template <class Derived>
237  inline bool operator<( const IdString & lhs, const IdStringType<Derived> & rhs )
238  { return rhs.compare( lhs ) >= 0; }
240  template <class Derived>
241  inline bool operator<( const char * lhs, const IdStringType<Derived> & rhs )
242  { return rhs.compare( lhs ) >= 0; }
244  template <class Derived>
245  inline bool operator<( const std::string & lhs, const IdStringType<Derived> & rhs )
246  { return rhs.compare( lhs ) >= 0; }
247 
249  template <class Derived>
250  inline bool operator<=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
251  { return lhs.compare( rhs ) <= 0; }
253  template <class Derived>
254  inline bool operator<=( const IdStringType<Derived> & lhs, const IdString & rhs )
255  { return lhs.compare( rhs ) <= 0; }
257  template <class Derived>
258  inline bool operator<=( const IdStringType<Derived> & lhs, const char * rhs )
259  { return lhs.compare( rhs ) <= 0; }
261  template <class Derived>
262  inline bool operator<=( const IdStringType<Derived> & lhs, const std::string & rhs )
263  { return lhs.compare( rhs ) <= 0; }
265  template <class Derived>
266  inline bool operator<=( const IdString & lhs, const IdStringType<Derived> & rhs )
267  { return rhs.compare( lhs ) > 0; }
269  template <class Derived>
270  inline bool operator<=( const char * lhs, const IdStringType<Derived> & rhs )
271  { return rhs.compare( lhs ) > 0; }
273  template <class Derived>
274  inline bool operator<=( const std::string & lhs, const IdStringType<Derived> & rhs )
275  { return rhs.compare( lhs ) > 0; }
276 
278  template <class Derived>
279  inline bool operator>( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
280  { return lhs.compare( rhs ) > 0; }
282  template <class Derived>
283  inline bool operator>( const IdStringType<Derived> & lhs, const IdString & rhs )
284  { return lhs.compare( rhs ) > 0; }
286  template <class Derived>
287  inline bool operator>( const IdStringType<Derived> & lhs, const char * rhs )
288  { return lhs.compare( rhs ) > 0; }
290  template <class Derived>
291  inline bool operator>( const IdStringType<Derived> & lhs, const std::string & rhs )
292  { return lhs.compare( rhs ) > 0; }
294  template <class Derived>
295  inline bool operator>( const IdString & lhs, const IdStringType<Derived> & rhs )
296  { return rhs.compare( lhs ) <= 0; }
298  template <class Derived>
299  inline bool operator>( const char * lhs, const IdStringType<Derived> & rhs )
300  { return rhs.compare( lhs ) <= 0; }
302  template <class Derived>
303  inline bool operator>( const std::string & lhs, const IdStringType<Derived> & rhs )
304  { return rhs.compare( lhs ) <= 0; }
305 
307  template <class Derived>
308  inline bool operator>=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
309  { return lhs.compare( rhs ) >= 0; }
311  template <class Derived>
312  inline bool operator>=( const IdStringType<Derived> & lhs, const IdString & rhs )
313  { return lhs.compare( rhs ) >= 0; }
315  template <class Derived>
316  inline bool operator>=( const IdStringType<Derived> & lhs, const char * rhs )
317  { return lhs.compare( rhs ) >= 0; }
319  template <class Derived>
320  inline bool operator>=( const IdStringType<Derived> & lhs, const std::string & rhs )
321  { return lhs.compare( rhs ) >= 0; }
323  template <class Derived>
324  inline bool operator>=( const IdString & lhs, const IdStringType<Derived> & rhs )
325  { return rhs.compare( lhs ) < 0; }
327  template <class Derived>
328  inline bool operator>=( const char * lhs, const IdStringType<Derived> & rhs )
329  { return rhs.compare( lhs ) < 0; }
331  template <class Derived>
332  inline bool operator>=( const std::string & lhs, const IdStringType<Derived> & rhs )
333  { return rhs.compare( lhs ) < 0; }
334 
336 } // namespace zypp
338 #endif // ZYPP_IDSTRINGTYPE_H
IdString::IdType IdType
Definition: IdStringType.h:89
static int compare(const std::string &lhs, const char *rhs)
Definition: IdStringType.h:133
void operator=(const IdStringType &)
Definition: IdStringType.h:94
bool empty() const
Definition: IdStringType.h:103
IdType id() const
Definition: IdStringType.h:108
bool operator!=(const CountryCode &lhs, const CountryCode &rhs)
IdType id() const
Expert backdoor.
Definition: IdString.h:103
static int compare(const char *lhs, const char *rhs)
Definition: IdStringType.h:138
static int compare(const IdString &lhs, const std::string &rhs)
Definition: IdStringType.h:127
static int compare(const char *lhs, const std::string &rhs)
Definition: IdStringType.h:137
Access to the sat-pools string space.
Definition: IdString.h:39
unsigned size() const
Definition: IdStringType.h:104
int compare(const Derived &rhs) const
Definition: IdStringType.h:141
Base class for creating IdString based types.
Definition: IdStringType.h:86
static int compare(const std::string &lhs, const IdString &rhs)
Definition: IdStringType.h:131
std::string asString() const
Conversion to std::string
Definition: IdString.h:83
static int compare(const IdString &lhs, const char *rhs)
Definition: IdStringType.h:128
static int compare(const Derived &lhs, const Derived &rhs)
Definition: IdStringType.h:119
static int compare(const Derived &lhs, const IdString &rhs)
Definition: IdStringType.h:120
static int compare(const Derived &lhs, const char *rhs)
Definition: IdStringType.h:122
IdStringType(const IdStringType &)
Definition: IdStringType.h:93
Backlink to the associated PoolImpl.
Definition: PoolMember.h:66
int compare(const IdStringType &rhs) const
Definition: IdStringType.h:142
std::string asString() const
Definition: IdStringType.h:106
static int compare(const std::string &lhs, const std::string &rhs)
Definition: IdStringType.h:132
sat::detail::IdType IdType
Definition: IdString.h:42
bool operator>=(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:308
static int compare(const char *lhs, const IdString &rhs)
Definition: IdStringType.h:136
static int compare(const Derived &lhs, const std::string &rhs)
Definition: IdStringType.h:121
bool operator>=(const IdString &lhs, const char *rhs)
Definition: IdString.h:201
static int _doCompare(const char *lhs, const char *rhs)
Definition: IdStringType.h:148
const char * c_str() const
Conversion to const char *
Definition: IdString.cc:42
int compare(const IdString &rhs) const
Definition: IdStringType.h:143
bool operator>(const IdString &lhs, const char *rhs)
Definition: IdString.h:185
bool operator==(const StrMatcher &lhs, const StrMatcher &rhs)
Definition: StrMatcher.cc:309
bool operator==(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:163
const char * c_str() const
Definition: IdStringType.h:105
static int compare(const std::string &lhs, const Derived &rhs)
Definition: IdStringType.h:130
int compare(const IdString &rhs) const
Compare IdString returning -1,0,1.
Definition: IdString.cc:45
bool operator>(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:279
int compare(const std::string &rhs) const
Definition: IdStringType.h:144
int compare(const char *rhs) const
Definition: IdStringType.h:145
static int compare(const IdString &lhs, const IdString &rhs)
Definition: IdStringType.h:125
bool empty() const
Whether the string is empty.
Definition: IdString.h:72
static int compare(const char *lhs, const Derived &rhs)
Definition: IdStringType.h:135
unsigned size() const
The strings size.
Definition: IdString.cc:39
static int compare(const IdString &lhs, const Derived &rhs)
Definition: IdStringType.h:124
bool operator!=(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:192
const IdString & idStr() const
Definition: IdStringType.h:101