📄 pfactory_8h-source.html
字号:
00183 <span class="keyword">static</span> FactoryMap & <a class="code" href="classPFactoryBase.html#d0">GetFactories</a>();00184 <span class="keyword">static</span> <a class="code" href="classPMutex.html">PMutex</a> & <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> &) {}00190 <span class="keywordtype">void</span> operator=(<span class="keyword">const</span> <a class="code" href="classPFactoryBase.html">PFactoryBase</a> &) {}00191 };00192 00193 00196 <span class="keyword">template</span> <<span class="keyword">class</span> _Abstract_T, <span class="keyword">typename</span> _Key_T = PString><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 & 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 & <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><_Abstract_T, _Key_T>;00242 };00243 00244 <span class="keyword">template</span> <<span class="keyword">class</span> _Concrete_T><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 & 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<_Abstract_T, _Key_T>::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 & <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<_Key_T, WorkerBase *> <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<_Key_T> <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 & 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 & 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 & 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 & 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 & 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 & 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> & <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> & <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 + -