📄 factory_8h-source.html
字号:
<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<AbstractClass></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<AbstractClass></a> *)i->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<AbstractClass></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-><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<AbstractClass, instance></a> & <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<AbstractClass> * to save code size</span><a name="l00072"></a>00072 <span class="keyword">typedef</span> std::map<std::string, void *> 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> <<span class="keyword">class</span> AbstractClass, <span class="keywordtype">int</span> instance><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<AbstractClass, instance></a> & <a class="code" href="class_object_factory_registry.html#bf6a8b9c6b2ad6090099dc2bd919961a">ObjectFactoryRegistry<AbstractClass, instance>::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<AbstractClass, instance></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> <<span class="keyword">class</span> AbstractClass, <span class="keyword">class</span> ConcreteClass, <span class="keywordtype">int</span> instance = 0><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<AbstractClass, instance>::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<AbstractClass, ConcreteClass></a>);<a name="l00091"></a>00091 }};<a name="l00092"></a>00092 <a name="l00093"></a>00093 <span class="keyword">template</span> <<span class="keyword">class</span> SchemeClass><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<PK_Encryptor, CPP_TYPENAME SchemeClass::Encryptor></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<PK_Decryptor, CPP_TYPENAME SchemeClass::Decryptor></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> <<span class="keyword">class</span> SchemeClass><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<PK_Signer, CPP_TYPENAME SchemeClass::Signer></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<PK_Verifier, CPP_TYPENAME SchemeClass::Verifier></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> <<span class="keyword">class</span> SchemeClass><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<SymmetricCipher, CPP_TYPENAME SchemeClass::Encryption, ENCRYPTION></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<SymmetricCipher, CPP_TYPENAME SchemeClass::Decryption, DECRYPTION></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 <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 + -