libzypp  17.3.0
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  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 
116  explicit operator IdString() const
117  { return idStr(); }
118 
120  explicit operator std::string() const
121  { return asString(); }
122 
123  public:
124  // - break it down to idString/const char* <=> idString/cont char*
125  // - handle idString(0)/NULL being the least value
126  // - everything else goes to _doCompare (no NULL)
127  static int compare( const Derived & lhs, const Derived & rhs ) { return compare( lhs.idStr(), rhs.idStr() ); }
128  static int compare( const Derived & lhs, const IdString & rhs ) { return compare( lhs.idStr(), rhs ); }
129  static int compare( const Derived & lhs, const std::string & rhs ) { return compare( lhs.idStr(), rhs.c_str() ); }
130  static int compare( const Derived & lhs, const char * rhs ) { return compare( lhs.idStr(), rhs );}
131 
132  static int compare( const IdString & lhs, const Derived & rhs ) { return compare( lhs, rhs.idStr() ); }
133  static int compare( const IdString & lhs, const IdString & rhs ) { return lhs == rhs ? 0 : Derived::_doCompare( (lhs ? lhs.c_str() : (const char *)0 ),
134  (rhs ? rhs.c_str() : (const char *)0 ) ); }
135  static int compare( const IdString & lhs, const std::string & rhs ) { return compare( lhs, rhs.c_str() ); }
136  static int compare( const IdString & lhs, const char * rhs ) { return Derived::_doCompare( (lhs ? lhs.c_str() : (const char *)0 ), rhs ); }
137 
138  static int compare( const std::string & lhs, const Derived & rhs ) { return compare( lhs.c_str(), rhs.idStr() ); }
139  static int compare( const std::string & lhs, const IdString & rhs ) { return compare( lhs.c_str(), rhs ); }
140  static int compare( const std::string & lhs, const std::string & rhs ) { return compare( lhs.c_str(), rhs.c_str() ); }
141  static int compare( const std::string & lhs, const char * rhs ) { return compare( lhs.c_str(), rhs ); }
142 
143  static int compare( const char * lhs, const Derived & rhs ) { return compare( lhs, rhs.idStr() ); }
144  static int compare( const char * lhs, const IdString & rhs ) { return Derived::_doCompare( lhs, (rhs ? rhs.c_str() : (const char *)0 ) ); }
145  static int compare( const char * lhs, const std::string & rhs ) { return compare( lhs, rhs.c_str() ); }
146  static int compare( const char * lhs, const char * rhs ) { return Derived::_doCompare( lhs, rhs ); }
147 
148  public:
149  int compare( const Derived & rhs ) const { return compare( idStr(), rhs.idStr() ); }
150  int compare( const IdStringType & rhs ) const { return compare( idStr(), rhs.idStr() ); }
151  int compare( const IdString & rhs ) const { return compare( idStr(), rhs ); }
152  int compare( const std::string & rhs ) const { return compare( idStr(), rhs.c_str() ); }
153  int compare( const char * rhs ) const { return compare( idStr(), rhs ); }
154 
155  private:
156  static int _doCompare( const char * lhs, const char * rhs )
157  {
158  if ( ! lhs ) return rhs ? -1 : 0;
159  return rhs ? ::strcmp( lhs, rhs ) : 1;
160  }
161  };
163 
165  template <class Derived>
166  inline std::ostream & operator<<( std::ostream & str, const IdStringType<Derived> & obj )
167  { return str << obj.c_str(); }
168 
170  template <class Derived>
171  inline bool operator==( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
172  { return lhs.compare( rhs ) == 0; }
174  template <class Derived>
175  inline bool operator==( const IdStringType<Derived> & lhs, const IdString & rhs )
176  { return lhs.compare( rhs ) == 0; }
178  template <class Derived>
179  inline bool operator==( const IdStringType<Derived> & lhs, const char * rhs )
180  { return lhs.compare( rhs ) == 0; }
182  template <class Derived>
183  inline bool operator==( const IdStringType<Derived> & lhs, const std::string & rhs )
184  { return lhs.compare( rhs ) == 0; }
186  template <class Derived>
187  inline bool operator==( const IdString & lhs, const IdStringType<Derived> & rhs )
188  { return rhs.compare( lhs ) == 0; }
190  template <class Derived>
191  inline bool operator==( const char * lhs, const IdStringType<Derived> & rhs )
192  { return rhs.compare( lhs ) == 0; }
194  template <class Derived>
195  inline bool operator==( const std::string & lhs, const IdStringType<Derived> & rhs )
196  { return rhs.compare( lhs ) == 0; }
197 
199  template <class Derived>
200  inline bool operator!=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
201  { return lhs.compare( rhs ) != 0; }
203  template <class Derived>
204  inline bool operator!=( const IdStringType<Derived> & lhs, const IdString & rhs )
205  { return lhs.compare( rhs ) != 0; }
207  template <class Derived>
208  inline bool operator!=( const IdStringType<Derived> & lhs, const char * rhs )
209  { return lhs.compare( rhs ) != 0; }
211  template <class Derived>
212  inline bool operator!=( const IdStringType<Derived> & lhs, const std::string & rhs )
213  { return lhs.compare( rhs ) != 0; }
215  template <class Derived>
216  inline bool operator!=( const IdString & lhs, const IdStringType<Derived> & rhs )
217  { return rhs.compare( lhs ) != 0; }
219  template <class Derived>
220  inline bool operator!=( const char * lhs, const IdStringType<Derived> & rhs )
221  { return rhs.compare( lhs ) != 0; }
223  template <class Derived>
224  inline bool operator!=( const std::string & lhs, const IdStringType<Derived> & rhs )
225  { return rhs.compare( lhs ) != 0; }
226 
228  template <class Derived>
229  inline bool operator<( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
230  { return lhs.compare( rhs ) < 0; }
232  template <class Derived>
233  inline bool operator<( const IdStringType<Derived> & lhs, const IdString & rhs )
234  { return lhs.compare( rhs ) < 0; }
236  template <class Derived>
237  inline bool operator<( const IdStringType<Derived> & lhs, const char * rhs )
238  { return lhs.compare( rhs ) < 0; }
240  template <class Derived>
241  inline bool operator<( const IdStringType<Derived> & lhs, const std::string & rhs )
242  { return lhs.compare( rhs ) < 0; }
244  template <class Derived>
245  inline bool operator<( const IdString & lhs, const IdStringType<Derived> & rhs )
246  { return rhs.compare( lhs ) >= 0; }
248  template <class Derived>
249  inline bool operator<( const char * lhs, const IdStringType<Derived> & rhs )
250  { return rhs.compare( lhs ) >= 0; }
252  template <class Derived>
253  inline bool operator<( const std::string & lhs, const IdStringType<Derived> & rhs )
254  { return rhs.compare( lhs ) >= 0; }
255 
257  template <class Derived>
258  inline bool operator<=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
259  { return lhs.compare( rhs ) <= 0; }
261  template <class Derived>
262  inline bool operator<=( const IdStringType<Derived> & lhs, const IdString & rhs )
263  { return lhs.compare( rhs ) <= 0; }
265  template <class Derived>
266  inline bool operator<=( const IdStringType<Derived> & lhs, const char * rhs )
267  { return lhs.compare( rhs ) <= 0; }
269  template <class Derived>
270  inline bool operator<=( const IdStringType<Derived> & lhs, const std::string & rhs )
271  { return lhs.compare( rhs ) <= 0; }
273  template <class Derived>
274  inline bool operator<=( const IdString & lhs, const IdStringType<Derived> & rhs )
275  { return rhs.compare( lhs ) > 0; }
277  template <class Derived>
278  inline bool operator<=( const char * lhs, const IdStringType<Derived> & rhs )
279  { return rhs.compare( lhs ) > 0; }
281  template <class Derived>
282  inline bool operator<=( const std::string & lhs, const IdStringType<Derived> & rhs )
283  { return rhs.compare( lhs ) > 0; }
284 
286  template <class Derived>
287  inline bool operator>( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
288  { return lhs.compare( rhs ) > 0; }
290  template <class Derived>
291  inline bool operator>( const IdStringType<Derived> & lhs, const IdString & rhs )
292  { return lhs.compare( rhs ) > 0; }
294  template <class Derived>
295  inline bool operator>( const IdStringType<Derived> & lhs, const char * rhs )
296  { return lhs.compare( rhs ) > 0; }
298  template <class Derived>
299  inline bool operator>( const IdStringType<Derived> & lhs, const std::string & rhs )
300  { return lhs.compare( rhs ) > 0; }
302  template <class Derived>
303  inline bool operator>( const IdString & lhs, const IdStringType<Derived> & rhs )
304  { return rhs.compare( lhs ) <= 0; }
306  template <class Derived>
307  inline bool operator>( const char * lhs, const IdStringType<Derived> & rhs )
308  { return rhs.compare( lhs ) <= 0; }
310  template <class Derived>
311  inline bool operator>( const std::string & lhs, const IdStringType<Derived> & rhs )
312  { return rhs.compare( lhs ) <= 0; }
313 
315  template <class Derived>
316  inline bool operator>=( const IdStringType<Derived> & lhs, const IdStringType<Derived> & rhs )
317  { return lhs.compare( rhs ) >= 0; }
319  template <class Derived>
320  inline bool operator>=( const IdStringType<Derived> & lhs, const IdString & rhs )
321  { return lhs.compare( rhs ) >= 0; }
323  template <class Derived>
324  inline bool operator>=( const IdStringType<Derived> & lhs, const char * rhs )
325  { return lhs.compare( rhs ) >= 0; }
327  template <class Derived>
328  inline bool operator>=( const IdStringType<Derived> & lhs, const std::string & rhs )
329  { return lhs.compare( rhs ) >= 0; }
331  template <class Derived>
332  inline bool operator>=( const IdString & lhs, const IdStringType<Derived> & rhs )
333  { return rhs.compare( lhs ) < 0; }
335  template <class Derived>
336  inline bool operator>=( const char * lhs, const IdStringType<Derived> & rhs )
337  { return rhs.compare( lhs ) < 0; }
339  template <class Derived>
340  inline bool operator>=( const std::string & lhs, const IdStringType<Derived> & rhs )
341  { return rhs.compare( lhs ) < 0; }
342 
344 } // namespace zypp
346 #endif // ZYPP_IDSTRINGTYPE_H
IdString::IdType IdType
Definition: IdStringType.h:89
static int compare(const std::string &lhs, const char *rhs)
Definition: IdStringType.h:141
void operator=(const IdStringType &)
Definition: IdStringType.h:94
IdString idStr() const
Definition: IdStringType.h:101
int compare(const IdString &rhs) const
Compare IdString returning -1,0,1.
Definition: IdString.cc:53
IdType id() const
Definition: IdStringType.h:108
static int compare(const char *lhs, const char *rhs)
Definition: IdStringType.h:146
static int compare(const IdString &lhs, const std::string &rhs)
Definition: IdStringType.h:135
int compare(const IdStringType &rhs) const
Definition: IdStringType.h:150
IdType id() const
Expert backdoor.
Definition: IdString.h:115
String related utilities and Regular expression matching.
static int compare(const char *lhs, const std::string &rhs)
Definition: IdStringType.h:145
Access to the sat-pools string space.
Definition: IdString.h:41
Base class for creating IdString based types.
Definition: IdStringType.h:86
static int compare(const std::string &lhs, const IdString &rhs)
Definition: IdStringType.h:139
static int compare(const IdString &lhs, const char *rhs)
Definition: IdStringType.h:136
static int compare(const Derived &lhs, const Derived &rhs)
Definition: IdStringType.h:127
static int compare(const Derived &lhs, const IdString &rhs)
Definition: IdStringType.h:128
static int compare(const Derived &lhs, const char *rhs)
Definition: IdStringType.h:130
IdStringType(const IdStringType &)
Definition: IdStringType.h:93
constexpr bool empty() const
Whether the string is empty.
Definition: IdString.h:80
Backlink to the associated PoolImpl.
Definition: PoolMember.h:88
std::string asString() const
Definition: IdStringType.h:106
static int compare(const std::string &lhs, const std::string &rhs)
Definition: IdStringType.h:140
bool empty() const
Definition: IdStringType.h:103
sat::detail::IdType IdType
Definition: IdString.h:44
bool operator>=(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:316
static int compare(const char *lhs, const IdString &rhs)
Definition: IdStringType.h:144
static int compare(const Derived &lhs, const std::string &rhs)
Definition: IdStringType.h:129
unsigned size() const
The strings size.
Definition: IdString.cc:47
static int _doCompare(const char *lhs, const char *rhs)
Definition: IdStringType.h:156
const char * c_str() const
Conversion to const char *
Definition: IdString.cc:50
bool operator==(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:171
static int compare(const std::string &lhs, const Derived &rhs)
Definition: IdStringType.h:138
int compare(const Derived &rhs) const
Definition: IdStringType.h:149
bool operator>(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:287
int compare(const IdString &rhs) const
Definition: IdStringType.h:151
static int compare(const IdString &lhs, const IdString &rhs)
Definition: IdStringType.h:133
static int compare(const char *lhs, const Derived &rhs)
Definition: IdStringType.h:143
std::string asString() const
Conversion to std::string
Definition: IdString.h:91
static int compare(const IdString &lhs, const Derived &rhs)
Definition: IdStringType.h:132
bool operator!=(const IdStringType< Derived > &lhs, const IdStringType< Derived > &rhs)
Definition: IdStringType.h:200
int compare(const char *rhs) const
Definition: IdStringType.h:153
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
unsigned size() const
Definition: IdStringType.h:104
const char * c_str() const
Definition: IdStringType.h:105
int compare(const std::string &rhs) const
Definition: IdStringType.h:152