Go to the documentation of this file.
34 #ifndef memberFunctionSelectionTables_H
35 #define memberFunctionSelectionTables_H
45 #define declareMemberFunctionSelectionTable\
46 (returnType,baseType,memberFunction,argNames,argList,parList) \
49 typedef returnType (*memberFunction##argNames##MemberFunctionPtr)argList; \
53 <memberFunction##argNames##MemberFunctionPtr, word, string::hash> \
54 memberFunction##argNames##MemberFunctionTable; \
57 static memberFunction##argNames##MemberFunctionTable* \
58 memberFunction##argNames##MemberFunctionTablePtr_; \
61 template<class baseType##Type> \
62 class add##memberFunction##argNames##MemberFunctionToTable \
66 add##memberFunction##argNames##MemberFunctionToTable \
68 const word& lookup = baseType##Type::typeName \
71 construct##memberFunction##argNames##MemberFunctionTables(); \
72 memberFunction##argNames##MemberFunctionTablePtr_->insert \
75 baseType##Type::memberFunction \
79 ~add##memberFunction##argNames##MemberFunctionToTable() \
81 destroy##memberFunction##argNames##MemberFunctionTables(); \
86 static void construct##memberFunction##argNames##MemberFunctionTables(); \
89 static void destroy##memberFunction##argNames##MemberFunctionTables()
94 #define defineMemberFunctionSelectionTableMemberFunction\
95 (baseType,memberFunction,argNames) \
98 void baseType::construct##memberFunction##argNames##MemberFunctionTables()\
100 static bool constructed = false; \
104 baseType::memberFunction##argNames##MemberFunctionTablePtr_ \
105 = new baseType::memberFunction##argNames##MemberFunctionTable;\
107 constructed = true; \
114 #define defineMemberFunctionSelectionTableDestructor\
115 (baseType,memberFunction,argNames) \
118 void baseType::destroy##memberFunction##argNames##MemberFunctionTables() \
120 if (baseType::memberFunction##argNames##MemberFunctionTablePtr_) \
122 delete baseType::memberFunction##argNames##MemberFunctionTablePtr_;\
123 baseType::memberFunction##argNames##MemberFunctionTablePtr_ = NULL;\
130 #define defineMemberFunctionSelectionTablePtr\
131 (baseType,memberFunction,argNames) \
134 baseType::memberFunction##argNames##MemberFunctionTable* \
135 baseType::memberFunction##argNames##MemberFunctionTablePtr_ = NULL
139 #define defineTemplateMemberFunctionSelectionTablePtr\
140 (baseType,memberFunction,argNames) \
143 typename baseType::memberFunction##argNames##MemberFunctionTable* \
144 baseType::memberFunction##argNames##MemberFunctionTablePtr_ = NULL
152 #define defineMemberFunctionSelectionTable\
153 (baseType,memberFunction,argNames) \
155 defineMemberFunctionSelectionTablePtr \
156 (baseType,memberFunction,argNames); \
157 defineMemberFunctionSelectionTableMemberFunction \
158 (baseType,memberFunction,argNames) \
159 defineMemberFunctionSelectionTableDestructor \
160 (baseType,memberFunction,argNames)
167 #define defineTemplateMemberFunctionSelectionTable\
168 (baseType,memberFunction,argNames) \
171 defineMemberFunctionSelectionTablePtr \
172 (baseType,memberFunction,argNames); \
174 defineMemberFunctionSelectionTableMemberFunction \
175 (baseType,memberFunction,argNames) \
177 defineMemberFunctionSelectionTableDestructor \
178 (baseType,memberFunction,argNames)
186 #define defineTemplatedMemberFunctionSelectionTableMemberFunction\
187 (baseType,memberFunction,argNames,Targ) \
190 void baseType<Targ>::construct##memberFunction##argNames##MemberFunctionTables()\
192 static bool constructed = false; \
196 baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ \
197 = new baseType<Targ>::memberFunction##argNames##MemberFunctionTable;\
199 constructed = true; \
207 #define defineTemplatedMemberFunctionSelectionTableDestructor\
208 (baseType,memberFunction,argNames,Targ) \
211 void baseType<Targ>::destroy##memberFunction##argNames##MemberFunctionTables() \
213 if (baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_) \
215 delete baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_;\
216 baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ = NULL;\
224 #define defineTemplatedMemberFunctionSelectionTablePtr\
225 (baseType,memberFunction,argNames,Targ) \
228 baseType<Targ>::memberFunction##argNames##MemberFunctionTable* \
229 baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ = NULL
236 #define defineTemplatedMemberFunctionSelectionTable\
237 (baseType,memberFunction,argNames,Targ) \
240 defineTemplatedMemberFunctionSelectionTablePtr \
241 (baseType,memberFunction,argNames,Targ); \
243 defineTemplatedMemberFunctionSelectionTableMemberFunction \
244 (baseType,memberFunction,argNames,Targ) \
246 defineTemplatedMemberFunctionSelectionTableDestructor \
247 (baseType,memberFunction,argNames,Targ)