libzypp 8.13.6
|
00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #ifndef ZYPP_PLUGINFRAME_H 00013 #define ZYPP_PLUGINFRAME_H 00014 00015 #include <iosfwd> 00016 #include <string> 00017 #include <map> 00018 00019 #include "zypp/base/PtrTypes.h" 00020 #include "zypp/base/SafeBool.h" 00021 00022 #include "zypp/PluginFrameException.h" 00023 00025 namespace zypp 00026 { 00027 00041 class PluginFrame : private base::SafeBool<PluginFrame> 00042 { 00043 friend std::ostream & operator<<( std::ostream & str, const PluginFrame & obj ); 00044 friend bool operator==( const PluginFrame & lhs, const PluginFrame & rhs ); 00045 00046 public: 00048 typedef PluginFrameException Exception; 00049 00051 PluginFrame(); 00052 00056 PluginFrame( const std::string & command_r ); 00057 00061 PluginFrame( const std::string & command_r, const std::string body_r ); 00062 00067 PluginFrame( std::istream & stream_r ); 00068 00069 public: 00071 bool empty() const; 00072 00074 using base::SafeBool<PluginFrame>::operator bool_type; 00075 00076 public: 00078 const std::string & command() const; 00079 00083 void setCommand( const std::string & command_r ); 00084 00086 const std::string & body() const; 00087 00096 std::string & bodyRef(); 00097 00099 void setBody( const std::string & body_r ); 00100 00101 public: 00103 typedef std::multimap<std::string, std::string> HeaderList; 00104 00106 typedef HeaderList::const_iterator HeaderListIterator; 00107 00108 private: 00110 HeaderList & headerList(); 00111 00112 public: 00114 const HeaderList & headerList() const; 00115 00117 bool headerEmpty() const 00118 { return headerList().empty(); } 00119 00121 unsigned headerSize() const 00122 { return headerList().size(); } 00123 00125 HeaderListIterator headerBegin() const 00126 { return headerList().begin(); } 00127 00129 HeaderListIterator headerEnd() const 00130 { return headerList().end(); } 00131 00133 void headerClear() 00134 { headerList().clear(); } 00135 00136 00138 bool hasKey( const std::string & key_r ) const 00139 { return keyEmpty( key_r ); } 00140 00142 bool keyEmpty( const std::string & key_r ) const 00143 { return headerList().find( key_r ) == headerEnd(); } 00144 00146 bool keySize( const std::string & key_r ) const 00147 { return headerList().count( key_r ); } 00148 00150 HeaderListIterator keyBegin( const std::string & key_r ) const 00151 { return headerList().lower_bound( key_r ); } 00152 00154 HeaderListIterator keyEnd( const std::string & key_r ) const 00155 { return headerList().upper_bound( key_r ); } 00156 00157 00162 const std::string & getHeader( const std::string & key_r ) const; 00163 00167 const std::string & getHeader( const std::string & key_r, const std::string & default_r ) const; 00168 00170 const std::string & getHeaderNT( const std::string & key_r, const std::string & default_r = std::string() ) const; 00171 00176 void setHeader( const std::string & key_r, const std::string & value_r = std::string() ); 00177 00182 void addHeader( const std::string & key_r, const std::string & value_r = std::string() ); 00183 00185 void clearHeader( const std::string & key_r ); 00186 00187 public: 00191 std::ostream & writeTo( std::ostream & stream_r ) const; 00192 00194 static std::ostream & writeTo( std::ostream & stream_r, const PluginFrame & frame_r ) 00195 { return frame_r.writeTo( stream_r ); } 00196 00200 std::istream & readFrom( std::istream & stream_r ) 00201 { *this = PluginFrame( stream_r ); return stream_r; } 00202 00204 static std::istream & readFrom( std::istream & stream_r, PluginFrame & frame_r ) 00205 { frame_r = PluginFrame( stream_r ); return stream_r; } 00206 00207 private: 00208 friend base::SafeBool<PluginFrame>::operator bool_type() const; 00210 bool boolTest() const 00211 { return empty(); } 00212 public: 00214 class Impl; 00215 private: 00217 RWCOW_pointer<Impl> _pimpl; 00218 }; 00219 00221 std::ostream & operator<<( std::ostream & str, const PluginFrame & obj ); 00222 00224 inline std::ostream & dumpOn( std::ostream & str, const PluginFrame & obj ) 00225 { return PluginFrame::writeTo( str, obj ); } 00226 00228 inline std::istream & operator>>( std::istream & str, PluginFrame & obj ) 00229 { return PluginFrame::readFrom( str, obj ); } 00230 00232 bool operator==( const PluginFrame & lhs, const PluginFrame & rhs ); 00233 00235 inline bool operator!=( const PluginFrame & lhs, const PluginFrame & rhs ) 00236 { return( ! operator==( lhs, rhs ) ); } 00237 00239 } // namespace zypp 00241 #endif // ZYPP_PLUGINFRAME_H