6#ifndef _ZFI_ZFProtocol_h_
7#define _ZFI_ZFProtocol_h_
102 return _ZFP_ZFProtocol_protocolInstanceState;
156 virtual zfbool _ZFP_ZFProtocol_checkImplDependency(
164 static zfbool _ZFP_ZFProtocolOptional(
void) {
180typedef ZFProtocol *(*_ZFP_ZFProtocolTryAccessCallback)(void);
181typedef ZFProtocol *(*_ZFP_ZFProtocolConstructor)(void);
182typedef zfbool (*_ZFP_ZFProtocolIsAvailableCkCallback)(void);
183typedef void (*_ZFP_ZFProtocolCleanupCallback)(
ZF_IN _ZFP_ZFProtocolData *implData);
188 _ZFP_ZFProtocolTryAccessCallback implTryAccessCallback;
189 _ZFP_ZFProtocolConstructor implConstructor;
190 _ZFP_ZFProtocolIsAvailableCkCallback isAvailableCk;
193 _ZFP_ZFProtocolCleanupCallback implCleanupCallback;
196extern ZFLIB_ZFCore _ZFP_ZFProtocolData &_ZFP_ZFProtocolImplDataRegister(
198 ,
ZF_IN _ZFP_ZFProtocolTryAccessCallback implTryAccessCallback
201extern ZFLIB_ZFCore void _ZFP_ZFProtocolImplDataUnregister(
const zfchar *protocolName);
202extern ZFLIB_ZFCore void _ZFP_ZFProtocolImplAccess(
void);
217#define ZFPROTOCOL_INTERFACE_CLASS(ModuleName) \
218 ZFPInterface_##ModuleName
220#define _ZFP_ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName) \
221 zfclassNotPOD ZFLIB_ ZFPROTOCOL_INTERFACE_CLASS(ModuleName) : zfextend ZFProtocol { \
224 typedef ZFProtocol zfsuper; \
226 typedef ZFPROTOCOL_INTERFACE_CLASS(ModuleName) zfself; \
229 virtual const zfchar *protocolName(void) const { \
230 return #ModuleName; \
233 static _ZFP_ZFProtocolData &_ZFP_ZFProtocolDataRef(void) { \
234 static _ZFP_ZFProtocolData &_d = _ZFP_ZFProtocolImplDataRegister( \
235 zftext(#ModuleName), \
236 zfself::_ZFP_ZFProtocolTryAccessCallbackFunc, \
237 zfself::_ZFP_ZFProtocolOptional()); \
240 static void _ZFP_ZFProtocolDataRegister(void) { \
241 (void)zfself::_ZFP_ZFProtocolDataRef(); \
243 static ZFProtocol *_ZFP_ZFProtocolTryAccessCallbackFunc(void) { \
244 return ZFPROTOCOL_TRY_ACCESS(ModuleName); \
246 static void _ZFP_ZFProtocolInstanceCleanupCallback(ZF_IN _ZFP_ZFProtocolData *implData) { \
247 if(implData->implInstance != zfnull) { \
248 zfdelete(implData->implInstance); \
249 implData->implInstance = zfnull; \
252 static void _ZFP_ZFProtocolImplRegister( \
253 ZF_IN _ZFP_ZFProtocolConstructor implConstructor \
254 , ZF_IN _ZFP_ZFProtocolIsAvailableCkCallback isAvailableCk \
255 , ZF_IN const zfchar *implName \
256 , ZF_IN ZFProtocolLevel implLevel \
258 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
259 if(_d.implConstructor != zfnull) { \
260 if(_d.implLevel == implLevel) { \
261 ZFCoreCriticalMessageTrim("only one implementation is allowed for protocol \"%s\", while we have: \"%s\", \"%s\"", \
267 else if(_d.implLevel > implLevel) { \
281 _d.implConstructor = implConstructor; \
282 _d.isAvailableCk = isAvailableCk; \
283 _d.implName = implName; \
284 _d.implLevel = implLevel; \
285 _d.implCleanupCallback = zfself::_ZFP_ZFProtocolInstanceCleanupCallback; \
287 static void _ZFP_ZFProtocolImplChange( \
288 ZF_IN _ZFP_ZFProtocolConstructor implConstructor \
289 , ZF_IN _ZFP_ZFProtocolIsAvailableCkCallback isAvailableCk \
290 , ZF_IN const zfchar *implName \
291 , ZF_IN ZFProtocolLevel implLevel \
293 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
294 if(_d.implInstance != zfnull) { \
295 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnDeallocPrepare; \
296 _d.implInstance->protocolOnDeallocPrepare(); \
297 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnDealloc; \
298 _d.implInstance->protocolOnDealloc(); \
299 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInit; \
301 zfself::_ZFP_ZFProtocolInstanceCleanupCallback(&_d); \
302 if(implConstructor != zfnull && !zfstringIsEmpty(implName)) { \
303 _d.implConstructor = implConstructor; \
304 _d.isAvailableCk = isAvailableCk; \
305 _d.implName = implName; \
306 _d.implLevel = implLevel; \
309 _d.implConstructor = zfnull; \
310 _d.isAvailableCk = zfnull; \
311 _d.implName.removeAll(); \
312 _d.implLevel = v_ZFProtocolLevel::e_Default; \
315 static inline zfbool _ZFP_ZFProtocolIsAvailable(void) { \
316 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
317 return _d.implConstructor != zfnull && _d.isAvailableCk(); \
319 static zfself *_ZFP_ZFProtocolNewInstance(void) { \
320 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
321 _ZFP_ZFProtocolImplAccess(); \
322 zfself *retVal = zfnull; \
323 if(_d.isAvailableCk != zfnull && _d.isAvailableCk()) { \
324 retVal = (zfself *)_d.implConstructor(); \
325 if(retVal != zfnull) { \
326 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInit; \
327 retVal->protocolOnInit(); \
328 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInitFinish; \
329 retVal->protocolOnInitFinish(); \
330 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_Idle; \
335 static zfself *_ZFP_ZFProtocolAccess(void) { \
336 static ZFProtocol *&impl = zfself::_ZFP_ZFProtocolDataRef().implInstance; \
337 if(impl == zfnull) { \
338 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
339 _d.implInstance = zfself::_ZFP_ZFProtocolNewInstance(); \
340 if(_d.implInstance == zfnull) { \
341 ZFCoreCriticalMessageTrim("no implementation for protocol \"%s\"", \
345 const zfchar *desiredImplPlatformHint = zfnull; \
346 const zfchar *mismatchProtocolName = zfnull; \
347 ZFProtocol *mismatchImpl = zfnull; \
348 if(!_d.implInstance->_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl)) { \
349 _ZFP_ZFProtocolImplFail( \
350 _d.implInstance->protocolName() \
351 , _d.implInstance->protocolImplName() \
352 , mismatchProtocolName \
353 , desiredImplPlatformHint \
356 zfdelete(_d.implInstance); \
357 _d.implInstance = zfnull; \
361 return (zfself *)impl; \
363 static zfself *_ZFP_ZFProtocolTryAccess(void) { \
364 static ZFProtocol *&impl = zfself::_ZFP_ZFProtocolDataRef().implInstance; \
365 if(impl == zfnull) { \
366 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
367 _d.implInstance = zfself::_ZFP_ZFProtocolNewInstance(); \
368 const zfchar *desiredImplPlatformHint = zfnull; \
369 const zfchar *mismatchProtocolName = zfnull; \
370 ZFProtocol *mismatchImpl = zfnull; \
371 if(_d.implInstance != zfnull \
372 && !_d.implInstance->_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl) \
374 zfdelete(_d.implInstance); \
375 _d.implInstance = zfnull; \
378 return (zfself *)impl; \
380 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
383#define _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName) \
412#define ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName) \
413 _ZFP_ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName)
418#define ZFPROTOCOL_INTERFACE_END(ModuleName) \
419 _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName)
424#define ZFPROTOCOL_INTERFACE_OPTIONAL \
426 static zfbool _ZFP_ZFProtocolOptional(void) { \
434#define ZFPROTOCOL_INTERFACE_REGISTER(ModuleName) \
435 ZF_STATIC_REGISTER_INIT(ZFProtocolInterfaceRegister_##ModuleName) { \
436 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRegister(); \
438 ZF_STATIC_REGISTER_END(ZFProtocolInterfaceRegister_##ModuleName)
465#define ZFPROTOCOL_TRY_ACCESS(ModuleName) \
466 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolTryAccess())
471#define ZFPROTOCOL_ACCESS(ModuleName) \
472 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolAccess())
477#define ZFPROTOCOL_IS_AVAILABLE(ModuleName) \
478 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolIsAvailable()
480typedef void (*_ZFP_ZFProtocolImplRegisterHolderClearCallback)(void);
483 _ZFP_ZFProtocolImplRegisterHolder(
ZF_IN _ZFP_ZFProtocolImplRegisterHolderClearCallback callback)
487 ~_ZFP_ZFProtocolImplRegisterHolder(
void) {
491 _ZFP_ZFProtocolImplRegisterHolderClearCallback callback;
494#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel) \
495 zfclassNotPOD ImplementationClass : zfextend ZFPROTOCOL_INTERFACE_CLASS(ModuleName) { \
498 typedef ZFPROTOCOL_INTERFACE_CLASS(ModuleName) zfsuper; \
500 typedef ImplementationClass zfself; \
503 virtual const zfchar *protocolImplName(void) const { \
504 return #ImplementationName; \
507 virtual ZFProtocolLevel protocolImplLevel(void) const { \
511 static ZFProtocol *_ZFP_##ImplementationClass##_ctor(void) { \
512 return zfnew(ImplementationClass); \
514 static void _ZFP_ZFProtocolUnregister(void) { \
515 if(ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRef().implConstructor == &ImplementationClass::_ZFP_##ImplementationClass##_ctor) { \
516 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default); \
518 _ZFP_ZFProtocolImplDataUnregister(#ModuleName); \
520 static void _ZFP_ZFProtocolRegister(void) { \
521 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplRegister( \
522 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
523 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
524 zftext(#ImplementationName), \
526 static _ZFP_ZFProtocolImplRegisterHolder _holder(&ImplementationClass::_ZFP_ZFProtocolUnregister); \
528 static void _ZFP_ZFProtocolChange(void) { \
529 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange( \
530 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
531 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
532 zftext(#ImplementationName), \
535#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ImplementationClass, ModuleName, implLevel) \
536 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel)
538#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass) \
540 ZFOUTPUT_TYPE(ImplementationClass, {zftToStringT(s, (ZFProtocol const &)v);}) \
541 ZF_STATIC_REGISTER_INIT(ZFPImplReg_##ImplementationClass) { \
542 ImplementationClass::_ZFP_ZFProtocolRegister(); \
544 ZF_STATIC_REGISTER_END(ZFPImplReg_##ImplementationClass)
545#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ImplementationClass) \
546 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass)
548#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
549 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
577#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_HINT(PlatformHint) \
579 virtual const zfchar *protocolImplPlatformHint(void) const { \
580 return PlatformHint; \
595#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_BEGIN() \
597 virtual zfbool _ZFP_ZFProtocol_checkImplDependency( \
598 ZF_OUT const zfchar *&desiredImplPlatformHint \
599 , ZF_OUT const zfchar *&mismatchProtocolName \
600 , ZF_OUT ZFProtocol *&mismatchImpl \
602 if(!zfsuper::_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl)) { \
606#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_ITEM(Protocol, DependencyPlatformHint) \
607 if(ZFProtocolTryAccess(ZFM_TOSTRING(Protocol), DependencyPlatformHint) == zfnull) { \
608 desiredImplPlatformHint = DependencyPlatformHint; \
609 mismatchProtocolName = ZFM_TOSTRING(Protocol); \
610 mismatchImpl = ZFProtocolTryAccess(ZFM_TOSTRING(Protocol)); \
614#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_END() \
624#define ZFPROTOCOL_IMPLEMENTATION_CLASS(Implementation) \
625 ZFPImpl_##Implementation
703#define ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ModuleName, implLevel) \
704 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName), ModuleName, implLevel)
708#define ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName) \
709 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName))
713#define ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
714 _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction)
724#define ZFProtocolImplChange(ImplementationName) \
725 ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName)::_ZFP_ZFProtocolChange()
729#define ZFProtocolImplRemove(ModuleName) \
730 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default)
796 && this->protocolName == ref.protocolName
797 && this->protocolOptional == ref.protocolOptional
798 && this->protocolImpl == ref.protocolImpl
802 return !this->operator == (ref);
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
zfbool zfstringIsEmpty(const zfchar *s)
util to check whether string is empty (null or empty string)
Definition ZFCoreStringUtil.h:197
_ZFT_t_zfchar zfchar
char wrapper
Definition ZFCoreTypeDef_CharType.h:17
#define zffinal
dummy macro shows that a method or class is designed must not to be overrided
Definition ZFCoreTypeDef_ClassType.h:63
#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 ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:184
#define ZF_OUT
dummy macro that shows the param used as required output
Definition ZFCoreTypeDef_ClassType.h:192
#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:200
#define ZFCLASS_DISALLOW_COPY_CONSTRUCTOR(ClassName)
a macro to show that a class doesn't allow copy constructor
Definition ZFCoreTypeDef_ClassType.h:81
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
#define zftrue
bool true type
Definition ZFCoreTypeDef_CoreType.h:107
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZFOUTPUT_TYPE(T_Type, outputAction)
declare your custom type conversion to string, convenient for debug
Definition ZFCoreTypeDef_OtherType.h:221
zft_zfstring< zfchar > zfstring
see zft_zfstring
Definition ZFCoreTypeDef_StringType.h:15
#define ZFENUM_SEPARATOR()
see ZFENUM_BEGIN
Definition ZFEnumDeclare.h:158
#define ZFENUM_VALUE_REGISTER(Value)
see ZFENUM_BEGIN
Definition ZFEnumDeclare.h:168
#define ZFENUM_REG(ZFLIB_, EnumName,...)
see ZFENUM_BEGIN
Definition ZFEnumDeclare.h:186
#define ZFENUM_VALUE(Value)
see ZFENUM_BEGIN
Definition ZFEnumDeclare.h:151
#define ZFENUM_BEGIN(ZFLIB_, EnumName)
macros to define reflectable enum type
Definition ZFEnumDeclare.h:147
#define ZFENUM_END(ZFLIB_, EnumName)
see ZFENUM_BEGIN
Definition ZFEnumDeclare.h:172
#define ZFMP_IN_OPT(ParamType, paramName, DefaultValue)
see ZFMP_IN
Definition ZFMethod.h:108
#define ZFMP_IN(ParamType, paramName)
macro to wrap param types for ZFMETHOD_INLINE_0 series
Definition ZFMethod.h:105
#define ZFMETHOD_FUNC_DECLARE_2(ZFLIB_, ReturnType, MethodName, ZFMP_0, ZFMP_1)
see ZFMETHOD_FUNC_DECLARE_0
Definition ZFMethodFuncDeclare.h:763
#define ZFMETHOD_FUNC_DECLARE_0(ZFLIB_, ReturnType, MethodName)
declare function type of ZFMethod
Definition ZFMethodFuncDeclare.h:493
#define ZFMETHOD_FUNC_DECLARE_1(ZFLIB_, ReturnType, MethodName, ZFMP_0)
see ZFMETHOD_FUNC_DECLARE_0
Definition ZFMethodFuncDeclare.h:624
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
ZFObject related include.
const ZFOutput & ZFOutputDefault(void)
default output callback, output source must be zfchar *string
ZFCoreArray< ZFProtocolImplInfo > ZFProtocolImplInfoGetAll()
for debug use only, get all protocol's info
ZFCoreArray< ZFProtocolImplInfo > ZFProtocolImplInfoGetAllNotImplemented()
util method to ZFProtocolImplInfoGetAll
ZFProtocol * ZFProtocolTryAccess(const zfchar *name, const zfchar *desiredImpl=(zft_zfnull))
get protocol with name or null if no such protocol
ZFProtocol * ZFProtocolAccess(const zfchar *name, const zfchar *desiredImpl=(zft_zfnull))
similar to ZFProtocolTryAccess, but assert fail if no implementation
ZFCoreArray< ZFProtocolImplInfo > ZFProtocolImplInfoGetAllImplemented()
util method to ZFProtocolImplInfoGetAll
v_ZFProtocolInstanceState::ZFEnumType ZFProtocolInstanceState
see v_ZFProtocolInstanceState
Definition ZFProtocol.h:61
zfbool ZFProtocolIsAvailable(const zfchar *name, const zfchar *desiredImpl=(zft_zfnull))
check whether protocol is available
v_ZFProtocolLevel::ZFEnumType ZFProtocolLevel
see v_ZFProtocolLevel
Definition ZFProtocol.h:34
void ZFProtocolImplInfoPrint(const ZFOutput &callback=(ZFOutputDefault()))
util method to ZFProtocolImplInfoGetAll
#define ZFTYPEID_ACCESS_ONLY_REG(ZFLIB_, TypeName, Type,...)
see ZFTYPEID_DECLARE
Definition ZFTypeIdDeclare.h:205
#define ZFTYPEID_ACCESS_ONLY_DECLARE(ZFLIB_, TypeName, Type)
see ZFTYPEID_DECLARE
Definition ZFTypeIdDeclare.h:195
light weight array
Definition ZFCoreArray.h:331
general output callback
Definition ZFIOCallback_output.h:37
base class of all protocol of ZFFramework
Definition ZFProtocol.h:68
virtual const zfchar * protocolImplPlatformHint(void) const
get type hint of the implementation or empty string if not defined, e.g. "iOS:NSString" for iOS's str...
Definition ZFProtocol.h:133
virtual void protocolOnDeallocPrepare(void)
see protocolOnInit
Definition ZFProtocol.h:91
virtual void protocolOnInitFinish(void)
see protocolOnInit
Definition ZFProtocol.h:88
virtual void protocolOnDealloc(void)
see protocolOnInit
Definition ZFProtocol.h:94
virtual ZFProtocolLevel protocolImplLevel(void) const
get the level of the protocol implementation
Definition ZFProtocol.h:122
virtual const zfchar * protocolName(void) const
get the name of the protocol module, e.g. "ZFObject"
Definition ZFProtocol.h:110
virtual ZFProtocolInstanceState protocolInstanceState(void)
protocol instance's state
Definition ZFProtocol.h:101
virtual void protocolOnInit(void)
called to init the protocol
Definition ZFProtocol.h:85
virtual void objectInfoT(zfstring &ret) const
see objectInfo
Definition ZFProtocol.h:139
virtual zfstring objectInfo(void) const
get a short info about this object
Definition ZFProtocol.h:149
virtual const zfchar * protocolImplName(void) const
get the name of the protocol implementation, e.g. "ZFObject_default"
Definition ZFProtocol.h:116
see ZFProtocolImplInfoGetAll
Definition ZFProtocol.h:761
void objectInfoT(zfstring &ret) const
see objectInfo
zfstring objectInfo(void) const
return object info
Definition ZFProtocol.h:780
zfbool protocolOptional
whether protocol is optional
Definition ZFProtocol.h:770
zfstring protocolName
protocol's name
Definition ZFProtocol.h:766
ZFProtocol * protocolImpl
protocol's implementation, or null if currently not implemented
Definition ZFProtocol.h:774
instance state of ZFProtocol
Definition ZFProtocol.h:49
@ e_Default
Definition ZFProtocol.h:19
void zfstringAppend(zfstring &s, const zfchar *fmt)
see zfstr
Definition zfstr.h:71
zfstring zfstr(const zfchar *fmt=zft_zfnull)
string format util
Definition zfstr.h:59