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)) { \
342 ZFCoreCriticalErrorPrepare(); \
344 zfstringAppend(err, "(%s)%s depends on (%s)\"%s\"", \
345 _d.implInstance->protocolName(), \
346 _d.implInstance->protocolImplName(), \
347 mismatchProtocolName, \
348 desiredImplPlatformHint); \
349 if(mismatchImpl == zfnull) { \
350 zfstringAppend(err, " but it's not implemented"); \
353 zfstringAppend(err, " but it's implementation \"%s\" mismatch", \
354 mismatchImpl->protocolImplPlatformHint()); \
356 ZFCoreLogTrim(err); \
357 ZFCoreCriticalError(); \
358 zfdelete(_d.implInstance); \
359 _d.implInstance = zfnull; \
363 return (zfself *)impl; \
365 static zfself *_ZFP_ZFProtocolTryAccess(void) { \
366 static ZFProtocol *&impl = zfself::_ZFP_ZFProtocolDataRef().implInstance; \
367 if(impl == zfnull) { \
368 _ZFP_ZFProtocolData &_d = zfself::_ZFP_ZFProtocolDataRef(); \
369 _d.implInstance = zfself::_ZFP_ZFProtocolNewInstance(); \
370 const zfchar *desiredImplPlatformHint = zfnull; \
371 const zfchar *mismatchProtocolName = zfnull; \
372 ZFProtocol *mismatchImpl = zfnull; \
373 if(_d.implInstance != zfnull \
374 && !_d.implInstance->_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl) \
376 zfdelete(_d.implInstance); \
377 _d.implInstance = zfnull; \
380 return (zfself *)impl; \
382 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
385#define _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName) \
414#define ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName) \
415 _ZFP_ZFPROTOCOL_INTERFACE_BEGIN(ZFLIB_, ModuleName)
420#define ZFPROTOCOL_INTERFACE_END(ModuleName) \
421 _ZFP_ZFPROTOCOL_INTERFACE_END(ModuleName)
426#define ZFPROTOCOL_INTERFACE_OPTIONAL \
428 static zfbool _ZFP_ZFProtocolOptional(void) { \
436#define ZFPROTOCOL_INTERFACE_REGISTER(ModuleName) \
437 ZF_STATIC_REGISTER_INIT(ZFProtocolInterfaceRegister_##ModuleName) { \
438 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRegister(); \
440 ZF_STATIC_REGISTER_END(ZFProtocolInterfaceRegister_##ModuleName)
467#define ZFPROTOCOL_TRY_ACCESS(ModuleName) \
468 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolTryAccess())
473#define ZFPROTOCOL_ACCESS(ModuleName) \
474 (ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolAccess())
479#define ZFPROTOCOL_IS_AVAILABLE(ModuleName) \
480 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolIsAvailable()
482typedef void (*_ZFP_ZFProtocolImplRegisterHolderClearCallback)(void);
485 _ZFP_ZFProtocolImplRegisterHolder(
ZF_IN _ZFP_ZFProtocolImplRegisterHolderClearCallback callback)
489 ~_ZFP_ZFProtocolImplRegisterHolder(
void) {
493 _ZFP_ZFProtocolImplRegisterHolderClearCallback callback;
496#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel) \
497 zfclassNotPOD ImplementationClass : zfextend ZFPROTOCOL_INTERFACE_CLASS(ModuleName) { \
500 typedef ZFPROTOCOL_INTERFACE_CLASS(ModuleName) zfsuper; \
502 typedef ImplementationClass zfself; \
505 virtual const zfchar *protocolImplName(void) const { \
506 return #ImplementationName; \
509 virtual ZFProtocolLevel protocolImplLevel(void) const { \
513 static ZFProtocol *_ZFP_##ImplementationClass##_ctor(void) { \
514 return zfnew(ImplementationClass); \
516 static void _ZFP_ZFProtocolUnregister(void) { \
517 if(ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolDataRef().implConstructor == &ImplementationClass::_ZFP_##ImplementationClass##_ctor) { \
518 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default); \
520 _ZFP_ZFProtocolImplDataUnregister(#ModuleName); \
522 static void _ZFP_ZFProtocolRegister(void) { \
523 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplRegister( \
524 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
525 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
526 zftext(#ImplementationName), \
528 static _ZFP_ZFProtocolImplRegisterHolder _holder(&ImplementationClass::_ZFP_ZFProtocolUnregister); \
530 static void _ZFP_ZFProtocolChange(void) { \
531 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange( \
532 &ImplementationClass::_ZFP_##ImplementationClass##_ctor, \
533 &ImplementationClass::_ZFP_ZFProtocolIsAvailableCk, \
534 zftext(#ImplementationName), \
537#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ImplementationClass, ModuleName, implLevel) \
538 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN_(ImplementationName, ImplementationClass, ModuleName, implLevel)
540#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass) \
542 ZFOUTPUT_TYPE(ImplementationClass, {zftToStringT(s, (ZFProtocol const &)v);}) \
543 ZF_STATIC_REGISTER_INIT(ZFPImplReg_##ImplementationClass) { \
544 ImplementationClass::_ZFP_ZFProtocolRegister(); \
546 ZF_STATIC_REGISTER_END(ZFPImplReg_##ImplementationClass)
547#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ImplementationClass) \
548 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END_(ImplementationName, ImplementationClass)
550#define _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
551 static zfbool _ZFP_ZFProtocolIsAvailableCk(void) { \
579#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_HINT(PlatformHint) \
581 virtual const zfchar *protocolImplPlatformHint(void) const { \
582 return PlatformHint; \
597#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_BEGIN() \
599 virtual zfbool _ZFP_ZFProtocol_checkImplDependency( \
600 ZF_OUT const zfchar *&desiredImplPlatformHint \
601 , ZF_OUT const zfchar *&mismatchProtocolName \
602 , ZF_OUT ZFProtocol *&mismatchImpl \
604 if(!zfsuper::_ZFP_ZFProtocol_checkImplDependency(desiredImplPlatformHint, mismatchProtocolName, mismatchImpl)) { \
608#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_ITEM(Protocol, DependencyPlatformHint) \
609 if(ZFPROTOCOL_TRY_ACCESS(Protocol) == zfnull \
610 || !zfstringIsEqual(ZFPROTOCOL_ACCESS(Protocol)->protocolImplPlatformHint(), DependencyPlatformHint) \
612 desiredImplPlatformHint = DependencyPlatformHint; \
613 mismatchProtocolName = ZFM_TOSTRING(Protocol); \
614 mismatchImpl = ZFPROTOCOL_TRY_ACCESS(Protocol); \
618#define ZFPROTOCOL_IMPLEMENTATION_PLATFORM_DEPENDENCY_END() \
628#define ZFPROTOCOL_IMPLEMENTATION_CLASS(Implementation) \
629 ZFPImpl_##Implementation
707#define ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ModuleName, implLevel) \
708 _ZFP_ZFPROTOCOL_IMPLEMENTATION_BEGIN(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName), ModuleName, implLevel)
712#define ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName) \
713 _ZFP_ZFPROTOCOL_IMPLEMENTATION_END(ImplementationName, ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName))
717#define ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction) \
718 _ZFP_ZFPROTOCOL_IMPLEMENTATION_CHECK(CheckAction)
728#define ZFProtocolImplChange(ImplementationName) \
729 ZFPROTOCOL_IMPLEMENTATION_CLASS(ImplementationName)::_ZFP_ZFProtocolChange()
733#define ZFProtocolImplRemove(ModuleName) \
734 ZFPROTOCOL_INTERFACE_CLASS(ModuleName)::_ZFP_ZFProtocolImplChange(zfnull, zfnull, zfnull, v_ZFProtocolLevel::e_Default)
793 && this->protocolName == ref.protocolName
794 && this->protocolOptional == ref.protocolOptional
795 && this->protocolImpl == ref.protocolImpl
799 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:180
#define ZF_OUT
dummy macro that shows the param used as required output
Definition ZFCoreTypeDef_ClassType.h:188
#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:196
#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:758
void objectInfoT(zfstring &ret) const
see objectInfo
zfstring objectInfo(void) const
return object info
Definition ZFProtocol.h:777
zfbool protocolOptional
whether protocol is optional
Definition ZFProtocol.h:767
zfstring protocolName
protocol's name
Definition ZFProtocol.h:763
ZFProtocol * protocolImpl
protocol's implementation, or null if currently not implemented
Definition ZFProtocol.h:771
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:66
zfstring zfstr(const zfchar *fmt=zft_zfnull)
string format util
Definition zfstr.h:59