libzypp
10.5.0
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #ifndef ZYPP_REL_H 00013 #define ZYPP_REL_H 00014 00015 #include <iosfwd> 00016 #include <string> 00017 00019 namespace zypp 00020 { 00021 00023 // 00024 // CLASS NAME : Rel 00025 // 00043 struct Rel 00044 { 00050 static const Rel EQ; 00051 static const Rel NE; 00052 static const Rel LT; 00053 static const Rel LE; 00054 static const Rel GT; 00055 static const Rel GE; 00056 static const Rel ANY; 00057 static const Rel NONE; 00059 00065 enum for_use_in_switch { 00066 NONE_e = 0U, 00067 GT_e = 1U, 00068 EQ_e = 2U, 00069 LT_e = 4U, 00070 GE_e = GT_e|EQ_e, 00071 LE_e = LT_e|EQ_e, 00072 NE_e = GT_e|LT_e, 00073 ANY_e = GT_e|EQ_e|LT_e, 00074 }; 00075 00077 Rel() 00078 : _op( ANY_e ) 00079 {} 00080 00091 explicit 00092 Rel( const std::string & strval_r ); 00093 00097 Rel( const std::string & strval_r, const Rel & default_r ); 00098 00102 bool parseFrom( const std::string & strval_r ); 00103 00105 explicit 00106 Rel( unsigned bits_r ) 00107 : _op( for_use_in_switch(bits_r & ANY_e) ) 00108 {} 00109 00111 static bool isRel( unsigned bits_r ) 00112 { return (bits_r & ANY_e) == bits_r; } 00113 00117 const std::string & asString() const; 00119 const char * c_str() const 00120 { return asString().c_str(); } 00121 00141 for_use_in_switch inSwitch() const 00142 { return _op; } 00143 00145 unsigned bits() const 00146 { return _op; } 00147 00148 private: 00150 Rel( for_use_in_switch op_r ) 00151 : _op( op_r ) 00152 {} 00154 for_use_in_switch _op; 00155 }; 00157 00159 inline std::ostream & operator<<( std::ostream & str, const Rel & obj ) 00160 { return str << obj.asString(); } 00161 00163 00165 inline bool operator==( const Rel & lhs, const Rel & rhs ) 00166 { return lhs.inSwitch() == rhs.inSwitch(); } 00167 00169 inline bool operator!=( const Rel & lhs, const Rel & rhs ) 00170 { return ! ( lhs == rhs ); } 00171 00173 } // namespace zypp 00175 #endif // ZYPP_REL_H