⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 algparam_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>Crypto++: algparam.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.3.2 --><div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Compound&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Compound&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a></div><h1>algparam.h</h1><div class="fragment"><pre>00001 <span class="preprocessor">#ifndef CRYPTOPP_ALGPARAM_H</span>00002 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_ALGPARAM_H</span>00003 <span class="preprocessor"></span>00004 <span class="preprocessor">#include "<a class="code" href="cryptlib_8h.html">cryptlib.h</a>"</span>00005 <span class="preprocessor">#include "smartptr.h"</span>00006 <span class="preprocessor">#include "secblock.h"</span>00007 00008 NAMESPACE_BEGIN(CryptoPP)00009 00010 <span class="comment">//! used to pass byte array input as part of a NameValuePairs object</span>00011 <span class="comment"></span><span class="comment">/*! the deepCopy option is used when the NameValuePairs object can't</span>00012 <span class="comment">        keep a copy of the data available */</span><a name="l00013"></a><a class="code" href="class_const_byte_array_parameter.html">00013</a> <span class="keyword">class </span><a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a>00014 {00015 <span class="keyword">public</span>:00016         <a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *data = NULL, <span class="keywordtype">bool</span> deepCopy = <span class="keyword">false</span>)00017         {00018                 Assign((<span class="keyword">const</span> byte *)data, data ? strlen(data) : 0, deepCopy);00019         }00020         <a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a>(<span class="keyword">const</span> byte *data, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size, <span class="keywordtype">bool</span> deepCopy = <span class="keyword">false</span>)00021         {00022                 Assign(data, size, deepCopy);00023         }00024         <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt; <a class="code" href="class_const_byte_array_parameter.html">ConstByteArrayParameter</a>(<span class="keyword">const</span> T &amp;string, <span class="keywordtype">bool</span> deepCopy = <span class="keyword">false</span>)00025         {00026                 CRYPTOPP_COMPILE_ASSERT(<span class="keyword">sizeof</span>(string[0])==1);00027                 Assign((<span class="keyword">const</span> byte *)string.data(), string.size(), deepCopy);00028         }00029 00030         <span class="keywordtype">void</span> Assign(<span class="keyword">const</span> byte *data, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size, <span class="keywordtype">bool</span> deepCopy)00031         {00032                 <span class="keywordflow">if</span> (deepCopy)00033                         m_block.<a class="code" href="class_sec_block.html#_sec_block_with_hinta15">Assign</a>(data, size);00034                 <span class="keywordflow">else</span>00035                 {00036                         m_data = data;00037                         m_size = size;00038                 }00039                 m_deepCopy = deepCopy;00040         }00041 00042         <span class="keyword">const</span> byte *begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_deepCopy ? m_block.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>() : m_data;}00043         <span class="keyword">const</span> byte *end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_deepCopy ? m_block.<a class="code" href="class_sec_block.html#_sec_block_with_hinta9">end</a>() : m_data + m_size;}00044         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_deepCopy ? m_block.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>() : m_size;}00045 00046 <span class="keyword">private</span>:00047         <span class="keywordtype">bool</span> m_deepCopy;00048         <span class="keyword">const</span> byte *m_data;00049         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_size;00050         <a class="code" href="class_sec_block.html">SecByteBlock</a> m_block;00051 };00052 00053 <span class="keyword">class </span>ByteArrayParameter00054 {00055 <span class="keyword">public</span>:00056         ByteArrayParameter(byte *data = NULL, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size = 0)00057                 : m_data(data), m_size(size) {}00058         ByteArrayParameter(<a class="code" href="class_sec_block.html">SecByteBlock</a> &amp;block)00059                 : m_data(block.begin()), m_size(block.size()) {}00060 00061         byte *begin()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_data;}00062         byte *end()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_data + m_size;}00063         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_size;}00064 00065 <span class="keyword">private</span>:00066         byte *m_data;00067         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> m_size;00068 };00069 00070 <span class="keyword">class </span>CombinedNameValuePairs : <span class="keyword">public</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a>00071 {00072 <span class="keyword">public</span>:00073         CombinedNameValuePairs(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;pairs1, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;pairs2)00074                 : m_pairs1(pairs1), m_pairs2(pairs2) {}00075 00076         <span class="keywordtype">bool</span> GetVoidValue(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)<span class="keyword"> const</span>00077 <span class="keyword">        </span>{00078                 <span class="keywordflow">if</span> (strcmp(name, <span class="stringliteral">"ValueNames"</span>) == 0)00079                         <span class="keywordflow">return</span> m_pairs1.GetVoidValue(name, valueType, pValue) &amp;&amp; m_pairs2.GetVoidValue(name, valueType, pValue);00080                 <span class="keywordflow">else</span>00081                         <span class="keywordflow">return</span> m_pairs1.GetVoidValue(name, valueType, pValue) || m_pairs2.GetVoidValue(name, valueType, pValue);00082         }00083 00084         <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;m_pairs1, &amp;m_pairs2;00085 };00086 00087 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> BASE&gt;00088 <span class="keyword">class </span>GetValueHelperClass00089 {00090 <span class="keyword">public</span>:00091         GetValueHelperClass(<span class="keyword">const</span> T *pObject, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)00092                 : m_pObject(pObject), m_name(name), m_valueType(&amp;valueType), m_pValue(pValue), m_found(false), m_getValueNames(false)00093         {00094                 <span class="keywordflow">if</span> (strcmp(name, <span class="stringliteral">"ValueNames"</span>) == 0)00095                         m_found = m_getValueNames = <span class="keyword">true</span>;00096 00097                 std::string thisPointerName = std::string(<span class="stringliteral">"ThisPointer:"</span>) + <span class="keyword">typeid</span>(T).name();00098 00099                 <span class="keywordflow">if</span> (m_getValueNames)00100                 {00101                         <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">NameValuePairs::ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(std::string), *m_valueType);00102                         <span class="keywordflow">if</span> (<span class="keyword">typeid</span>(T) != <span class="keyword">typeid</span>(BASE))00103                                 pObject-&gt;BASE::GetVoidValue(name, valueType, pValue);00104                         (*reinterpret_cast&lt;std::string *&gt;(m_pValue) += thisPointerName) += <span class="stringliteral">";"</span>;00105                 }00106                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (name == thisPointerName)00107                 {00108                         <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">NameValuePairs::ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(T *), *m_valueType);00109                         *reinterpret_cast&lt;const T **&gt;(pValue) = pObject;00110                         m_found = <span class="keyword">true</span>;00111                 }00112                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">typeid</span>(T) != <span class="keyword">typeid</span>(BASE))00113                         m_found = pObject-&gt;BASE::GetVoidValue(name, valueType, pValue);00114         }00115 00116         operator bool()<span class="keyword"> const </span>{<span class="keywordflow">return</span> m_found;}00117 00118         <span class="keyword">template</span> &lt;<span class="keyword">class</span> R&gt;00119         GetValueHelperClass&lt;T,BASE&gt; &amp; operator()(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> R &amp; (T::*pm)() <span class="keyword">const</span>)00120         {00121                 <span class="keywordflow">if</span> (m_getValueNames)00122                         (*reinterpret_cast&lt;std::string *&gt;(m_pValue) += name) += <span class="stringliteral">";"</span>;00123                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!m_found &amp;&amp; strcmp(name, m_name) == 0)00124                 {00125                         <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">NameValuePairs::ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(R), *m_valueType);00126                         *reinterpret_cast&lt;R *&gt;(m_pValue) = (m_pObject-&gt;*pm)();00127                         m_found = <span class="keyword">true</span>;00128                 }00129                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00130         }00131 00132         GetValueHelperClass&lt;T,BASE&gt; &amp;Assignable()00133         {00134                 std::string thisObjectName = std::string(<span class="stringliteral">"ThisObject:"</span>) + <span class="keyword">typeid</span>(T).name();00135                 <span class="keywordflow">if</span> (m_getValueNames)00136                         (*reinterpret_cast&lt;std::string *&gt;(m_pValue) += thisObjectName) += <span class="stringliteral">";"</span>;00137                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!m_found &amp;&amp; m_name == thisObjectName)00138                 {00139                         <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">NameValuePairs::ThrowIfTypeMismatch</a>(m_name, <span class="keyword">typeid</span>(T), *m_valueType);00140                         *reinterpret_cast&lt;T *&gt;(m_pValue) = *m_pObject;00141                         m_found = <span class="keyword">true</span>;00142                 }00143                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00144         }00145 00146 <span class="keyword">private</span>:00147         <span class="keyword">const</span> T *m_pObject;00148         <span class="keyword">const</span> <span class="keywordtype">char</span> *m_name;00149         <span class="keyword">const</span> std::type_info *m_valueType;00150         <span class="keywordtype">void</span> *m_pValue;00151         <span class="keywordtype">bool</span> m_found, m_getValueNames;00152 };00153 00154 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BASE, <span class="keyword">class</span> T&gt;00155 GetValueHelperClass&lt;T, BASE&gt; GetValueHelper(<span class="keyword">const</span> T *pObject, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue, BASE *dummy=NULL)00156 {00157         <span class="keywordflow">return</span> GetValueHelperClass&lt;T, BASE&gt;(pObject, name, valueType, pValue);00158 }00159 00160 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00161 GetValueHelperClass&lt;T, T&gt; GetValueHelper(<span class="keyword">const</span> T *pObject, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> std::type_info &amp;valueType, <span class="keywordtype">void</span> *pValue)00162 {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -