6#ifndef _ZFI_ZFMethodUserRegister_ZFObject_h_
7#define _ZFI_ZFMethodUserRegister_ZFObject_h_
14#define ZFMethodUserRegisterForZFObjectVarReadonly(getterMethod, ownerClassSig, VarType, VarName) \
15 ZFMethodUserRegister_0(getterMethod, { \
16 return (VarType const &)(invokerObject->to<ownerClassSig *>()->VarName); \
17 }, ownerClassSig::ClassData(), VarType const &, zftext(#VarName))
19#define ZFMethodUserRegisterForZFObjectVar(setterMethod, getterMethod, ownerClassSig, VarType, VarName) \
20 ZFMethodUserRegister_1(setterMethod, { \
21 invokerObject->to<ownerClassSig *>()->VarName = param0; \
22 }, ownerClassSig::ClassData(), void, zftext(#VarName) \
23 , ZFMP_IN(VarType const &, param0) \
25 ZFMethodUserRegister_0(getterMethod, { \
26 return (VarType const &)(invokerObject->to<ownerClassSig *>()->VarName); \
27 }, ownerClassSig::ClassData(), VarType const &, zftext(#VarName))
30#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_VAR_READONLY(ownerClassSig, VarType, VarName) \
31 ZF_STATIC_REGISTER_INIT(MtdUR_##ownerClassSig##_##VarName) { \
32 ZFMethodUserRegister_0(getterMethod, { \
33 return (VarType const &)(invokerObject->to<ownerClassSig *>()->VarName); \
34 }, ownerClassSig::ClassData(), VarType const &, zftext(#VarName)); \
36 ZF_STATIC_REGISTER_DESTROY(MtdUR_##ownerClassSig##_##VarName) { \
37 ZFMethodUserUnregister(ownerClassSig::ClassData()->methodForNameIgnoreParent(zftext(#VarName), zfnull)); \
39 ZF_STATIC_REGISTER_END(MtdUR_##ownerClassSig##_##VarName)
41#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_VAR(ownerClassSig, VarType, VarName) \
42 ZF_STATIC_REGISTER_INIT(MtdUR_##ownerClassSig##_##VarName) { \
43 ZFMethodUserRegister_1(setterMethod, { \
44 invokerObject->to<ownerClassSig *>()->VarName = param0; \
45 }, ownerClassSig::ClassData(), void, zftext(#VarName) \
46 , ZFMP_IN(VarType const &, param0) \
48 ZFMethodUserRegister_0(getterMethod, { \
49 return (VarType const &)(invokerObject->to<ownerClassSig *>()->VarName); \
50 }, ownerClassSig::ClassData(), VarType const &, zftext(#VarName)); \
52 ZF_STATIC_REGISTER_DESTROY(MtdUR_##ownerClassSig##_##VarName) { \
53 ZFMethodUserUnregister(ownerClassSig::ClassData()->methodForNameIgnoreParent(zftext(#VarName), ZFTypeId<VarType>::TypeId())); \
54 ZFMethodUserUnregister(ownerClassSig::ClassData()->methodForNameIgnoreParent(zftext(#VarName), zfnull)); \
56 ZF_STATIC_REGISTER_END(MtdUR_##ownerClassSig##_##VarName)
59#define _ZFP_ZFMethodUserRegisterForZFObjectFunc(...) \
60 _ZFP_MtdD_EXPAND(_ZFP_ZFMethodUserRegisterForZFObjectFunc_(__VA_ARGS__))
61#define _ZFP_ZFMethodUserRegisterForZFObjectFunc_( \
62 resultMethod, ownerClassSig, \
63 ReturnType, methodName \
64 , ParamExpandOrEmpty0, ParamType0, param0, DefaultExpandOrEmpty0, DefaultValueFix0 \
65 , ParamExpandOrEmpty1, ParamType1, param1, DefaultExpandOrEmpty1, DefaultValueFix1 \
66 , ParamExpandOrEmpty2, ParamType2, param2, DefaultExpandOrEmpty2, DefaultValueFix2 \
67 , ParamExpandOrEmpty3, ParamType3, param3, DefaultExpandOrEmpty3, DefaultValueFix3 \
68 , ParamExpandOrEmpty4, ParamType4, param4, DefaultExpandOrEmpty4, DefaultValueFix4 \
69 , ParamExpandOrEmpty5, ParamType5, param5, DefaultExpandOrEmpty5, DefaultValueFix5 \
70 , ParamExpandOrEmpty6, ParamType6, param6, DefaultExpandOrEmpty6, DefaultValueFix6 \
71 , ParamExpandOrEmpty7, ParamType7, param7, DefaultExpandOrEmpty7, DefaultValueFix7 \
73 _ZFP_ZFMethodUserRegister(resultMethod, { \
74 return (ReturnType)zfcast(ownerClassSig *, invokerObject)->methodName( \
75 ParamExpandOrEmpty0(ZFM_EMPTY() param0) \
76 ParamExpandOrEmpty1(ZFM_COMMA() param1) \
77 ParamExpandOrEmpty2(ZFM_COMMA() param2) \
78 ParamExpandOrEmpty3(ZFM_COMMA() param3) \
79 ParamExpandOrEmpty4(ZFM_COMMA() param4) \
80 ParamExpandOrEmpty5(ZFM_COMMA() param5) \
81 ParamExpandOrEmpty6(ZFM_COMMA() param6) \
82 ParamExpandOrEmpty7(ZFM_COMMA() param7) \
85 public, ZFMethodTypeVirtual, \
86 ReturnType, zftext(#methodName) \
87 , ParamExpandOrEmpty0, ParamType0, param0, DefaultExpandOrEmpty0, DefaultValueFix0 \
88 , ParamExpandOrEmpty1, ParamType1, param1, DefaultExpandOrEmpty1, DefaultValueFix1 \
89 , ParamExpandOrEmpty2, ParamType2, param2, DefaultExpandOrEmpty2, DefaultValueFix2 \
90 , ParamExpandOrEmpty3, ParamType3, param3, DefaultExpandOrEmpty3, DefaultValueFix3 \
91 , ParamExpandOrEmpty4, ParamType4, param4, DefaultExpandOrEmpty4, DefaultValueFix4 \
92 , ParamExpandOrEmpty5, ParamType5, param5, DefaultExpandOrEmpty5, DefaultValueFix5 \
93 , ParamExpandOrEmpty6, ParamType6, param6, DefaultExpandOrEmpty6, DefaultValueFix6 \
94 , ParamExpandOrEmpty7, ParamType7, param7, DefaultExpandOrEmpty7, DefaultValueFix7 \
98#define _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(...) \
99 _ZFP_MtdD_EXPAND(_ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_(__VA_ARGS__))
100#define _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_( \
102 ReturnType, methodName \
103 , ParamExpandOrEmpty0, ParamType0, param0, DefaultExpandOrEmpty0, DefaultValueFix0 \
104 , ParamExpandOrEmpty1, ParamType1, param1, DefaultExpandOrEmpty1, DefaultValueFix1 \
105 , ParamExpandOrEmpty2, ParamType2, param2, DefaultExpandOrEmpty2, DefaultValueFix2 \
106 , ParamExpandOrEmpty3, ParamType3, param3, DefaultExpandOrEmpty3, DefaultValueFix3 \
107 , ParamExpandOrEmpty4, ParamType4, param4, DefaultExpandOrEmpty4, DefaultValueFix4 \
108 , ParamExpandOrEmpty5, ParamType5, param5, DefaultExpandOrEmpty5, DefaultValueFix5 \
109 , ParamExpandOrEmpty6, ParamType6, param6, DefaultExpandOrEmpty6, DefaultValueFix6 \
110 , ParamExpandOrEmpty7, ParamType7, param7, DefaultExpandOrEmpty7, DefaultValueFix7 \
112 _ZFP_ZFMETHOD_USER_REGISTER({ \
113 return (ReturnType)zfcast(ownerClassSig *, invokerObject)->methodName( \
114 ParamExpandOrEmpty0(ZFM_EMPTY() param0) \
115 ParamExpandOrEmpty1(ZFM_COMMA() param1) \
116 ParamExpandOrEmpty2(ZFM_COMMA() param2) \
117 ParamExpandOrEmpty3(ZFM_COMMA() param3) \
118 ParamExpandOrEmpty4(ZFM_COMMA() param4) \
119 ParamExpandOrEmpty5(ZFM_COMMA() param5) \
120 ParamExpandOrEmpty6(ZFM_COMMA() param6) \
121 ParamExpandOrEmpty7(ZFM_COMMA() param7) \
124 public, ZFMethodTypeVirtual, ZF_CALLER_LINE, \
125 ReturnType, methodName \
126 , ParamExpandOrEmpty0, ParamType0, param0, DefaultExpandOrEmpty0, DefaultValueFix0 \
127 , ParamExpandOrEmpty1, ParamType1, param1, DefaultExpandOrEmpty1, DefaultValueFix1 \
128 , ParamExpandOrEmpty2, ParamType2, param2, DefaultExpandOrEmpty2, DefaultValueFix2 \
129 , ParamExpandOrEmpty3, ParamType3, param3, DefaultExpandOrEmpty3, DefaultValueFix3 \
130 , ParamExpandOrEmpty4, ParamType4, param4, DefaultExpandOrEmpty4, DefaultValueFix4 \
131 , ParamExpandOrEmpty5, ParamType5, param5, DefaultExpandOrEmpty5, DefaultValueFix5 \
132 , ParamExpandOrEmpty6, ParamType6, param6, DefaultExpandOrEmpty6, DefaultValueFix6 \
133 , ParamExpandOrEmpty7, ParamType7, param7, DefaultExpandOrEmpty7, DefaultValueFix7 \
139#define ZFMethodUserRegisterForZFObjectFunc_0(resultMethod, ownerClassSig, \
140 ReturnType, methodName \
142 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
143 ReturnType, methodName \
144 , _ZFP_ZFMP_DUMMY() \
145 , _ZFP_ZFMP_DUMMY() \
146 , _ZFP_ZFMP_DUMMY() \
147 , _ZFP_ZFMP_DUMMY() \
148 , _ZFP_ZFMP_DUMMY() \
149 , _ZFP_ZFMP_DUMMY() \
150 , _ZFP_ZFMP_DUMMY() \
151 , _ZFP_ZFMP_DUMMY() \
154#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_0(ownerClassSig, \
155 ReturnType, methodName \
157 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
158 ReturnType, methodName \
159 , _ZFP_ZFMP_DUMMY() \
160 , _ZFP_ZFMP_DUMMY() \
161 , _ZFP_ZFMP_DUMMY() \
162 , _ZFP_ZFMP_DUMMY() \
163 , _ZFP_ZFMP_DUMMY() \
164 , _ZFP_ZFMP_DUMMY() \
165 , _ZFP_ZFMP_DUMMY() \
166 , _ZFP_ZFMP_DUMMY() \
172#define ZFMethodUserRegisterForZFObjectFunc_1(resultMethod, ownerClassSig, \
173 ReturnType, methodName \
176 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
177 ReturnType, methodName \
178 , _ZFP_MtdP_EXPAND(ZFMP_0) \
179 , _ZFP_ZFMP_DUMMY() \
180 , _ZFP_ZFMP_DUMMY() \
181 , _ZFP_ZFMP_DUMMY() \
182 , _ZFP_ZFMP_DUMMY() \
183 , _ZFP_ZFMP_DUMMY() \
184 , _ZFP_ZFMP_DUMMY() \
185 , _ZFP_ZFMP_DUMMY() \
188#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_1(ownerClassSig, \
189 ReturnType, methodName \
192 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
193 ReturnType, methodName \
194 , _ZFP_MtdP_EXPAND(ZFMP_0) \
195 , _ZFP_ZFMP_DUMMY() \
196 , _ZFP_ZFMP_DUMMY() \
197 , _ZFP_ZFMP_DUMMY() \
198 , _ZFP_ZFMP_DUMMY() \
199 , _ZFP_ZFMP_DUMMY() \
200 , _ZFP_ZFMP_DUMMY() \
201 , _ZFP_ZFMP_DUMMY() \
207#define ZFMethodUserRegisterForZFObjectFunc_2(resultMethod, ownerClassSig, \
208 ReturnType, methodName \
212 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
213 ReturnType, methodName \
214 , _ZFP_MtdP_EXPAND(ZFMP_0) \
215 , _ZFP_MtdP_EXPAND(ZFMP_1) \
216 , _ZFP_ZFMP_DUMMY() \
217 , _ZFP_ZFMP_DUMMY() \
218 , _ZFP_ZFMP_DUMMY() \
219 , _ZFP_ZFMP_DUMMY() \
220 , _ZFP_ZFMP_DUMMY() \
221 , _ZFP_ZFMP_DUMMY() \
224#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_2(ownerClassSig, \
225 ReturnType, methodName \
229 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
230 ReturnType, methodName \
231 , _ZFP_MtdP_EXPAND(ZFMP_0) \
232 , _ZFP_MtdP_EXPAND(ZFMP_1) \
233 , _ZFP_ZFMP_DUMMY() \
234 , _ZFP_ZFMP_DUMMY() \
235 , _ZFP_ZFMP_DUMMY() \
236 , _ZFP_ZFMP_DUMMY() \
237 , _ZFP_ZFMP_DUMMY() \
238 , _ZFP_ZFMP_DUMMY() \
244#define ZFMethodUserRegisterForZFObjectFunc_3(resultMethod, ownerClassSig, \
245 ReturnType, methodName \
250 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
251 ReturnType, methodName \
252 , _ZFP_MtdP_EXPAND(ZFMP_0) \
253 , _ZFP_MtdP_EXPAND(ZFMP_1) \
254 , _ZFP_MtdP_EXPAND(ZFMP_2) \
255 , _ZFP_ZFMP_DUMMY() \
256 , _ZFP_ZFMP_DUMMY() \
257 , _ZFP_ZFMP_DUMMY() \
258 , _ZFP_ZFMP_DUMMY() \
259 , _ZFP_ZFMP_DUMMY() \
262#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_3(ownerClassSig, \
263 ReturnType, methodName \
268 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
269 ReturnType, methodName \
270 , _ZFP_MtdP_EXPAND(ZFMP_0) \
271 , _ZFP_MtdP_EXPAND(ZFMP_1) \
272 , _ZFP_MtdP_EXPAND(ZFMP_2) \
273 , _ZFP_ZFMP_DUMMY() \
274 , _ZFP_ZFMP_DUMMY() \
275 , _ZFP_ZFMP_DUMMY() \
276 , _ZFP_ZFMP_DUMMY() \
277 , _ZFP_ZFMP_DUMMY() \
283#define ZFMethodUserRegisterForZFObjectFunc_4(resultMethod, ownerClassSig, \
284 ReturnType, methodName \
290 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
291 ReturnType, methodName \
292 , _ZFP_MtdP_EXPAND(ZFMP_0) \
293 , _ZFP_MtdP_EXPAND(ZFMP_1) \
294 , _ZFP_MtdP_EXPAND(ZFMP_2) \
295 , _ZFP_MtdP_EXPAND(ZFMP_3) \
296 , _ZFP_ZFMP_DUMMY() \
297 , _ZFP_ZFMP_DUMMY() \
298 , _ZFP_ZFMP_DUMMY() \
299 , _ZFP_ZFMP_DUMMY() \
302#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_4(ownerClassSig, \
303 ReturnType, methodName \
309 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
310 ReturnType, methodName \
311 , _ZFP_MtdP_EXPAND(ZFMP_0) \
312 , _ZFP_MtdP_EXPAND(ZFMP_1) \
313 , _ZFP_MtdP_EXPAND(ZFMP_2) \
314 , _ZFP_MtdP_EXPAND(ZFMP_3) \
315 , _ZFP_ZFMP_DUMMY() \
316 , _ZFP_ZFMP_DUMMY() \
317 , _ZFP_ZFMP_DUMMY() \
318 , _ZFP_ZFMP_DUMMY() \
324#define ZFMethodUserRegisterForZFObjectFunc_5(resultMethod, ownerClassSig, \
325 ReturnType, methodName \
332 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
333 ReturnType, methodName \
334 , _ZFP_MtdP_EXPAND(ZFMP_0) \
335 , _ZFP_MtdP_EXPAND(ZFMP_1) \
336 , _ZFP_MtdP_EXPAND(ZFMP_2) \
337 , _ZFP_MtdP_EXPAND(ZFMP_3) \
338 , _ZFP_MtdP_EXPAND(ZFMP_4) \
339 , _ZFP_ZFMP_DUMMY() \
340 , _ZFP_ZFMP_DUMMY() \
341 , _ZFP_ZFMP_DUMMY() \
344#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_5(ownerClassSig, \
345 ReturnType, methodName \
352 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
353 ReturnType, methodName \
354 , _ZFP_MtdP_EXPAND(ZFMP_0) \
355 , _ZFP_MtdP_EXPAND(ZFMP_1) \
356 , _ZFP_MtdP_EXPAND(ZFMP_2) \
357 , _ZFP_MtdP_EXPAND(ZFMP_3) \
358 , _ZFP_MtdP_EXPAND(ZFMP_4) \
359 , _ZFP_ZFMP_DUMMY() \
360 , _ZFP_ZFMP_DUMMY() \
361 , _ZFP_ZFMP_DUMMY() \
367#define ZFMethodUserRegisterForZFObjectFunc_6(resultMethod, ownerClassSig, \
368 ReturnType, methodName \
376 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
377 ReturnType, methodName \
378 , _ZFP_MtdP_EXPAND(ZFMP_0) \
379 , _ZFP_MtdP_EXPAND(ZFMP_1) \
380 , _ZFP_MtdP_EXPAND(ZFMP_2) \
381 , _ZFP_MtdP_EXPAND(ZFMP_3) \
382 , _ZFP_MtdP_EXPAND(ZFMP_4) \
383 , _ZFP_MtdP_EXPAND(ZFMP_5) \
384 , _ZFP_ZFMP_DUMMY() \
385 , _ZFP_ZFMP_DUMMY() \
388#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_6(ownerClassSig, \
389 ReturnType, methodName \
397 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
398 ReturnType, methodName \
399 , _ZFP_MtdP_EXPAND(ZFMP_0) \
400 , _ZFP_MtdP_EXPAND(ZFMP_1) \
401 , _ZFP_MtdP_EXPAND(ZFMP_2) \
402 , _ZFP_MtdP_EXPAND(ZFMP_3) \
403 , _ZFP_MtdP_EXPAND(ZFMP_4) \
404 , _ZFP_MtdP_EXPAND(ZFMP_5) \
405 , _ZFP_ZFMP_DUMMY() \
406 , _ZFP_ZFMP_DUMMY() \
412#define ZFMethodUserRegisterForZFObjectFunc_7(resultMethod, ownerClassSig, \
413 ReturnType, methodName \
422 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
423 ReturnType, methodName \
424 , _ZFP_MtdP_EXPAND(ZFMP_0) \
425 , _ZFP_MtdP_EXPAND(ZFMP_1) \
426 , _ZFP_MtdP_EXPAND(ZFMP_2) \
427 , _ZFP_MtdP_EXPAND(ZFMP_3) \
428 , _ZFP_MtdP_EXPAND(ZFMP_4) \
429 , _ZFP_MtdP_EXPAND(ZFMP_5) \
430 , _ZFP_MtdP_EXPAND(ZFMP_6) \
431 , _ZFP_ZFMP_DUMMY() \
434#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_7(ownerClassSig, \
435 ReturnType, methodName \
444 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
445 ReturnType, methodName \
446 , _ZFP_MtdP_EXPAND(ZFMP_0) \
447 , _ZFP_MtdP_EXPAND(ZFMP_1) \
448 , _ZFP_MtdP_EXPAND(ZFMP_2) \
449 , _ZFP_MtdP_EXPAND(ZFMP_3) \
450 , _ZFP_MtdP_EXPAND(ZFMP_4) \
451 , _ZFP_MtdP_EXPAND(ZFMP_5) \
452 , _ZFP_MtdP_EXPAND(ZFMP_6) \
453 , _ZFP_ZFMP_DUMMY() \
459#define ZFMethodUserRegisterForZFObjectFunc_8(resultMethod, ownerClassSig, \
460 ReturnType, methodName \
470 _ZFP_ZFMethodUserRegisterForZFObjectFunc(resultMethod, ownerClassSig, \
471 ReturnType, methodName \
472 , _ZFP_MtdP_EXPAND(ZFMP_0) \
473 , _ZFP_MtdP_EXPAND(ZFMP_1) \
474 , _ZFP_MtdP_EXPAND(ZFMP_2) \
475 , _ZFP_MtdP_EXPAND(ZFMP_3) \
476 , _ZFP_MtdP_EXPAND(ZFMP_4) \
477 , _ZFP_MtdP_EXPAND(ZFMP_5) \
478 , _ZFP_MtdP_EXPAND(ZFMP_6) \
479 , _ZFP_MtdP_EXPAND(ZFMP_7) \
482#define ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC_8(ownerClassSig, \
483 ReturnType, methodName \
493 _ZFP_ZFMETHOD_USER_REGISTER_FOR_ZFOBJECT_FUNC(ownerClassSig, \
494 ReturnType, methodName \
495 , _ZFP_MtdP_EXPAND(ZFMP_0) \
496 , _ZFP_MtdP_EXPAND(ZFMP_1) \
497 , _ZFP_MtdP_EXPAND(ZFMP_2) \
498 , _ZFP_MtdP_EXPAND(ZFMP_3) \
499 , _ZFP_MtdP_EXPAND(ZFMP_4) \
500 , _ZFP_MtdP_EXPAND(ZFMP_5) \
501 , _ZFP_MtdP_EXPAND(ZFMP_6) \
502 , _ZFP_MtdP_EXPAND(ZFMP_7) \
reflectable method definination for ZFFramework
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98