libzypp: zypp-core/ContentType.h Source File

libzypp 17.38.7

ContentType.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
11#ifndef ZYPP_CONTENTTYPE_H
12#define ZYPP_CONTENTTYPE_H
13
14#include <iosfwd>
15#include <string>
16#include <stdexcept>
17
19namespace zypp
20{
29 class ContentType
30 {
31 public:
33 ContentType()
34 {}
35
39 explicit ContentType( std::string type_r )
40 {
41 std::string::size_type pos = type_r.find( '/' );
42 if ( pos != std::string::npos )
43 {
44 testAndSet( _subtype, type_r.substr( pos+1 ) );
45 type_r.erase( pos );
46 }
47 testAndSet( _type, std::move(type_r) );
48 }
49
53 ContentType( std::string type_r, std::string subtype_r )
54 {
55 testAndSet( _type, std::move(type_r) );
56 testAndSet( _subtype, std::move(subtype_r) );
57 }
58
59 public:
61 const std::string & type() const
62 { return _type; }
63
67 void type( std::string type_r )
68 { _type = std::move(type_r); }
69
71 const std::string & subtype() const
72 { return _subtype; }
73
77 void subtype( std::string subtype_r )
78 { _subtype = std::move(subtype_r); }
79
80 public:
82 bool empty() const
83 { return emptyType() && emptySubtype(); }
84
85 bool emptyType() const
86 { return _type.empty(); }
87
88 bool emptySubtype() const
89 { return _subtype.empty(); }
90
92 explicit operator bool () const
93 { return !empty(); }
94
96 std::string asString() const
97 { std::string ret( type() ); if ( ! emptySubtype() ) { ret += "/"; ret += subtype(); } return ret; }
98
99 private:
100 void testAndSet( std::string & var_r, std::string val_r )
101 {
102 if ( val_r.find_first_of( "/ \t\r\n" ) != std::string::npos )
103 throw std::invalid_argument( "ContentType: illegal char in '" + val_r + "'" );
104 var_r = std::move(val_r);
105 }
106 private:
107 std::string _type;
108 std::string _subtype;
109 };
110
112 inline std::ostream & operator<<( std::ostream & str, const ContentType & obj )
113 { return str << obj.asString(); }
114
116 inline bool operator==( const ContentType & lhs, const ContentType & rhs )
117 { return lhs.type() == rhs.type() && lhs.subtype() == rhs.subtype(); }
118
120 inline bool operator!=( const ContentType & lhs, const ContentType & rhs )
121 { return !( lhs == rhs ); }
122
124 inline bool operator<( const ContentType & lhs, const ContentType & rhs )
125 { int cmp = lhs.type().compare( rhs.type() ); return cmp < 0 || ( cmp == 0 && lhs.subtype() < rhs.subtype() ); }
126
128 inline bool operator<=( const ContentType & lhs, const ContentType & rhs )
129 { return lhs < rhs || lhs == rhs; }
130
132 inline bool operator>( const ContentType & lhs, const ContentType & rhs )
133 { return !( lhs <= rhs ); }
134
136 inline bool operator>=( const ContentType & lhs, const ContentType & rhs )
137 { return !( lhs < rhs ); }
138
139
140} // namespace zypp
142#endif // ZYPP_CONTENTTYPE_H
bool
zypp::ContentType
Mime type like 'type/subtype' classification of content.
Definition ContentType.h:30
zypp::ContentType::subtype
const std::string & subtype() const
Get subtype.
Definition ContentType.h:71
zypp::ContentType::ContentType
ContentType(std::string type_r, std::string subtype_r)
Ctor taking type and subtype.
Definition ContentType.h:53
zypp::ContentType::emptySubtype
bool emptySubtype() const
Whether subtype is empty.
Definition ContentType.h:88
zypp::ContentType::_type
std::string _type
Definition ContentType.h:107
zypp::ContentType::subtype
void subtype(std::string subtype_r)
Set subtype.
Definition ContentType.h:77
zypp::ContentType::type
const std::string & type() const
Get type.
Definition ContentType.h:61
zypp::ContentType::ContentType
ContentType()
Default ctor: empty.
Definition ContentType.h:33
zypp::ContentType::_subtype
std::string _subtype
Definition ContentType.h:108
zypp::ContentType::ContentType
ContentType(std::string type_r)
Ctor taking "type[/subtype]".
Definition ContentType.h:39
zypp::ContentType::empty
bool empty() const
Whether type and subtype are empty.
Definition ContentType.h:82
zypp::ContentType::type
void type(std::string type_r)
Set type.
Definition ContentType.h:67
zypp::ContentType::emptyType
bool emptyType() const
Whether type is empty.
Definition ContentType.h:85
zypp::ContentType::asString
std::string asString() const
String representation "type[/subtype]".
Definition ContentType.h:96
zypp::ContentType::testAndSet
void testAndSet(std::string &var_r, std::string val_r)
Definition ContentType.h:100
str
String related utilities and Regular expression matching.
zypp
Easy-to use interface to the ZYPP dependency resolver.
Definition CodePitfalls.doc:2
zypp::operator>
bool operator>(const IdString &lhs, const IdString &rhs)
relates: IdString Greater
Definition IdString.h:223
zypp::operator>=
bool operator>=(const IdString &lhs, const IdString &rhs)
relates: IdString GreaterEqual
Definition IdString.h:239
zypp::operator<
bool operator<(const Capability &lhs, const Capability &rhs)
relates: Capability Arbitrary order.
Definition Capability.h:317
zypp::operator!=
bool operator!=(const Capability &lhs, const Capability &rhs)
relates: Capability
Definition Capability.h:313
zypp::operator<=
bool operator<=(const IdString &lhs, const IdString &rhs)
relates: IdString LessEqual
Definition IdString.h:207
zypp::operator==
bool operator==(const Capability &lhs, const Capability &rhs)
relates: Capability
Definition Capability.h:309
zypp::operator<<
std::ostream & operator<<(std::ostream &str, const Capabilities &obj)
relates: Capabilities Stream output
Definition Capabilities.cc:65