00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _terimber_proto_h_
00029 #define _terimber_proto_h_
00030
00031 BEGIN_TERIMBER_NAMESPACE
00032 #pragma pack(4)
00033
00036 template < class C, class T, class A >
00037 class proto_creator
00038 {
00039 public:
00042 typedef T TYPE;
00045 typedef A ARG;
00047 static
00048 C&
00049 static_constructor()
00050 {
00051 return s_constructor;
00052 }
00054 static
00055 const A&
00056 get_default_arg()
00057 {
00058 return s_def_arg;
00059 }
00061 static
00062 size_t
00063 get_default_timeout()
00064 {
00065 return 1000;
00066 }
00068 static
00069 T*
00070 create( const A&
00071 )
00072 {
00073 return new T();
00074 }
00077 static
00078 void
00079 activate( T*,
00080 const A&
00081 )
00082 {
00083 }
00085 static
00086 bool
00087 find( T*,
00088 const A&
00089 )
00090 {
00091 return true;
00092 }
00094 static
00095 void
00096 back( T*,
00097 const A&
00098 )
00099 {
00100 }
00102 static
00103 void
00104 destroy( T* obj,
00105 const A&
00106 )
00107 {
00108 delete obj;
00109 }
00110
00112 static
00113 void
00114 deactivate( T*,
00115 const A&
00116 )
00117 {
00118 }
00119
00120 private:
00121 static A s_def_arg;
00122 static C s_constructor;
00123 };
00124
00126 template < class C, class T, class A >
00127 C proto_creator< C, T, A >::s_constructor;
00128
00129 template < class C, class T, class A >
00130 A proto_creator< C, T, A >::s_def_arg;
00131
00132
00133 #pragma pack()
00134 END_TERIMBER_NAMESPACE
00135
00136 #endif // _terimber_proto_h_