ZFFramework
Loading...
Searching...
No Matches
ZFImpl_ZFLua.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_ZFImpl_ZFLua_h_
7#define _ZFI_ZFImpl_ZFLua_h_
8
9#include "ZFLua.h"
11
13
41
55
60 ZF_IN lua_State *L
61 , ZF_IN const ZFClassDataUpdateData &data
62 );
63
68 ZF_IN lua_State *L
69 );
70
71// ============================================================
74public:
76 explicit ZFImpl_ZFLua_ImplSetupHelper(ZF_IN lua_State *L);
79public:
81 void addGlobalScope(ZF_IN const zfstring &scope);
83 void addGenericScope(ZF_IN const zfstring &genericScope);
85 void addCustomCode(ZF_IN const zfstring &code);
86private:
90 void _commit(void);
92private:
93 lua_State *_L;
94 zfstring _code;
95 void *_m;
96};
97
102 ZF_IN_OUT lua_State *L
103 , ZF_IN_OPT int metatableIndex = -1
104 );
105
106// ============================================================
107typedef void (*_ZFP_ZFImpl_ZFLua_ImplSetupAttach)(
108 ZF_IN_OUT lua_State *L
110 );
111typedef void (*_ZFP_ZFImpl_ZFLua_ImplSetupDetach)(ZF_IN_OUT lua_State *L);
112typedef void (*_ZFP_ZFImpl_ZFLua_ImplSetupClassDataUpdate)(
113 ZF_IN_OUT lua_State *L
114 , ZF_IN const ZFClassDataUpdateData &data
116 );
117extern ZFLIB_ZFLua_impl void _ZFP_ZFImpl_ZFLua_implSetupCallbackRegister(
118 ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupAttach setupAttachCallback
119 , ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupDetach setupDetachCallback
120 , ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupClassDataUpdate setupClassDataUpdate
121 );
122extern ZFLIB_ZFLua_impl void _ZFP_ZFImpl_ZFLua_implSetupCallbackUnregister(
123 ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupAttach setupAttachCallback
124 , ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupDetach setupDetachCallback
125 , ZF_IN _ZFP_ZFImpl_ZFLua_ImplSetupClassDataUpdate setupClassDataUpdate
126 );
127
152#define ZFImpl_ZFLua_implSetupCallback_DEFINE(SetupSig, setupAttachAction, setupDetachAction, setupClassDataUpdate) \
153 ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(ZFImpl_ZFLua_implSetupAction_##SetupSig, ZFLevelZFFrameworkLow) { \
154 _ZFP_ZFImpl_ZFLua_implSetupCallbackRegister(zfself::implSetupAttach, zfself::implSetupDetach, zfself::implSetupClassDataUpdate); \
155 } \
156 ZF_GLOBAL_INITIALIZER_DESTROY(ZFImpl_ZFLua_implSetupAction_##SetupSig) { \
157 _ZFP_ZFImpl_ZFLua_implSetupCallbackUnregister(zfself::implSetupAttach, zfself::implSetupDetach, zfself::implSetupClassDataUpdate); \
158 } \
159 public: \
160 static void implSetupAttach( \
161 ZF_IN_OUT lua_State *L \
162 , ZF_IN_OUT ZFImpl_ZFLua_ImplSetupHelper &helper \
163 ) { \
164 setupAttachAction \
165 } \
166 static void implSetupDetach(ZF_IN_OUT lua_State *L) { \
167 setupDetachAction \
168 } \
169 static void implSetupClassDataUpdate( \
170 ZF_IN_OUT lua_State *L \
171 , ZF_IN const ZFClassDataUpdateData &data \
172 , ZF_IN_OUT ZFImpl_ZFLua_ImplSetupHelper &helper \
173 ) { \
174 setupClassDataUpdate \
175 } \
176 ZF_GLOBAL_INITIALIZER_END(ZFImpl_ZFLua_implSetupAction_##SetupSig)
177
178// ============================================================
187 ZF_IN lua_State *L
188 , ZF_IN const zfchar *buf
189 , ZF_IN_OPT zfindex bufLen = zfindexMax()
190 , ZF_OUT_OPT zfauto *luaResult = zfnull
191 , ZF_IN_OPT const ZFCoreArray<zfauto> *luaParams = zfnull
192 , ZF_OUT_OPT zfstring *errHint = zfnull
193 , ZF_IN_OPT const zfchar *chunkInfo = zfnull
194 , ZF_IN_OPT const zfchar *srcInfo = zfnull
195 );
200 ZF_IN lua_State *L
201 , ZF_IN int error
202 , ZF_OUT_OPT zfstring *errHint = zfnull
203 , ZF_IN_OPT const zfchar *chunkInfo = zfnull
204 , ZF_IN_OPT zfindex errorLine = zfindexMax()
205 );
206
211 ZF_IN lua_State *L
212 , ZF_IN_OUT zfstring &ret
213 );
218 zfstring ret;
220 return ret;
221}
222
223// ============================================================
224// utils
227 ZF_OUT zfstring &ret
228 , ZF_IN lua_State *L
229 , ZF_IN int luaStackOffset
230 , ZF_IN_OPT zfbool printLuaType = zffalse
231 );
236 ZF_IN lua_State *L
237 , ZF_IN int luaStackOffset
238 , ZF_IN_OPT zfbool printLuaType = zffalse
239 ) {
240 zfstring ret;
241 ZFImpl_ZFLua_luaObjectInfoT(ret, L, luaStackOffset, printLuaType);
242 return ret;
243}
244
249 ZF_OUT zfauto &param
250 , ZF_IN lua_State *L
251 , ZF_IN int luaStackOffset
252 );
253
266 ZF_OUT zfauto &param
267 , ZF_IN lua_State *L
268 , ZF_IN int luaStackOffset
269 , ZF_OUT_OPT zfstring *errorHint = zfnull
270 );
271
280 ZF_OUT zfauto &ret
281 , ZF_IN lua_State *L
282 , ZF_IN int luaStackOffset
283 , ZF_OUT_OPT zfstring *errorHint = zfnull
284 );
285
289 , ZF_IN lua_State *L
290 , ZF_IN int luaStackOffset
291 , ZF_IN_OPT zfbool allowEmpty = zffalse
292 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
293 );
302 ZF_IN lua_State *L
303 , ZF_IN int luaStackOffset
304 , ZF_IN_OPT zfbool allowEmpty = zffalse
305 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
306 ) {
307 zfstring ret;
308 ZFImpl_ZFLua_toStringT(ret, L, luaStackOffset, allowEmpty, holderCls);
309 return ret;
310}
311
314 , ZF_IN ZFObject *obj
315 , ZF_IN_OPT zfbool allowEmpty = zffalse
316 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
317 );
320 ZF_IN ZFObject *obj
321 , ZF_IN_OPT zfbool allowEmpty = zffalse
322 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
323 ) {
324 zfstring ret;
325 ZFImpl_ZFLua_toStringT(ret, obj, allowEmpty, holderCls);
326 return ret;
327}
328
331 ZF_OUT zfauto &ret
332 , ZF_IN lua_State *L
333 , ZF_IN int luaStackOffset
334 , ZF_IN_OPT zfbool allowEmpty = zffalse
335 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
336 );
347 ZF_IN lua_State *L
348 , ZF_IN int luaStackOffset
349 , ZF_IN_OPT zfbool allowEmpty = zffalse
350 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
351 ) {
352 zfauto ret;
353 ZFImpl_ZFLua_toNumberT(ret, L, luaStackOffset, allowEmpty, holderCls);
354 return ret;
355}
356
359 ZF_OUT zfauto &ret
360 , ZF_IN ZFObject *obj
361 , ZF_IN_OPT zfbool allowEmpty = zffalse
362 , ZF_OUT_OPT const ZFClass **holderCls = zfnull
363 );
364
378 ZF_IN lua_State *L
379 , ZF_IN ZFObject *obj
380 , ZF_IN_OPT zfbool allowEmpty = zffalse
381 );
382
387 ZF_IN lua_State *L
389 , ZF_IN_OPT int luaParamOffset = 1
390 );
391
396 ZF_IN lua_State *L
397 , ZF_IN_OPT int luaStackOffset = 1
398 );
399
400// ============================================================
405zfclass ZFLIB_ZFLua_impl ZFImpl_ZFLuaValue : zfextend ZFObject {
406 ZFOBJECT_DECLARE(ZFImpl_ZFLuaValue, ZFObject)
407
408public:
409 lua_State *L;
411
412public:
414 virtual zfbool objectIsInternal(void) {return zftrue;}
416 virtual zfbool objectIsInternalPrivate(void) {return zftrue;}
417protected:
419 virtual void objectOnInit(void) {
421 this->L = zfnull;
422 this->luaValue = -1;
423 }
425 virtual void objectOnDeallocPrepare(void) {
426 if(L != zfnull) {
427 luaL_unref(L, LUA_REGISTRYINDEX, luaValue);
428 L = zfnull;
429 }
430 luaValue = -1;
432 }
436 if(L != zfnull && luaValue != -1) {
437 lua_rawgeti(L, LUA_REGISTRYINDEX, luaValue);
438 ret += " luaValue=";
440 lua_pop(L, 1);
441 }
442 }
443};
444
445// ============================================================
446// wrapper for impl
448inline lua_State *ZFImpl_ZFLua_luaOpen(void) {
449 return ELuna::openLua();
450}
451
452inline void ZFImpl_ZFLua_luaClose(ZF_IN lua_State *L) {
453 ELuna::closeLua(L);
454}
455
457template<typename T>
459 ZF_IN lua_State *L
460 , ZF_IN const zfchar *name
461 ) {
462 ELuna::registerClass<T>(L, name, ELuna::constructor<zfauto>);
463}
464
465template<typename F>
467 ZF_IN lua_State *L
468 , ZF_IN const zfchar *name
469 , ZF_IN F f
470 ) {
471 ELuna::registerFunction(L, name, f);
472}
473
475 ZF_IN lua_State *L
476 , ZF_IN const zfchar *name
477 , ZF_IN int (*f)(lua_State *)
478 ) {
479 lua_register(L, name, f);
480}
481
484 ZF_IN lua_State *L
485 , ZF_IN zfauto &v
486 ) {
487 if(v && v->classData() == v_zfbool::ClassData()) {
488 lua_pushboolean(L, zfcast(v_zfbool *, v)->zfv);
489 return;
490 }
491 ELuna::convert2LuaType<zfauto>::convertType(L, v);
492}
493
495 ZF_IN lua_State *L
496 , ZF_IN const zfauto &v
497 ) {
498 zfauto t = v;
500}
501
503 ZF_IN lua_State *L
504 , ZF_IN ZFObject *v
505 ) {
506 zfauto t = v;
508}
509
511 ZF_IN lua_State *L
512 , ZF_IN int luaStackOffset
513 ) {
514 return ELuna::convert2CppType<zfauto &>::convertType(L, luaStackOffset);
515}
516
543#define ZFImpl_ZFLua_luaErrorPrepare(L) \
544 _ZFP_ZFImpl_ZFLua_luaErrorPrepare _ZFP_ZFImpl_ZFLua_luaErrorPrepareNotCalled(L)
545zfclassNotPOD ZFLIB_ZFLua_impl _ZFP_ZFImpl_ZFLua_luaErrorPrepare {
546public:
547 _ZFP_ZFImpl_ZFLua_luaErrorPrepare(ZF_IN lua_State *L)
548 : L(L)
549 , errorHint()
550 {
551 }
552 ~_ZFP_ZFImpl_ZFLua_luaErrorPrepare(void) {
553 if(this->errorHint) {
554 lua_Debug ar;
555 for(int iStack = 1; ; ++iStack) {
556 int success = lua_getstack(L, iStack, &ar);
557 if(!success) {
558 break;
559 }
560 success = lua_getinfo(L, "nSl", &ar);
561 if(!success) {
562 break;
563 }
564 if((iStack == 2 || ar.name == NULL) && ar.currentline > 0) {
565 // pass special header to ZFImpl_ZFLua_execute_errorHandle
566 this->errorHint.insert(0, zfstr("<<{{%s}}>>", (zfindex)ar.currentline));
567 break;
568 }
569 }
570
571 zfstring info;
572 if(ZFImpl_ZFLua_stacktraceT(L, info)) {
573 this->errorHint += "\n";
574 this->errorHint += info;
575 }
576 luaL_error(L, "%s", this->errorHint.cString());
577 }
578 }
579public:
580 int luaError(
581 ZF_IN lua_State *L
582 , ZF_IN const zfchar *text
583 ) {
584 ZFCoreAssert(this->errorHint == zfnull);
585 this->errorHint += text;
586 return 0;
587 }
588private:
589 lua_State *L;
590 zfstring errorHint;
591};
592
594#define ZFImpl_ZFLua_luaError(L, fmt, ...) \
595 _ZFP_ZFImpl_ZFLua_luaErrorPrepareNotCalled.luaError(L, zfstr(fmt, ##__VA_ARGS__))
596
597zfclassLikePOD ZFLIB_ZFLua_impl _ZFP_ZFLuaStackChecker {
598public:
599 lua_State *L;
600 int stackChange;
601 int stackSaved;
602public:
603 _ZFP_ZFLuaStackChecker(
604 ZF_IN lua_State *L
605 , ZF_IN_OPT int stackChange = 0
606 )
607 : L(L), stackChange(stackChange), stackSaved(lua_gettop(L))
608 {
609 }
610 ~_ZFP_ZFLuaStackChecker(void) {
611 int cur = lua_gettop(L);
613 cur == stackSaved + stackChange,
614 "stack messed up: %s(%s) => %s",
615 stackSaved, stackChange, cur);
616 }
617};
619#if ZF_ENV_DEBUG
620 #define ZFImpl_ZFLua_DEBUG_luaStackChecker(name, L, stackChange) \
621 _ZFP_ZFLuaStackChecker _DEBUG_luaStackChecker_##name(L, stackChange)
622#else
623 #define ZFImpl_ZFLua_DEBUG_luaStackChecker(name, L, stackChange)
624#endif
625
627
628#endif // #ifndef _ZFI_ZFImpl_ZFLua_h_
629
#define ZFCoreAssertWithMessageTrim(exp, fmt,...)
see ZFCoreAssertWithMessage
Definition ZFCoreLog_CommonLog.h:81
#define ZFCoreAssert(exp)
assert exp is zftrue
Definition ZFCoreLog_CommonLog.h:47
_ZFT_t_zfchar zfchar
char wrapper
Definition ZFCoreTypeDef_CharType.h:17
#define ZF_OUT_OPT
dummy macro that shows the param used as optional output
Definition ZFCoreTypeDef_ClassType.h:208
#define zfclassLikePOD
shows the class is not a POD type, but you may use it like a POD except memset it to 0
Definition ZFCoreTypeDef_ClassType.h:41
#define zfextend
dummy macro shows class inherit from another
Definition ZFCoreTypeDef_ClassType.h:53
#define zfoverride
dummy macro shows that method override parent's method
Definition ZFCoreTypeDef_ClassType.h:58
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:196
#define ZF_IN_OPT
dummy macro that shows the param used as optional input
Definition ZFCoreTypeDef_ClassType.h:200
#define ZF_OUT
dummy macro that shows the param used as required output
Definition ZFCoreTypeDef_ClassType.h:204
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define ZF_IN_OUT
dummy macro that shows the param used as required input and output
Definition ZFCoreTypeDef_ClassType.h:212
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
#define zftrue
bool true type
Definition ZFCoreTypeDef_CoreType.h:107
#define zfindexMax()
(zfindex)-1, indicate a max index value, see zfindex
Definition ZFCoreTypeDef_CoreType.h:159
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
zfbool ZFImpl_ZFLua_execute(lua_State *L, const zfchar *buf, zfindex bufLen=((zfindex) -1), zfauto *luaResult=zft_zfnull, const ZFCoreArray< zfauto > *luaParams=zft_zfnull, zfstring *errHint=zft_zfnull, const zfchar *chunkInfo=zft_zfnull, const zfchar *srcInfo=zft_zfnull)
run lua code, L must be first initialized by ZFImpl_ZFLua_luaStateAttach
void ZFImpl_ZFLua_classDataUpdate(lua_State *L, const ZFClassDataUpdateData &data)
called when class data changed, for each lua state of each thread
void ZFImpl_ZFLua_luaStateAttach(lua_State *L)
see ZFImpl_ZFLua_luaStateOpen
void ZFImpl_ZFLua_execute_errorHandle(lua_State *L, int error, zfstring *errHint=zft_zfnull, const zfchar *chunkInfo=zft_zfnull, zfindex errorLine=((zfindex) -1))
error handler for ZFImpl_ZFLua_execute, lua_pcall, etc
zfbool ZFImpl_ZFLua_zfstringAppend(lua_State *L, zfstring &s, int luaParamOffset=1)
append with va_arg, see ZFLuaExecute
void ZFImpl_ZFLua_implSetupMetatable(lua_State *L, int metatableIndex=-1)
setup metatable for zfauto in lua env
zfstring ZFImpl_ZFLua_luaStackInfo(lua_State *L, int luaStackOffset=1)
return info of current stack
zfstring ZFImpl_ZFLua_stacktrace(lua_State *L)
get lua stacktrace
Definition ZFImpl_ZFLua.h:217
void ZFImpl_ZFLua_luaStateDetach(lua_State *L)
see ZFImpl_ZFLua_luaStateAttach
zfbool ZFImpl_ZFLua_toGeneric(zfauto &param, lua_State *L, int luaStackOffset, zfstring *errorHint=zft_zfnull)
get params from lua
zfstring ZFImpl_ZFLua_toString(lua_State *L, int luaStackOffset, zfbool allowEmpty=_ZFT_t_zffalse, const ZFClass **holderCls=zft_zfnull)
get params from lua
Definition ZFImpl_ZFLua.h:301
lua_State * ZFImpl_ZFLua_luaOpen(void)
util for impl
Definition ZFImpl_ZFLua.h:448
void ZFImpl_ZFLua_luaStateClose(lua_State *L)
see ZFImpl_ZFLua_luaStateOpen
zfbool ZFImpl_ZFLua_toLuaValue(lua_State *L, ZFObject *obj, zfbool allowEmpty=_ZFT_t_zffalse)
convert native type to lua type
void ZFImpl_ZFLua_luaCFunctionRegister(lua_State *L, const zfchar *name, int(*f)(lua_State *))
util for impl
Definition ZFImpl_ZFLua.h:474
zfbool ZFImpl_ZFLua_toStringT(zfstring &s, lua_State *L, int luaStackOffset, zfbool allowEmpty=_ZFT_t_zffalse, const ZFClass **holderCls=zft_zfnull)
see ZFImpl_ZFLua_toString
zfbool ZFImpl_ZFLua_toCallback(zfauto &ret, lua_State *L, int luaStackOffset, zfstring *errorHint=zft_zfnull)
get params from lua
void ZFImpl_ZFLua_luaClose(lua_State *L)
util for impl
Definition ZFImpl_ZFLua.h:452
zfbool ZFImpl_ZFLua_stacktraceT(lua_State *L, zfstring &ret)
get lua stacktrace
void ZFImpl_ZFLua_luaPush(lua_State *L, zfauto &v)
util for impl
Definition ZFImpl_ZFLua.h:483
zfauto ZFImpl_ZFLua_toNumber(lua_State *L, int luaStackOffset, zfbool allowEmpty=_ZFT_t_zffalse, const ZFClass **holderCls=zft_zfnull)
get params from lua
Definition ZFImpl_ZFLua.h:346
void * ZFImpl_ZFLua_luaStateOpen(void)
create new lua state
void ZFImpl_ZFLua_luaObjectInfoT(zfstring &ret, lua_State *L, int luaStackOffset, zfbool printLuaType=_ZFT_t_zffalse)
see ZFImpl_ZFLua_luaObjectInfo
zfbool ZFImpl_ZFLua_toNumberT(zfauto &ret, lua_State *L, int luaStackOffset, zfbool allowEmpty=_ZFT_t_zffalse, const ZFClass **holderCls=zft_zfnull)
see ZFImpl_ZFLua_toNumber
ZFPathInfo ZFImpl_ZFLua_localPathInfoDetect(lua_State *L)
try to detect local path info for current context
zfauto & ZFImpl_ZFLua_luaGet(lua_State *L, int luaStackOffset)
util for impl
Definition ZFImpl_ZFLua.h:510
void ZFImpl_ZFLua_luaClassRegister(lua_State *L, const zfchar *name)
util for impl
Definition ZFImpl_ZFLua.h:458
zfbool ZFImpl_ZFLua_toObject(zfauto &param, lua_State *L, int luaStackOffset)
get params from lua
void ZFImpl_ZFLua_luaFunctionRegister(lua_State *L, const zfchar *name, F f)
util for impl
Definition ZFImpl_ZFLua.h:466
zfstring ZFImpl_ZFLua_luaObjectInfo(lua_State *L, int luaStackOffset, zfbool printLuaType=_ZFT_t_zffalse)
get raw lua object info
Definition ZFImpl_ZFLua.h:235
global header for ZFLua_impl module
#define ZFLIB_ZFLua_impl
used to export symbols
Definition ZFImpl_ZFLua_impl.h:16
header file for ZFLua module
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
#define zfclass
same as class, shows that this class is a ZFObject type
Definition ZFObjectClassTypeFwd.h:38
#define ZFOBJECT_DECLARE(ChildClass, SuperClass,...)
necessary for every class inherit from ZFObject
Definition ZFObjectDeclare.h:122
data holder for ZFGlobalEvent::E_ClassDataUpdate
Definition ZFObjectClassTypeFwd.h:144
ZFObject's class info.
Definition ZFClass.h:63
light weight array
Definition ZFCoreArray.h:292
see ZFImpl_ZFLua_luaStateOpen
Definition ZFImpl_ZFLua.h:73
void addGenericScope(const zfstring &genericScope)
see ZFImpl_ZFLua_luaStateOpen
void addCustomCode(const zfstring &code)
see ZFImpl_ZFLua_luaStateOpen
void addGlobalScope(const zfstring &scope)
see ZFImpl_ZFLua_luaStateOpen
int luaValue
the lua value ref
Definition ZFImpl_ZFLua.h:410
virtual void objectOnDeallocPrepare(void)
called before objectOnDealloc, safe to call virtual functions here
Definition ZFImpl_ZFLua.h:425
virtual zfbool objectIsInternalPrivate(void)
whether this object is internal private object or its class is ZFClass::classIsInternalPrivate
Definition ZFImpl_ZFLua.h:416
virtual zfbool objectIsInternal(void)
whether this object is internal object or its class is ZFClass::classIsInternal
Definition ZFImpl_ZFLua.h:414
virtual void objectOnInit(void)
override this to init your object
Definition ZFImpl_ZFLua.h:419
lua_State * L
the lua state
Definition ZFImpl_ZFLua.h:409
virtual void objectInfoImplAppend(zfstring &ret)
see objectInfo
Definition ZFImpl_ZFLua.h:434
base class of all objects
Definition ZFObjectCore.h:195
virtual void objectOnInit(void)
override this to init your object
virtual void objectInfoImplAppend(zfstring &ret)
see objectInfo
Definition ZFObjectCore.h:320
virtual void objectOnDeallocPrepare(void)
called before objectOnDealloc, safe to call virtual functions here
Definition ZFObjectCore.h:746
path related info storage for impl, actual meaning of the info depends on impl
Definition ZFPathInfo.h:34
type wrapper for ZFTypeId::Value
Definition ZFTypeId_CoreType.h:124
static const ZFClass * ClassData(void)
get class info
Definition ZFTypeId_CoreType.h:124
a ZFObject holder which would release content object automatically when destroyed
Definition zfautoFwd.h:34
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:24
zfstring zfstr(const zfchar *fmt=zft_zfnull)
string format util
Definition zfstr.h:59