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

📄 pfactory_8h-source.html

📁 pwlib开发文档
💻 HTML
📖 第 1 页 / 共 3 页
字号:
00183     <span class="keyword">static</span> FactoryMap &amp; <a class="code" href="classPFactoryBase.html#d0">GetFactories</a>();00184     <span class="keyword">static</span> <a class="code" href="classPMutex.html">PMutex</a> &amp; <a class="code" href="classPFactoryBase.html#d1">GetFactoriesMutex</a>();00185 <a name="l00186"></a><a class="code" href="classPFactoryBase.html#m0">00186</a>     <a class="code" href="classPMutex.html">PMutex</a> <a class="code" href="classPFactoryBase.html#m0">mutex</a>;00187 00188   <span class="keyword">private</span>:00189     <a class="code" href="classPFactoryBase.html#b0">PFactoryBase</a>(<span class="keyword">const</span> <a class="code" href="classPFactoryBase.html">PFactoryBase</a> &amp;) {}00190     <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classPFactoryBase.html">PFactoryBase</a> &amp;) {}00191 };00192 00193 00196 <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Abstract_T, <span class="keyword">typename</span> _Key_T = PString&gt;<a name="l00197"></a><a class="code" href="classPFactory.html">00197</a> <span class="keyword">class </span><a class="code" href="classPFactory.html">PFactory</a> : <a class="code" href="classPFactoryBase.html">PFactoryBase</a>00198 {00199   <span class="keyword">public</span>:<a name="l00200"></a><a class="code" href="classPFactory.html#s0">00200</a>     <span class="keyword">typedef</span> _Key_T      <a class="code" href="classPFactory.html#s0">Key_T</a>;<a name="l00201"></a><a class="code" href="classPFactory.html#s1">00201</a>     <span class="keyword">typedef</span> _Abstract_T <a class="code" href="classPFactory.html#s1">Abstract_T</a>;00202 <a name="l00203"></a><a class="code" href="classPFactory_1_1WorkerBase.html">00203</a>     <span class="keyword">class </span><a class="code" href="classPFactory_1_1WorkerBase.html">WorkerBase</a>00204     {00205       <span class="keyword">protected</span>:<a name="l00206"></a><a class="code" href="classPFactory_1_1WorkerBase.html#b0">00206</a>         <a class="code" href="classPFactory_1_1WorkerBase.html#b0">WorkerBase</a>(<span class="keywordtype">bool</span> singleton = <span class="keyword">false</span>)00207           : <a class="code" href="classPFactory_1_1WorkerBase.html#n0">isDynamic</a>(false),00208             <a class="code" href="classPFactory_1_1WorkerBase.html#n1">isSingleton</a>(singleton),00209             <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>(NULL),00210             <a class="code" href="classPFactory_1_1WorkerBase.html#n3">deleteSingleton</a>(false)00211         { }<a name="l00212"></a><a class="code" href="classPFactory_1_1WorkerBase.html#b1">00212</a>         <a class="code" href="classPFactory_1_1WorkerBase.html#b0">WorkerBase</a>(Abstract_T * instance)00213           : <a class="code" href="classPFactory_1_1WorkerBase.html#n1">isSingleton</a>(true),00214             <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>(instance),00215             <a class="code" href="classPFactory_1_1WorkerBase.html#n3">deleteSingleton</a>(true)00216         { }00217 <a name="l00218"></a><a class="code" href="classPFactory_1_1WorkerBase.html#b2">00218</a>         <span class="keyword">virtual</span> <a class="code" href="classPFactory_1_1WorkerBase.html#b2">~WorkerBase</a>()00219         {00220           <span class="keywordflow">if</span> (deleteSingleton)00221             <span class="keyword">delete</span> <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>;00222         }00223 <a name="l00224"></a><a class="code" href="classPFactory_1_1WorkerBase.html#b3">00224</a>         Abstract_T * <a class="code" href="classPFactory_1_1WorkerBase.html#b3">CreateInstance</a>(<span class="keyword">const</span> Key_T &amp; key)00225         {00226           <span class="keywordflow">if</span> (!<a class="code" href="classPFactory_1_1WorkerBase.html#n1">isSingleton</a>)00227             <span class="keywordflow">return</span> <a class="code" href="classPFactory_1_1WorkerBase.html#b4">Create</a>(key);00228 00229           <span class="keywordflow">if</span> (<a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a> == NULL)00230             <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a> = <a class="code" href="classPFactory_1_1WorkerBase.html#b4">Create</a>(key);00231           <span class="keywordflow">return</span> <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>;00232         }00233 <a name="l00234"></a><a class="code" href="classPFactory_1_1WorkerBase.html#b4">00234</a>         <span class="keyword">virtual</span> Abstract_T * <a class="code" href="classPFactory_1_1WorkerBase.html#b4">Create</a>(<span class="keyword">const</span> Key_T &amp; <span class="comment">/*key*/</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>; }00235 <a name="l00236"></a><a class="code" href="classPFactory_1_1WorkerBase.html#n0">00236</a>         <span class="keywordtype">bool</span>         <a class="code" href="classPFactory_1_1WorkerBase.html#n0">isDynamic</a>;<a name="l00237"></a><a class="code" href="classPFactory_1_1WorkerBase.html#n1">00237</a>         <span class="keywordtype">bool</span>         <a class="code" href="classPFactory_1_1WorkerBase.html#n1">isSingleton</a>;<a name="l00238"></a><a class="code" href="classPFactory_1_1WorkerBase.html#n2">00238</a>         Abstract_T * <a class="code" href="classPFactory_1_1WorkerBase.html#n2">singletonInstance</a>;<a name="l00239"></a><a class="code" href="classPFactory_1_1WorkerBase.html#n3">00239</a>         <span class="keywordtype">bool</span>         <a class="code" href="classPFactory_1_1WorkerBase.html#n3">deleteSingleton</a>;00240 <a name="l00241"></a><a class="code" href="classPFactory_1_1WorkerBase.html#l0">00241</a>       <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classPFactory.html">PFactory</a>&lt;_Abstract_T, _Key_T&gt;;00242     };00243 00244     <span class="keyword">template</span> &lt;<span class="keyword">class</span> _Concrete_T&gt;<a name="l00245"></a><a class="code" href="classPFactory_1_1Worker.html">00245</a>     <span class="keyword">class </span><a class="code" href="classPFactory_1_1Worker.html">Worker</a> : <a class="code" href="classPFactory_1_1WorkerBase.html">WorkerBase</a>00246     {00247       <span class="keyword">public</span>:<a name="l00248"></a><a class="code" href="classPFactory_1_1Worker.html#a0">00248</a>         <a class="code" href="classPFactory_1_1Worker.html#a0">Worker</a>(<span class="keyword">const</span> Key_T &amp; key, <span class="keywordtype">bool</span> singleton = <span class="keyword">false</span>)00249           : <a class="code" href="classPFactory_1_1WorkerBase.html">WorkerBase</a>(singleton)00250         {00251           <a class="code" href="classPFactory.html#d0">PFactory&lt;_Abstract_T, _Key_T&gt;::Register</a>(key, <span class="keyword">this</span>);   <span class="comment">// here</span>00252         }00253 00254       <span class="keyword">protected</span>:<a name="l00255"></a><a class="code" href="classPFactory_1_1Worker.html#b0">00255</a>         <span class="keyword">virtual</span> Abstract_T * <a class="code" href="classPFactory_1_1Worker.html#b0">Create</a>(<span class="keyword">const</span> Key_T &amp; <span class="comment">/*key*/</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">new</span> _Concrete_T; }00256     };00257 <a name="l00258"></a><a class="code" href="classPFactory.html#s2">00258</a>     <span class="keyword">typedef</span> std::map&lt;_Key_T, WorkerBase *&gt; <a class="code" href="classPFactory.html#s2">KeyMap_T</a>;<a name="l00259"></a><a class="code" href="classPFactory.html#s3">00259</a>     <span class="keyword">typedef</span> std::vector&lt;_Key_T&gt; <a class="code" href="classPFactory.html#s3">KeyList_T</a>;00260 <a name="l00261"></a><a class="code" href="classPFactory.html#d0">00261</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPFactory.html#d0">Register</a>(<span class="keyword">const</span> _Key_T &amp; key, <a class="code" href="classPFactory_1_1WorkerBase.html">WorkerBase</a> * worker)00262     {00263       <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b2">Register_Internal</a>(key, worker);00264     }00265 <a name="l00266"></a><a class="code" href="classPFactory.html#d1">00266</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPFactory.html#d0">Register</a>(<span class="keyword">const</span> _Key_T &amp; key, <a class="code" href="classPFactory.html#s1">Abstract_T</a> * instance)00267     {00268       <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b2">Register_Internal</a>(key, <span class="keyword">new</span> <a class="code" href="classPFactory_1_1WorkerBase.html">WorkerBase</a>(instance));00269     }00270 <a name="l00271"></a><a class="code" href="classPFactory.html#d2">00271</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPFactory.html#d2">Unregister</a>(<span class="keyword">const</span> _Key_T &amp; key)00272     {00273       <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b3">Unregister_Internal</a>(key);00274     }00275 <a name="l00276"></a><a class="code" href="classPFactory.html#d3">00276</a>     <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classPFactory.html#d3">UnregisterAll</a>()00277     {00278       <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b4">UnregisterAll_Internal</a>();00279     }00280 <a name="l00281"></a><a class="code" href="classPFactory.html#d4">00281</a>     <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="classPFactory.html#d4">IsRegistered</a>(<span class="keyword">const</span> _Key_T &amp; key)00282     {00283       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b5">IsRegistered_Internal</a>(key);00284     }00285 <a name="l00286"></a><a class="code" href="classPFactory.html#d5">00286</a>     <span class="keyword">static</span> _Abstract_T * <a class="code" href="classPFactory.html#d5">CreateInstance</a>(<span class="keyword">const</span> _Key_T &amp; key)00287     {00288       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b6">CreateInstance_Internal</a>(key);00289     }00290 <a name="l00291"></a><a class="code" href="classPFactory.html#d6">00291</a>     <span class="keyword">static</span> BOOL <a class="code" href="classPFactory.html#d6">IsSingleton</a>(<span class="keyword">const</span> _Key_T &amp; key)00292     {00293       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b7">IsSingleton_Internal</a>(key);00294     }00295 <a name="l00296"></a><a class="code" href="classPFactory.html#d7">00296</a>     <span class="keyword">static</span> <a class="code" href="classPFactory.html#s3">KeyList_T</a> <a class="code" href="classPFactory.html#d7">GetKeyList</a>()00297     { 00298       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#b8">GetKeyList_Internal</a>();00299     }00300 <a name="l00301"></a><a class="code" href="classPFactory.html#d8">00301</a>     <span class="keyword">static</span> <a class="code" href="classPFactory.html#s2">KeyMap_T</a> &amp; <a class="code" href="classPFactory.html#d8">GetKeyMap</a>()00302     { 00303       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactory.html#n0">keyMap</a>;00304     }00305 <a name="l00306"></a><a class="code" href="classPFactory.html#d9">00306</a>     <span class="keyword">static</span> <a class="code" href="classPMutex.html">PMutex</a> &amp; <a class="code" href="classPFactory.html#d9">GetMutex</a>()00307     {00308       <span class="keywordflow">return</span> <a class="code" href="classPFactory.html#e0">GetInstance</a>().<a class="code" href="classPFactoryBase.html#m0">mutex</a>;00309     }00310 00311   <span class="keyword">protected</span>:<a name="l00312"></a><a class="code" href="classPFactory.html#b0">00312</a>     <a class="code" href="classPFactory.html#b0">PFactory</a>()00313     { }00314 <a name="l00315"></a><a class="code" href="classPFactory.html#b1">00315</a>     <a class="code" href="classPFactory.html#b1">~PFactory</a>()00316     {

⌨️ 快捷键说明

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