Go to the documentation of this file.
34 #ifndef memberFunctionSelectionTables_H
35 #define memberFunctionSelectionTables_H
42 #define declareMemberFunctionSelectionTable( \
43 returnType,baseType,memberFunction,argNames,argList,parList) \
46 typedef returnType (*memberFunction##argNames##MemberFunctionPtr)argList; \
50 <memberFunction##argNames##MemberFunctionPtr, word, string::hash> \
51 memberFunction##argNames##MemberFunctionTable; \
54 static memberFunction##argNames##MemberFunctionTable* \
55 memberFunction##argNames##MemberFunctionTablePtr_; \
58 template<class baseType##Type> \
59 class add##memberFunction##argNames##MemberFunctionToTable \
63 explicit add##memberFunction##argNames##MemberFunctionToTable \
65 const word& lookup = baseType##Type::typeName \
68 construct##memberFunction##argNames##MemberFunctionTables(); \
69 memberFunction##argNames##MemberFunctionTablePtr_->insert \
72 baseType##Type::memberFunction \
76 ~add##memberFunction##argNames##MemberFunctionToTable() \
78 destroy##memberFunction##argNames##MemberFunctionTables(); \
83 static void construct##memberFunction##argNames##MemberFunctionTables(); \
86 static void destroy##memberFunction##argNames##MemberFunctionTables()
90 #define defineMemberFunctionSelectionTableMemberFunction( \
91 baseType,memberFunction,argNames) \
94 void baseType::construct##memberFunction##argNames##MemberFunctionTables() \
96 static bool constructed = false; \
100 baseType::memberFunction##argNames##MemberFunctionTablePtr_ \
101 = new baseType::memberFunction##argNames##MemberFunctionTable; \
107 #define defineMemberFunctionSelectionTableDestructor( \
108 baseType,memberFunction,argNames) \
111 void baseType::destroy##memberFunction##argNames##MemberFunctionTables() \
113 if (baseType::memberFunction##argNames##MemberFunctionTablePtr_) \
115 delete baseType::memberFunction##argNames## \
116 MemberFunctionTablePtr_; \
117 baseType::memberFunction##argNames## \
118 MemberFunctionTablePtr_ = nullptr; \
124 #define defineMemberFunctionSelectionTablePtr(baseType,memberFunction,argNames)\
127 baseType::memberFunction##argNames##MemberFunctionTable* \
128 baseType::memberFunction##argNames##MemberFunctionTablePtr_(nullptr)
134 #define defineMemberFunctionSelectionTable(baseType,memberFunction,argNames) \
136 defineMemberFunctionSelectionTablePtr \
137 (baseType,memberFunction,argNames); \
138 defineMemberFunctionSelectionTableMemberFunction \
139 (baseType,memberFunction,argNames) \
140 defineMemberFunctionSelectionTableDestructor \
141 (baseType,memberFunction,argNames)
146 #define defineTemplateMemberFunctionSelectionTable( \
147 baseType,memberFunction,argNames) \
150 defineMemberFunctionSelectionTablePtr \
151 (baseType,memberFunction,argNames); \
153 defineMemberFunctionSelectionTableMemberFunction \
154 (baseType,memberFunction,argNames) \
156 defineMemberFunctionSelectionTableDestructor \
157 (baseType,memberFunction,argNames)
163 #define defineTemplatedMemberFunctionSelectionTableMemberFunction( \
164 baseType,memberFunction,argNames,Targ) \
167 void baseType<Targ>::construct##memberFunction##argNames## \
168 MemberFunctionTables() \
170 static bool constructed = false; \
173 constructed = true; \
174 baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_ \
175 = new baseType<Targ>::memberFunction##argNames## \
176 MemberFunctionTable; \
183 #define defineTemplatedMemberFunctionSelectionTableDestructor( \
184 baseType,memberFunction,argNames,Targ) \
187 void baseType<Targ>::destroy##memberFunction##argNames## \
188 MemberFunctionTables() \
190 if (baseType<Targ>::memberFunction##argNames##MemberFunctionTablePtr_) \
192 delete baseType<Targ>::memberFunction##argNames## \
193 MemberFunctionTablePtr_; \
194 baseType<Targ>::memberFunction##argNames## \
195 MemberFunctionTablePtr_ = nullptr; \
202 #define defineTemplatedMemberFunctionSelectionTablePtr( \
203 baseType,memberFunction,argNames,Targ) \
206 baseType<Targ>::memberFunction##argNames##MemberFunctionTable* \
207 baseType<Targ>::memberFunction##argNames## \
208 MemberFunctionTablePtr_(nullptr)
213 #define defineTemplatedMemberFunctionSelectionTable( \
214 baseType,memberFunction,argNames,Targ) \
217 defineTemplatedMemberFunctionSelectionTablePtr \
218 (baseType,memberFunction,argNames,Targ); \
220 defineTemplatedMemberFunctionSelectionTableMemberFunction \
221 (baseType,memberFunction,argNames,Targ) \
223 defineTemplatedMemberFunctionSelectionTableDestructor \
224 (baseType,memberFunction,argNames,Targ)
#define defineTemplateMemberFunctionSelectionTable( baseType, memberFunction, argNames)
Define run-time selection table for template classes.
#define defineMemberFunctionSelectionTableDestructor( baseType, memberFunction, argNames)
#define defineTemplatedMemberFunctionSelectionTable( baseType, memberFunction, argNames, Targ)
Define run-time selection table for template classes.
#define defineTemplatedMemberFunctionSelectionTableDestructor( baseType, memberFunction, argNames, Targ)