libzypp  17.14.0
ResKind.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_RESKIND_H
13 #define ZYPP_RESKIND_H
14 
15 #include <iosfwd>
16 #include <string>
17 
18 #include "zypp/APIConfig.h"
19 #include "zypp/base/String.h"
20 #include "zypp/IdStringType.h"
21 
23 namespace zypp
24 {
25 
32  class ResKind : public IdStringType<ResKind>
33  {
34  public:
38  static const ResKind nokind;
39 
40  static const ResKind package;
41  static const ResKind patch;
42  static const ResKind pattern;
43  static const ResKind product;
44  static const ResKind srcpackage;
45  static const ResKind application;
47 
53  static ResKind explicitBuiltin( const char * str_r );
55  static ResKind explicitBuiltin( const std::string & str_r )
56  { return explicitBuiltin( str_r.c_str() ); }
58  static ResKind explicitBuiltin( const IdString & str_r )
59  { return explicitBuiltin( str_r.c_str() ); }
60 
61  public:
63  ResKind() {}
64 
66  explicit ResKind( sat::detail::IdType id_r ) : _str( str::toLower(IdString(id_r).c_str()) ) {}
67  explicit ResKind( const IdString & idstr_r ) : _str( str::toLower(idstr_r.c_str()) ) {}
68  explicit ResKind( const std::string & str_r ) : _str( str::toLower(str_r) ) {}
69  explicit ResKind( const char * cstr_r ) : _str( str::toLower(cstr_r) ) {}
70 
71  public:
77  static std::string satIdent( const ResKind & refers_r, const std::string & name_r );
79  std::string satIdent( const std::string & name_r ) const
80  { return satIdent( *this, name_r ); }
81 
82  private:
83  static int _doCompare( const char * lhs, const char * rhs )
84  {
85  if ( lhs == rhs ) return 0;
86  if ( lhs && rhs ) return ::strcasecmp( lhs, rhs );
87  return( lhs ? 1 : -1 );
88  }
89 
90  private:
91  friend class IdStringType<ResKind>;
93  };
94 
96  inline std::ostream & dumpAsXmlOn( std::ostream & str, const ResKind & obj )
97  { return str << "<kind>" << obj << "</kind>"; }
98 
100 } // namespace zypp
102 #endif // ZYPP_RESKIND_H