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

📄 factory_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00052"></a>00052         }<a name="l00053"></a>00053 <a name="l00054"></a><a class="code" href="class_object_factory_registry.html#a9808643e83d041d599157780656bfe8">00054</a>         <span class="keyword">const</span> <a class="code" href="class_object_factory.html" title="_">ObjectFactory&lt;AbstractClass&gt;</a> * <a class="code" href="class_object_factory_registry.html#a9808643e83d041d599157780656bfe8">GetFactory</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)<span class="keyword"> const</span><a name="l00055"></a>00055 <span class="keyword">        </span>{<a name="l00056"></a>00056                 CPP_TYPENAME Map::const_iterator i = m_map.find(name);<a name="l00057"></a>00057                 <span class="keywordflow">return</span> i == m_map.end() ? NULL : (<a class="code" href="class_object_factory.html" title="_">ObjectFactory&lt;AbstractClass&gt;</a> *)i-&gt;second;<a name="l00058"></a>00058         }<a name="l00059"></a>00059 <a name="l00060"></a><a class="code" href="class_object_factory_registry.html#ac1346e4b76fe2d6112f2f662f083890">00060</a>         AbstractClass *<a class="code" href="class_object_factory_registry.html#ac1346e4b76fe2d6112f2f662f083890">CreateObject</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)<span class="keyword"> const</span><a name="l00061"></a>00061 <span class="keyword">        </span>{<a name="l00062"></a>00062                 <span class="keyword">const</span> <a class="code" href="class_object_factory.html" title="_">ObjectFactory&lt;AbstractClass&gt;</a> *factory = <a class="code" href="class_object_factory_registry.html#a9808643e83d041d599157780656bfe8">GetFactory</a>(name);<a name="l00063"></a>00063                 <span class="keywordflow">if</span> (!factory)<a name="l00064"></a>00064                         <span class="keywordflow">throw</span> <a class="code" href="class_object_factory_registry_1_1_factory_not_found.html">FactoryNotFound</a>(name);<a name="l00065"></a>00065                 <span class="keywordflow">return</span> factory-&gt;<a class="code" href="class_object_factory.html#e7590aab453f7c444e76c5369c35143c">CreateObject</a>();<a name="l00066"></a>00066         }<a name="l00067"></a>00067 <a name="l00068"></a>00068         CRYPTOPP_NOINLINE <span class="keyword">static</span> <a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;AbstractClass, instance&gt;</a> &amp; <a class="code" href="class_object_factory_registry.html#bf6a8b9c6b2ad6090099dc2bd919961a">Registry</a>(CRYPTOPP_NOINLINE_DOTDOTDOT);<a name="l00069"></a>00069 <a name="l00070"></a>00070 <span class="keyword">private</span>:<a name="l00071"></a>00071         <span class="comment">// use void * instead of ObjectFactory&lt;AbstractClass&gt; * to save code size</span><a name="l00072"></a>00072         <span class="keyword">typedef</span> std::map&lt;std::string, void *&gt; Map;<a name="l00073"></a>00073         Map m_map;<a name="l00074"></a>00074 };<a name="l00075"></a>00075 <a name="l00076"></a>00076 <span class="keyword">template</span> &lt;<span class="keyword">class</span> AbstractClass, <span class="keywordtype">int</span> instance&gt;<a name="l00077"></a><a class="code" href="class_object_factory_registry.html#bf6a8b9c6b2ad6090099dc2bd919961a">00077</a> <a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;AbstractClass, instance&gt;</a> &amp; <a class="code" href="class_object_factory_registry.html#bf6a8b9c6b2ad6090099dc2bd919961a">ObjectFactoryRegistry&lt;AbstractClass, instance&gt;::Registry</a>(CRYPTOPP_NOINLINE_DOTDOTDOT)<a name="l00078"></a>00078 {<a name="l00079"></a>00079         <span class="keyword">static</span> <a class="code" href="class_object_factory_registry.html" title="_">ObjectFactoryRegistry&lt;AbstractClass, instance&gt;</a> s_registry;<a name="l00080"></a>00080         <span class="keywordflow">return</span> s_registry;<a name="l00081"></a>00081 }<a name="l00082"></a>00082 <a name="l00083"></a>00083 <span class="keyword">template</span> &lt;<span class="keyword">class</span> AbstractClass, <span class="keyword">class</span> ConcreteClass, <span class="keywordtype">int</span> instance = 0&gt;<a name="l00084"></a><a class="code" href="struct_register_default_factory_for.html">00084</a> <span class="keyword">struct </span><a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor</a> {<a name="l00085"></a><a class="code" href="struct_register_default_factory_for.html#2418ace62fed38cad6bc6b956382dbef">00085</a> <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name=NULL)<a name="l00086"></a>00086 {<a name="l00087"></a>00087         <span class="comment">// BCB2006 workaround</span><a name="l00088"></a>00088         std::string n = name ? std::string(name) : std::string(ConcreteClass::StaticAlgorithmName());<a name="l00089"></a>00089         <a class="code" href="class_object_factory_registry.html#bf6a8b9c6b2ad6090099dc2bd919961a">ObjectFactoryRegistry&lt;AbstractClass, instance&gt;::Registry</a>().<a name="l00090"></a>00090                 <a class="code" href="class_object_factory_registry.html#54e83f0eced96099d63a2a03e3b68210">RegisterFactory</a>(n, <span class="keyword">new</span> <a class="code" href="class_default_object_factory.html" title="_">DefaultObjectFactory&lt;AbstractClass, ConcreteClass&gt;</a>);<a name="l00091"></a>00091 }};<a name="l00092"></a>00092 <a name="l00093"></a>00093 <span class="keyword">template</span> &lt;<span class="keyword">class</span> SchemeClass&gt;<a name="l00094"></a>00094 <span class="keywordtype">void</span> RegisterAsymmetricCipherDefaultFactories(<span class="keyword">const</span> <span class="keywordtype">char</span> *name=NULL, SchemeClass *dummy=NULL)<a name="l00095"></a>00095 {<a name="l00096"></a>00096         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;PK_Encryptor, CPP_TYPENAME SchemeClass::Encryptor&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00097"></a>00097         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;PK_Decryptor, CPP_TYPENAME SchemeClass::Decryptor&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00098"></a>00098 }<a name="l00099"></a>00099 <a name="l00100"></a>00100 <span class="keyword">template</span> &lt;<span class="keyword">class</span> SchemeClass&gt;<a name="l00101"></a>00101 <span class="keywordtype">void</span> RegisterSignatureSchemeDefaultFactories(<span class="keyword">const</span> <span class="keywordtype">char</span> *name=NULL, SchemeClass *dummy=NULL)<a name="l00102"></a>00102 {<a name="l00103"></a>00103         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;PK_Signer, CPP_TYPENAME SchemeClass::Signer&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00104"></a>00104         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;PK_Verifier, CPP_TYPENAME SchemeClass::Verifier&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00105"></a>00105 }<a name="l00106"></a>00106 <a name="l00107"></a>00107 <span class="keyword">template</span> &lt;<span class="keyword">class</span> SchemeClass&gt;<a name="l00108"></a>00108 <span class="keywordtype">void</span> RegisterSymmetricCipherDefaultFactories(<span class="keyword">const</span> <span class="keywordtype">char</span> *name=NULL, SchemeClass *dummy=NULL)<a name="l00109"></a>00109 {<a name="l00110"></a>00110         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;SymmetricCipher, CPP_TYPENAME SchemeClass::Encryption, ENCRYPTION&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00111"></a>00111         <a class="code" href="struct_register_default_factory_for.html">RegisterDefaultFactoryFor&lt;SymmetricCipher, CPP_TYPENAME SchemeClass::Decryption, DECRYPTION&gt;</a>((<span class="keyword">const</span> <span class="keywordtype">char</span> *)name);<a name="l00112"></a>00112 }<a name="l00113"></a>00113 <a name="l00114"></a>00114 NAMESPACE_END<a name="l00115"></a>00115 <a name="l00116"></a>00116 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:21 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

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