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);
210#define ZFPROTOCOL_INTERFACE_CLASS(ModuleName) \
211 ZFPInterface_##ModuleName
213#define _ZFP_ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName) \
214 zfclassNotPOD ZFLIB_ ZFPROTOCOL_INTERFACE_CLASS(ModuleName) : zfextend ZFProtocol { \
217 typedef ZFProtocol zfsuper; \
219 typedef ZFPROTOCOL_INTERFACE_CLASS(ModuleName) zfself; \
222 virtual const zfchar *protocolName(void) const { \
223 return #ModuleName; \
226 static _ZFP_ZFProtocolData &_ZFP_ZFProtocolDataRef(void) { \
227 static _ZFP_ZFProtocolData &_d = _ZFP_ZFProtocolImplDataRegister( \
228 zftext(#ModuleName), \
229 zfself::_ZFP_ZFProtocolTryAccessCallbackFunc, \
230 zfself::_ZFP_ZFProtocolOptional()); \
233 static void _ZFP_ZFProtocolDataRegister(void) { \
234 (void)zfself::_ZFP_ZFProtocolDataRef(); \
236 static ZFProtocol *_ZFP_ZFProtocolTryAccessCallbackFunc(void) { \
237 return ZFPROTOCOL_TRY_ACCESS(ModuleName); \
239 static void _ZFP_ZFProtocolInstanceCleanupCallback(ZF_IN _ZFP_ZFProtocolData *implData) { \
240 if(implData->implInstance != zfnull) { \
241 zfdelete(implData->implInstance); \
242 implData->implInstance = zfnull; \
245 static void _ZFP_ZFProtocolImplRegister( \
246 ZF_IN _ZFP_ZFProtocolConstructor implConstructor \
247 , ZF_IN _ZFP_ZFProtocolIsAvailableCkCallback isAvailableCk \
248 , ZF_IN const zfchar *implName \
249 , ZF_IN ZFProtocolLevel implLevel \
251 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
252 if(_d.implConstructor != zfnull) { \
253 if(_d.implLevel == implLevel) { \
254 ZFCoreCriticalMessageTrim("only one implementation is allowed for protocol \"%s\", while we have: \"%s\", \"%s\"", \
260 else if(_d.implLevel > implLevel) { \
274 _d.implConstructor = implConstructor; \
275 _d.isAvailableCk = isAvailableCk; \
276 _d.implName = implName; \
277 _d.implLevel = implLevel; \
278 _d.implCleanupCallback = zfself::_ZFP_ZFProtocolInstanceCleanupCallback; \
280 static void _ZFP_ZFProtocolImplChange( \
281 ZF_IN _ZFP_ZFProtocolConstructor implConstructor \
282 , ZF_IN _ZFP_ZFProtocolIsAvailableCkCallback isAvailableCk \
283 , ZF_IN const zfchar *implName \
284 , ZF_IN ZFProtocolLevel implLevel \
286 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
287 if(_d.implInstance != zfnull) { \
288 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnDeallocPrepare; \
289 _d.implInstance->protocolOnDeallocPrepare(); \
290 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnDealloc; \
291 _d.implInstance->protocolOnDealloc(); \
292 _d.implInstance->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInit; \
294 zfself::_ZFP_ZFProtocolInstanceCleanupCallback(&_d); \
295 if(implConstructor != zfnull && !zfstringIsEmpty(implName)) { \
296 _d.implConstructor = implConstructor; \
297 _d.isAvailableCk = isAvailableCk; \
298 _d.implName = implName; \
299 _d.implLevel = implLevel; \
302 _d.implConstructor = zfnull; \
303 _d.isAvailableCk = zfnull; \
304 _d.implName.removeAll(); \
305 _d.implLevel = v_ZFProtocolLevel::e_Default; \
308 static inline zfbool _ZFP_ZFProtocolIsAvailable(void) { \
309 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
310 return _d.implConstructor != zfnull && _d.isAvailableCk(); \
312 static zfself *_ZFP_ZFProtocolNewInstance(void) { \
313 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
314 _ZFP_ZFProtocolImplAccess(); \
315 zfself *retVal = zfnull; \
316 if(_d.isAvailableCk != zfnull && _d.isAvailableCk()) { \
317 retVal = (zfself *)_d.implConstructor(); \
318 if(retVal != zfnull) { \
319 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInit; \
320 retVal->protocolOnInit(); \
321 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_OnInitFinish; \
322 retVal->protocolOnInitFinish(); \
323 retVal->_ZFP_ZFProtocol_protocolInstanceState = v_ZFProtocolInstanceState::e_Idle; \
328 static zfself *_ZFP_ZFProtocolAccess(void) { \
329 static ZFProtocol *&impl = zfself::_ZFP_ZFProtocolDataRef().implInstance; \
330 if(impl == zfnull) { \
331 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
332 _d.implInstance = zfself::_ZFP_ZFProtocolNewInstance(); \
333 if(_d.implInstance == zfnull) { \
334 ZFCoreCriticalMessageTrim("no implementation for protocol \"%s\"", \
338 const zfchar *desiredImplPlatformHint = zfnull; \
339 const zfchar *mismatchProtocolName = zfnull; \
340 ZFProtocol *mismatchImpl = zfnull; \
341 if(!_d.implInstance->_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl)) { \
343 zfstringAppend(err, "(%s)%s depends on (%s)\"%s\"", \
344 _d.implInstance->protocolName(), \
345 _d.implInstance->protocolImplName(), \
346 mismatchProtocolName, \
347 desiredImplPlatformHint); \
348 if(mismatchImpl == zfnull) { \
349 zfstringAppend(err, " but it's not implemented"); \
352 zfstringAppend(err, " but it's implementation \"%s\" mismatch", \
353 mismatchImpl->protocolImplPlatformHint()); \
355 ZFCoreLogTrim(err); \
356 ZFCoreCriticalError(err); \
357 zfdelete(_d.implInstance); \
358 _d.implInstance = zfnull; \
362 return (zfself *)impl; \
364 static zfself *_ZFP_ZFProtocolTryAccess(void) { \
365 static ZFProtocol *&impl = zfself::_ZFP_ZFProtocolDataRef().implInstance; \
366 if(impl == zfnull) { \
367 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
368 _d.implInstance = zfself::_ZFP_ZFProtocolNewInstance(); \
369 const zfchar *desiredImplPlatformHint = zfnull; \
370 const zfchar *mismatchProtocolName = zfnull; \
371 ZFProtocol *mismatchImpl = zfnull; \
372 if(_d.implInstance != zfnull \
373 && !_d.implInstance->_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl) \
375 zfdelete(_d.implInstance); \
376 _d.implInstance = zfnull; \
379 return (zfself *)impl; \
381 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
384#define _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName) \
413#define ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName) \
414 _ZFP_ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName)
419#define ZFPROTOCOL_INTERFACE_END(ModuleName) \
420 _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName)
425#define ZFPROTOCOL_INTERFACE_OPTIONAL \
427 static zfbool _ZFP_ZFProtocolOptional(void) { \
435#define ZFPROTOCOL_INTERFACE_REGISTER(ModuleName) \
436 ZF_STATIC_REGISTER_INIT(ZFProtocolInterfaceRegister_##ModuleName) { \
437 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRegister(); \
439 ZF_STATIC_REGISTER_END(ZFProtocolInterfaceRegister_##ModuleName)
466#define ZFPROTOCOL_TRY_ACCESS(ModuleName) \
467 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolTryAccess())
472#define ZFPROTOCOL_ACCESS(ModuleName) \
473 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolAccess())
478#define ZFPROTOCOL_IS_AVAILABLE(ModuleName) \
479 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolIsAvailable()
481typedef void (*_ZFP_ZFProtocolImplRegisterHolderClearCallback)(void);
484 _ZFP_ZFProtocolImplRegisterHolder(
ZF_IN _ZFP_ZFProtocolImplRegisterHolderClearCallback callback)
488 ~_ZFP_ZFProtocolImplRegisterHolder(
void) {
492 _ZFP_ZFProtocolImplRegisterHolderClearCallback callback;
495#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel) \
496 zfclassNotPOD ImplementationClass : zfextend ZFPROTOCOL_INTERFACE_CLASS(ModuleName) { \
499 typedef ZFPROTOCOL_INTERFACE_CLASS(ModuleName) zfsuper; \
501 typedef ImplementationClass zfself; \
504 virtual const zfchar *protocolImplName(void) const { \
505 return #ImplementationName; \
508 virtual ZFProtocolLevel protocolImplLevel(void) const { \
512 static ZFProtocol *_ZFP_##ImplementationClass##_ctor(void) { \
513 return zfnew(ImplementationClass); \
515 static void _ZFP_ZFProtocolUnregister(void) { \
516 if(ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRef().implConstructor == &ImplementationClass::_ZFP_##ImplementationClass##_ctor) { \
517 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default); \
519 _ZFP_ZFProtocolImplDataUnregister(#ModuleName); \
521 static void _ZFP_ZFProtocolRegister(void) { \
522 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplRegister( \
523 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
524 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
525 zftext(#ImplementationName), \
527 static _ZFP_ZFProtocolImplRegisterHolder _holder(&ImplementationClass::_ZFP_ZFProtocolUnregister); \
529 static void _ZFP_ZFProtocolChange(void) { \
530 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange( \
531 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
532 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
533 zftext(#ImplementationName), \
536#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ImplementationClass, ModuleName, implLevel) \
537 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel)
539#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass) \
541 ZFOUTPUT_TYPE(ImplementationClass, {zftToStringT(s, (ZFProtocol const &)v);}) \
542 ZF_STATIC_REGISTER_INIT(ZFPImplReg_##ImplementationClass) { \
543 ImplementationClass::_ZFP_ZFProtocolRegister(); \
545 ZF_STATIC_REGISTER_END(ZFPImplReg_##ImplementationClass)
546#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ImplementationClass) \
547 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass)
549#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
550 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
578#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_HINT(PlatformHint) \
580 virtual const zfchar *protocolImplPlatformHint(void) const { \
581 return PlatformHint; \
596#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_BEGIN() \
598 virtual zfbool _ZFP_ZFProtocol_checkImplDependency( \
599 ZF_OUT const zfchar *&desiredImplPlatformHint \
600 , ZF_OUT const zfchar *&mismatchProtocolName \
601 , ZF_OUT ZFProtocol *&mismatchImpl \
603 if(!zfsuper::_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl)) { \
607#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_ITEM(Protocol, DependencyPlatformHint) \
608 if(ZFPROTOCOL_TRY_ACCESS(Protocol) == zfnull \
609 || !zfstringIsEqual(ZFPROTOCOL_ACCESS(Protocol)->protocolImplPlatformHint(), DependencyPlatformHint) \
611 desiredImplPlatformHint = DependencyPlatformHint; \
612 mismatchProtocolName = ZFM_TOSTRING(Protocol); \
613 mismatchImpl = ZFPROTOCOL_TRY_ACCESS(Protocol); \
617#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_END() \
627#define ZFPROTOCOL_IMPLEMENTATION_CLASS(Implementation) \
628 ZFPImpl_##Implementation
706#define ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ModuleName, implLevel) \
707 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName), ModuleName, implLevel)
711#define ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName) \
712 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName))
716#define ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
717 _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction)
727#define ZFProtocolImplChange(ImplementationName) \
728 ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName)::_ZFP_ZFProtocolChange()
732#define ZFProtocolImplRemove(ModuleName) \
733 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default)
792 && this->protocolName == ref.protocolName
793 && this->protocolOptional == ref.protocolOptional
794 && this->protocolImpl == ref.protocolImpl
798 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
ZFProtocol * ZFProtocolForName(const zfchar *name, const zfchar *desiredImpl=(zft_zfnull))
get protocol with name or null if no such protocol
ZFCoreArray< ZFProtocolImplInfo > ZFProtocolImplInfoGetAll()
for debug use only, get all protocol's info
ZFCoreArray< ZFProtocolImplInfo > ZFProtocolImplInfoGetAllNotImplemented()
util method to ZFProtocolImplInfoGetAll
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:757
void objectInfoT(zfstring &ret) const
see objectInfo
zfstring objectInfo(void) const
return object info
Definition ZFProtocol.h:776
zfbool protocolOptional
whether protocol is optional
Definition ZFProtocol.h:766
zfstring protocolName
protocol's name
Definition ZFProtocol.h:762
ZFProtocol * protocolImpl
protocol's implementation, or null if currently not implemented
Definition ZFProtocol.h:770
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