📄 cryptlib_8h-source.html
字号:
00222 <span class="comment"></span>00223 <span class="comment"> //! exception thrown when trying to retrieve a value using a different type than expected</span><a name="l00224"></a><a class="code" href="class_name_value_pairs_1_1_value_type_mismatch.html">00224</a> <span class="comment"></span> <span class="keyword">class </span><a class="code" href="class_name_value_pairs_1_1_value_type_mismatch.html">ValueTypeMismatch</a> : <span class="keyword">public</span> InvalidArgument00225 {00226 <span class="keyword">public</span>:00227 <a class="code" href="class_name_value_pairs_1_1_value_type_mismatch.html">ValueTypeMismatch</a>(std::string name, <span class="keyword">const</span> std::type_info &stored, <span class="keyword">const</span> std::type_info &retrieving)00228 : InvalidArgument(<span class="stringliteral">"NameValuePairs: type mismatch for '"</span> + name + <span class="stringliteral">"', stored '"</span> + stored.name() + <span class="stringliteral">"', trying to retrieve '"</span> + retrieving.name() + <span class="stringliteral">"'"</span>)00229 , m_stored(stored), m_retrieving(retrieving) {}00230 00231 <span class="keyword">const</span> std::type_info & GetStoredTypeInfo()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_stored;}00232 <span class="keyword">const</span> std::type_info & GetRetrievingTypeInfo()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_retrieving;}00233 00234 <span class="keyword">private</span>:00235 <span class="keyword">const</span> std::type_info &m_stored;00236 <span class="keyword">const</span> std::type_info &m_retrieving;00237 };00238 <span class="comment"></span>00239 <span class="comment"> //! get a copy of this object or a subobject of it</span>00240 <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00241"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha37">00241</a> <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha37">GetThisObject</a>(T &object)<span class="keyword"> const</span>00242 <span class="keyword"> </span>{00243 <span class="keywordflow">return</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>((std::string(<span class="stringliteral">"ThisObject:"</span>)+<span class="keyword">typeid</span>(T).name()).c_str(), object);00244 }00245 <span class="comment"></span>00246 <span class="comment"> //! get a pointer to this object, as a pointer to T</span>00247 <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00248"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha38">00248</a> <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha38">GetThisPointer</a>(T *&p)<span class="keyword"> const</span>00249 <span class="keyword"> </span>{00250 <span class="keywordflow">return</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>((std::string(<span class="stringliteral">"ThisPointer:"</span>)+<span class="keyword">typeid</span>(T).name()).c_str(), p);00251 }00252 <span class="comment"></span>00253 <span class="comment"> //! get a named value, returns true if the name exists</span>00254 <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00255"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">00255</a> <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, T &value)<span class="keyword"> const</span>00256 <span class="keyword"> </span>{00257 <span class="keywordflow">return</span> <a class="code" href="class_name_value_pairs.html#_x509_public_keya28">GetVoidValue</a>(name, <span class="keyword">typeid</span>(T), &value);00258 }00259 <span class="comment"></span>00260 <span class="comment"> //! get a named value, returns the default if the name doesn't exist</span>00261 <span class="comment"></span> <span class="keyword">template</span> <<span class="keyword">class</span> T><a name="l00262"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">00262</a> T <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, T defaultValue)<span class="keyword"> const</span>00263 <span class="keyword"> </span>{00264 <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(name, defaultValue);00265 <span class="keywordflow">return</span> defaultValue;00266 }00267 <span class="comment"></span>00268 <span class="comment"> //! get a list of value names that can be retrieved</span><a name="l00269"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha41">00269</a> <span class="comment"></span> CRYPTOPP_DLL std::string <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha41">GetValueNames</a>()<span class="keyword"> const</span>00270 <span class="keyword"> </span>{std::string result; <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(<span class="stringliteral">"ValueNames"</span>, result); <span class="keywordflow">return</span> result;}00271 <span class="comment"></span>00272 <span class="comment"> //! get a named value with type int</span>00273 <span class="comment"></span><span class="comment"> /*! used to ensure we don't accidentally try to get an unsigned int</span>00274 <span class="comment"> or some other type when we mean int (which is the most common case) */</span><a name="l00275"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">00275</a> CRYPTOPP_DLL <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> &value)<span class="keyword"> const</span>00276 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(name, value);}00277 <span class="comment"></span>00278 <span class="comment"> //! get a named value with type int, with default</span><a name="l00279"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha43">00279</a> <span class="comment"></span> CRYPTOPP_DLL <span class="keywordtype">int</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha43">GetIntValueWithDefault</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> defaultValue)<span class="keyword"> const</span>00280 <span class="keyword"> </span>{<span class="keywordflow">return</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha40">GetValueWithDefault</a>(name, defaultValue);}00281 <span class="comment"></span>00282 <span class="comment"> //! used by derived classes to check for type mismatch</span><a name="l00283"></a><a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">00283</a> <span class="comment"></span> CRYPTOPP_DLL <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">ThrowIfTypeMismatch</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &stored, <span class="keyword">const</span> std::type_info &retrieving)00284 {<span class="keywordflow">if</span> (stored != retrieving) <span class="keywordflow">throw</span> <a class="code" href="class_name_value_pairs_1_1_value_type_mismatch.html">ValueTypeMismatch</a>(name, stored, retrieving);}00285 00286 <span class="keyword">template</span> <<span class="keyword">class</span> T>00287 <span class="keywordtype">void</span> GetRequiredParameter(<span class="keyword">const</span> <span class="keywordtype">char</span> *className, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, T &value)<span class="keyword"> const</span>00288 <span class="keyword"> </span>{00289 <span class="keywordflow">if</span> (!<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(name, value))00290 <span class="keywordflow">throw</span> InvalidArgument(std::string(className) + <span class="stringliteral">": missing required parameter '"</span> + name + <span class="stringliteral">"'"</span>);00291 }00292 00293 CRYPTOPP_DLL <span class="keywordtype">void</span> GetRequiredIntParameter(<span class="keyword">const</span> <span class="keywordtype">char</span> *className, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">int</span> &value)<span class="keyword"> const</span>00294 <span class="keyword"> </span>{00295 <span class="keywordflow">if</span> (!<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha42">GetIntValue</a>(name, value))00296 <span class="keywordflow">throw</span> InvalidArgument(std::string(className) + <span class="stringliteral">": missing required parameter '"</span> + name + <span class="stringliteral">"'"</span>);00297 }00298 <span class="comment"></span>00299 <span class="comment"> //! to be implemented by derived classes, users should use one of the above functions instead</span>00300 <span class="comment"></span> CRYPTOPP_DLL <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x509_public_keya28">GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &valueType, <span class="keywordtype">void</span> *pValue) <span class="keyword">const</span> =0;00301 };00302 <span class="comment"></span>00303 <span class="comment">//! namespace containing value name definitions</span>00304 <span class="comment"></span><span class="comment">/*! value names, types and semantics:</span>00305 <span class="comment"></span>00306 <span class="comment"> ThisObject:ClassName (ClassName, copy of this object or a subobject)</span>00307 <span class="comment"> ThisPointer:ClassName (const ClassName *, pointer to this object or a subobject)</span>00308 <span class="comment">*/</span>00309 DOCUMENTED_NAMESPACE_BEGIN(Name)00310 <span class="comment">// more names defined in argnames.h</span>00311 DOCUMENTED_NAMESPACE_END00312 <span class="comment"></span>00313 <span class="comment">//! .</span><a name="l00314"></a><a class="code" href="class_null_name_value_pairs.html">00314</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL NullNameValuePairs : <span class="keyword">public</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a>00315 {00316 <span class="keyword">public</span>:<a name="l00317"></a><a class="code" href="class_null_name_value_pairs.html#_null_name_value_pairsa0">00317</a> <span class="keywordtype">bool</span> <a class="code" href="class_name_value_pairs.html#_x509_public_keya28">GetVoidValue</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">false</span>;}00318 };00319 <span class="comment"></span>00320 <span class="comment">//! .</span><a name="l00321"></a><a class="code" href="cryptlib_8h.html#a3">00321</a> <span class="comment"></span><span class="keyword">extern</span> CRYPTOPP_DLL <span class="keyword">const</span> NullNameValuePairs g_nullNameValuePairs;00322 00323 <span class="comment">// ********************************************************</span>00324 <span class="comment"></span>00325 <span class="comment">//! interface for cloning objects, this is not implemented by most classes yet</span><a name="l00326"></a><a class="code" href="class_clonable.html">00326</a> <span class="comment"></span><span class="keyword">class </span>CRYPTOPP_DLL Clonable00327 {00328 <span class="keyword">public</span>:00329 <span class="keyword">virtual</span> ~Clonable() {}<span class="comment"></span>00330 <span class="comment"> //! this is not implemented by most classes yet</span><a name="l00331"></a><a class="code" href="class_clonable.html#_zlib_decompressora18">00331</a> <span class="comment"></span> <span class="keyword">virtual</span> Clonable* Clone()<span class="keyword"> const </span>{<span class="keywordflow">throw</span> NotImplemented(<span class="stringliteral">"Clone() is not implemented yet."</span>);} <span class="comment">// TODO: make this =0</span>00332 };00333 <span class="comment"></span>00334 <span class="comment">//! interface for all crypto algorithms</span>00335 <span class="comment"></span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -