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

📄 algparam_8h-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 2 页
字号:
00163         <span class="keywordflow">return</span> GetValueHelperClass&lt;T, T&gt;(pObject, name, valueType, pValue);00164 }00165 00166 <span class="comment">// ********************************************************</span>00167 00168 <span class="keyword">template</span> &lt;<span class="keyword">class</span> R&gt;00169 R Hack_DefaultValueFromConstReferenceType(<span class="keyword">const</span> R &amp;)00170 {00171         <span class="keywordflow">return</span> R();00172 }00173 00174 <span class="keyword">template</span> &lt;<span class="keyword">class</span> R&gt;00175 <span class="keywordtype">bool</span> Hack_GetValueIntoConstReference(<span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> R &amp;value)00176 {00177         <span class="keywordflow">return</span> source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha39">GetValue</a>(name, const_cast&lt;R &amp;&gt;(value));00178 }00179 00180 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> BASE&gt;00181 <span class="keyword">class </span>AssignFromHelperClass00182 {00183 <span class="keyword">public</span>:00184         AssignFromHelperClass(T *pObject, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00185                 : m_pObject(pObject), m_source(source), m_done(false)00186         {00187                 <span class="keywordflow">if</span> (source.<a class="code" href="class_name_value_pairs.html#_x_t_r___d_ha37">GetThisObject</a>(*pObject))00188                         m_done = <span class="keyword">true</span>;00189                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">typeid</span>(BASE) != <span class="keyword">typeid</span>(T))00190                         pObject-&gt;BASE::AssignFrom(source);00191         }00192 00193         <span class="keyword">template</span> &lt;<span class="keyword">class</span> R&gt;00194         AssignFromHelperClass &amp; operator()(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">void</span> (T::*pm)(R))  <span class="comment">// VC60 workaround: "const R &amp;" here causes compiler error</span>00195         {00196                 <span class="keywordflow">if</span> (!m_done)00197                 {00198                         R value = Hack_DefaultValueFromConstReferenceType(reinterpret_cast&lt;R&gt;(*(<span class="keywordtype">int</span> *)NULL));00199                         <span class="keywordflow">if</span> (!Hack_GetValueIntoConstReference(m_source, name, value))00200                                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(std::string(<span class="keyword">typeid</span>(T).name()) + <span class="stringliteral">": Missing required parameter '"</span> + name + <span class="stringliteral">"'"</span>);00201                         (m_pObject-&gt;*pm)(value);00202                 }00203                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00204         }00205 00206         <span class="keyword">template</span> &lt;<span class="keyword">class</span> R, <span class="keyword">class</span> S&gt;00207         AssignFromHelperClass &amp; operator()(<span class="keyword">const</span> <span class="keywordtype">char</span> *name1, <span class="keyword">const</span> <span class="keywordtype">char</span> *name2, <span class="keywordtype">void</span> (T::*pm)(R, S))   <span class="comment">// VC60 workaround: "const R &amp;" here causes compiler error</span>00208         {00209                 <span class="keywordflow">if</span> (!m_done)00210                 {00211                         R value1 = Hack_DefaultValueFromConstReferenceType(reinterpret_cast&lt;R&gt;(*(<span class="keywordtype">int</span> *)NULL));00212                         <span class="keywordflow">if</span> (!Hack_GetValueIntoConstReference(m_source, name1, value1))00213                                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(std::string(<span class="keyword">typeid</span>(T).name()) + <span class="stringliteral">": Missing required parameter '"</span> + name1 + <span class="stringliteral">"'"</span>);00214                         S value2 = Hack_DefaultValueFromConstReferenceType(reinterpret_cast&lt;S&gt;(*(<span class="keywordtype">int</span> *)NULL));00215                         <span class="keywordflow">if</span> (!Hack_GetValueIntoConstReference(m_source, name2, value2))00216                                 <span class="keywordflow">throw</span> <a class="code" href="class_invalid_argument.html">InvalidArgument</a>(std::string(<span class="keyword">typeid</span>(T).name()) + <span class="stringliteral">": Missing required parameter '"</span> + name2 + <span class="stringliteral">"'"</span>);00217                         (m_pObject-&gt;*pm)(value1, value2);00218                 }00219                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;00220         }00221 00222 <span class="keyword">private</span>:00223         T *m_pObject;00224         <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;m_source;00225         <span class="keywordtype">bool</span> m_done;00226 };00227 00228 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BASE, <span class="keyword">class</span> T&gt;00229 AssignFromHelperClass&lt;T, BASE&gt; AssignFromHelper(T *pObject, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source, BASE *dummy=NULL)00230 {00231         <span class="keywordflow">return</span> AssignFromHelperClass&lt;T, BASE&gt;(pObject, source);00232 }00233 00234 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00235 AssignFromHelperClass&lt;T, T&gt; AssignFromHelper(T *pObject, <span class="keyword">const</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a> &amp;source)00236 {00237         <span class="keywordflow">return</span> AssignFromHelperClass&lt;T, T&gt;(pObject, source);00238 }00239 00240 <span class="comment">// ********************************************************</span>00241 00242 CRYPTOPP_DLL <span class="keywordtype">void</span> AssignIntToInteger(<span class="keywordtype">void</span> *pInteger, <span class="keyword">const</span> <span class="keywordtype">void</span> *pInt);00243 00244 CRYPTOPP_DLL <span class="keyword">extern</span> <span class="keyword">const</span> std::type_info &amp;g_typeidInteger;00245 00246 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BASE, <span class="keyword">class</span> T&gt;00247 <span class="keyword">class </span>AlgorithmParameters : <span class="keyword">public</span> <a class="code" href="class_name_value_pairs.html">NameValuePairs</a>00248 {00249 <span class="keyword">public</span>:00250         AlgorithmParameters(<span class="keyword">const</span> BASE &amp;base, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> T &amp;value)00251                 : m_base(base), m_name(name), m_value(value)00252 #ifndef NDEBUG00253                 , m_used(false)00254 #endif00255         {}00256 00257 <span class="preprocessor">#ifndef NDEBUG</span>00258 <span class="preprocessor"></span>        AlgorithmParameters(<span class="keyword">const</span> AlgorithmParameters &amp;copy)00259                 : m_base(copy.m_base), m_name(copy.m_name), m_value(copy.m_value), m_used(false)00260         {00261                 copy.m_used = <span class="keyword">true</span>;00262         }00263 00264         <span class="comment">// TODO: revisit after implementing some tracing mechanism, this won't work because of exceptions</span>00265 <span class="comment">//      ~AlgorithmParameters() {assert(m_used);}        // use assert here because we don't want to throw out of a destructor</span>00266 <span class="preprocessor">#endif</span>00267 <span class="preprocessor"></span>00268         <span class="keyword">template</span> &lt;<span class="keyword">class</span> R&gt;00269         AlgorithmParameters&lt;AlgorithmParameters&lt;BASE,T&gt;, R&gt; operator()(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> R &amp;value)<span class="keyword"> const</span>00270 <span class="keyword">        </span>{00271                 <span class="keywordflow">return</span> AlgorithmParameters&lt;AlgorithmParameters&lt;BASE,T&gt;, R&gt;(*<span class="keyword">this</span>, name, value);00272         }00273 00274         <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>00275 <span class="keyword">        </span>{00276                 <span class="keywordflow">if</span> (strcmp(name, <span class="stringliteral">"ValueNames"</span>) == 0)00277                 {00278                         <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(std::string), valueType);00279                         m_base.GetVoidValue(name, valueType, pValue);00280                         (*reinterpret_cast&lt;std::string *&gt;(pValue) += m_name) += <span class="stringliteral">";"</span>;00281                         <span class="keywordflow">return</span> <span class="keyword">true</span>;00282                 }00283                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (strcmp(name, m_name) == 0)00284                 {00285                         <span class="comment">// special case for retrieving an Integer parameter when an int was passed in</span>00286                         <span class="keywordflow">if</span> (valueType == g_typeidInteger &amp;&amp; <span class="keyword">typeid</span>(T) == <span class="keyword">typeid</span>(<span class="keywordtype">int</span>))00287                                 AssignIntToInteger(pValue, &amp;m_value);00288                         <span class="keywordflow">else</span>00289                         {00290                                 <a class="code" href="class_name_value_pairs.html#_x_t_r___d_he0">ThrowIfTypeMismatch</a>(name, <span class="keyword">typeid</span>(T), valueType);00291                                 *reinterpret_cast&lt;T *&gt;(pValue) = m_value;00292                         }00293 <span class="preprocessor">#ifndef NDEBUG</span>00294 <span class="preprocessor"></span>                        m_used = <span class="keyword">true</span>;00295 <span class="preprocessor">#endif</span>00296 <span class="preprocessor"></span>                        <span class="keywordflow">return</span> <span class="keyword">true</span>;00297                 }00298                 <span class="keywordflow">else</span>00299                         <span class="keywordflow">return</span> m_base.GetVoidValue(name, valueType, pValue);00300         }00301 00302 <span class="keyword">private</span>:00303         BASE m_base;00304         <span class="keyword">const</span> <span class="keywordtype">char</span> *m_name;00305         T m_value;00306 <span class="preprocessor">#ifndef NDEBUG</span>00307 <span class="preprocessor"></span>        <span class="keyword">mutable</span> <span class="keywordtype">bool</span> m_used;00308 <span class="preprocessor">#endif</span>00309 <span class="preprocessor"></span>};00310 00311 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;00312 AlgorithmParameters&lt;NullNameValuePairs,T&gt; MakeParameters(<span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> T &amp;value)00313 {00314         <span class="keywordflow">return</span> AlgorithmParameters&lt;NullNameValuePairs,T&gt;(g_nullNameValuePairs, name, value);00315 }00316 00317 <span class="preprocessor">#define CRYPTOPP_GET_FUNCTION_ENTRY(name)               (Name::name(), &amp;ThisClass::Get##name)</span>00318 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_SET_FUNCTION_ENTRY(name)               (Name::name(), &amp;ThisClass::Set##name)</span>00319 <span class="preprocessor"></span><span class="preprocessor">#define CRYPTOPP_SET_FUNCTION_ENTRY2(name1, name2)      (Name::name1(), Name::name2(), &amp;ThisClass::Set##name1##And##name2)</span>00320 <span class="preprocessor"></span>00321 NAMESPACE_END00322 00323 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:07 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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