12 #ifndef ZYPP_IDSTRINGTYPE_H
13 #define ZYPP_IDSTRINGTYPE_H
85 template <
class Derived>
100 const Derived &
self()
const {
return *
static_cast<const Derived*
>( this ); }
113 #ifndef SWIG // Swig treats it as syntax error
121 static int compare(
const Derived & lhs,
const Derived & rhs ) {
return compare( lhs.idStr(), rhs.idStr() ); }
123 static int compare(
const Derived & lhs,
const std::string & rhs ) {
return compare( lhs.idStr(), rhs.c_str() ); }
124 static int compare(
const Derived & lhs,
const char * rhs ) {
return compare( lhs.idStr(), rhs );}
127 static int compare(
const IdString & lhs,
const IdString & rhs ) {
return lhs == rhs ? 0 : Derived::_doCompare( (lhs ? lhs.
c_str() : (
const char *)0 ),
128 (rhs ? rhs.
c_str() : (
const char *)0 ) ); }
130 static int compare(
const IdString & lhs,
const char * rhs ) {
return Derived::_doCompare( (lhs ? lhs.
c_str() : (
const char *)0 ), rhs ); }
132 static int compare(
const std::string & lhs,
const Derived & rhs ) {
return compare( lhs.c_str(), rhs.idStr() ); }
134 static int compare(
const std::string & lhs,
const std::string & rhs ) {
return compare( lhs.c_str(), rhs.c_str() ); }
135 static int compare(
const std::string & lhs,
const char * rhs ) {
return compare( lhs.c_str(), rhs ); }
137 static int compare(
const char * lhs,
const Derived & rhs ) {
return compare( lhs, rhs.idStr() ); }
138 static int compare(
const char * lhs,
const IdString & rhs ) {
return Derived::_doCompare( lhs, (rhs ? rhs.
c_str() : (
const char *)0 ) ); }
139 static int compare(
const char * lhs,
const std::string & rhs ) {
return compare( lhs, rhs.c_str() ); }
140 static int compare(
const char * lhs,
const char * rhs ) {
return Derived::_doCompare( lhs, rhs ); }
152 if ( ! lhs )
return rhs ? -1 : 0;
153 return rhs ? ::strcmp( lhs, rhs ) : 1;
157 #ifndef SWIG // Swig treats it as syntax error
165 template <
class Derived>
166 inline std::ostream & operator<<( std::ostream & str, const IdStringType<Derived> & obj )
167 {
return str << obj.c_str(); }
170 template <
class Derived>
172 {
return lhs.
compare( rhs ) == 0; }
174 template <
class Derived>
176 {
return lhs.
compare( rhs ) == 0; }
178 template <
class Derived>
180 {
return lhs.
compare( rhs ) == 0; }
182 template <
class Derived>
184 {
return lhs.
compare( rhs ) == 0; }
186 template <
class Derived>
188 {
return rhs.
compare( lhs ) == 0; }
190 template <
class Derived>
192 {
return rhs.
compare( lhs ) == 0; }
194 template <
class Derived>
196 {
return rhs.
compare( lhs ) == 0; }
199 template <
class Derived>
201 {
return lhs.
compare( rhs ) != 0; }
203 template <
class Derived>
205 {
return lhs.
compare( rhs ) != 0; }
207 template <
class Derived>
209 {
return lhs.
compare( rhs ) != 0; }
211 template <
class Derived>
213 {
return lhs.
compare( rhs ) != 0; }
215 template <
class Derived>
217 {
return rhs.
compare( lhs ) != 0; }
219 template <
class Derived>
221 {
return rhs.
compare( lhs ) != 0; }
223 template <
class Derived>
225 {
return rhs.
compare( lhs ) != 0; }
228 template <
class Derived>
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; }
257 template <
class Derived>
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; }
286 template <
class Derived>
288 {
return lhs.
compare( rhs ) > 0; }
290 template <
class Derived>
292 {
return lhs.
compare( rhs ) > 0; }
294 template <
class Derived>
296 {
return lhs.
compare( rhs ) > 0; }
298 template <
class Derived>
300 {
return lhs.
compare( rhs ) > 0; }
302 template <
class Derived>
304 {
return rhs.
compare( lhs ) <= 0; }
306 template <
class Derived>
308 {
return rhs.
compare( lhs ) <= 0; }
310 template <
class Derived>
312 {
return rhs.
compare( lhs ) <= 0; }
315 template <
class Derived>
317 {
return lhs.
compare( rhs ) >= 0; }
319 template <
class Derived>
321 {
return lhs.
compare( rhs ) >= 0; }
323 template <
class Derived>
325 {
return lhs.
compare( rhs ) >= 0; }
327 template <
class Derived>
329 {
return lhs.
compare( rhs ) >= 0; }
331 template <
class Derived>
333 {
return rhs.
compare( lhs ) < 0; }
335 template <
class Derived>
337 {
return rhs.
compare( lhs ) < 0; }
339 template <
class Derived>
341 {
return rhs.
compare( lhs ) < 0; }
346 #endif // ZYPP_IDSTRINGTYPE_H