📄 tdc_base.h
字号:
M_TDC_INTERFACE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, MESSAGE_UNION,MESSAGE_UNION, MESSAGE)\
private:\
T_TDC_INTERFACE_MESSAGE_UNION (const T_TDC_INTERFACE_MESSAGE_BASE& primitive)\
{\
TBD;\
}\
public:\
#define M_TDC_INTERFACE_MESSAGE_ELEMENT_ADDITIONAL(MSG)\
/*nothing*/
//============================================================================
#if TDC_DEBUG_DOT_COMPLETE
void F_TDC_DEBUG_DOT_COMPLETE__TDC_H_1I()
{
T_TDC_DEBUG_DOT_COMPLETE__TDC_H_1 s;
s.
i;
}
#else
#endif
//----------------------------------------------------------------------------
// macros to repeat stuff that is similar in many instance classes
//----------------------------------------------------------------------------
#define M_TDC_INSTANCE_ADDITIONAL_BASE(IN_CLASS, WITH_BODY, T_INTERFACE_, T_INSTANCE, T_HANDLE_)\
IN_CLASS(typedef T_INTERFACE_ T_INTERFACE;)\
IN_CLASS(typedef T_HANDLE_ T_HANDLE;)\
IN_CLASS(T_HANDLE* handle;)\
IN_CLASS(static) T_TDC_HANDLE_BASE* T_INSTANCE::implement_new_handle ()\
WITH_BODY({\
return new_##T_HANDLE_();\
})\
IN_CLASS(virtual) T_TDC_INTERFACE_BASE* T_INSTANCE::new_interface() const\
WITH_BODY({\
return new_##T_INTERFACE_();\
})\
IN_CLASS(public:)\
T_INSTANCE::T_INSTANCE ()\
WITH_BODY({\
construct_handle(new_##T_HANDLE_);\
})\
T_INSTANCE::~T_INSTANCE ()\
WITH_BODY({\
destroy_handle ();\
})\
T_INSTANCE::T_INSTANCE (const T_INTERFACE_& value_)\
WITH_BODY({\
construct_from_interface ((T_TDC_INTERFACE_BASE*)&value_, new_##T_HANDLE_); /*T_INTERFACE not defined yet, means need cast here to the base type pointer */ \
})\
IN_CLASS(explicit) T_INSTANCE::T_INSTANCE (const T_TDC_HANDLE_BASE* value_)\
WITH_BODY({/* used by e.g. operator T_INSTANCE () */\
TBD;\
/*get_navigation ()->copy_descriptor_ref (value_);*/\
})\
void T_INSTANCE::operator = (const T_INSTANCE& value_)\
WITH_BODY({\
set_value (value_);\
/*return *this;*/\
})\
M_TDC_NOT_##IN_CLASS(T_INTERFACE_* T_INSTANCE::operator -> ()\
{\
return (T_INTERFACE*)get_navigation();\
})\
T_INSTANCE::T_INSTANCE (const T_INSTANCE& value_)\
WITH_BODY({\
construct_from_instance (value_, new_##T_HANDLE_);\
})\
T_INSTANCE::T_INSTANCE (T_INSTANCE (*f) ())\
WITH_BODY({\
T_INSTANCE value_ = f ();\
construct_from_instance (value_, new_##T_HANDLE_);\
})\
M_TDC_ADDITIONAL_CALL_FUNCTION_BASE(IN_CLASS, WITH_BODY, T_INSTANCE, T_INSTANCE, T_INSTANCE)
#define M_TDC_INSTANCE_ADDITIONAL_MAIN(IN_CLASS, WITH_BODY, SHORT_NAME, PREFIXED_SHORT_NAME, BASE)\
public:\
void operator = (const T_TDC_INTERFACE_##BASE##_BASE& value_)\
{\
set_main_value (&value_);\
}\
void operator = (const T_TDC_INSTANCE_##BASE##_BASE& value_)\
{\
set_main_value (&value_);\
}\
T_##SHORT_NAME (const T_TDC_INTERFACE_##BASE##_BASE& value_)\
{\
construct_main_value (&value_, new_T_TDC_HANDLE_##PREFIXED_SHORT_NAME);\
}\
T_##SHORT_NAME (const T_TDC_INSTANCE_##BASE##_BASE& value_)\
{\
construct_main_value (&value_, new_T_TDC_HANDLE_##PREFIXED_SHORT_NAME);\
}\
M_TDC_INSTANCE_ADDITIONAL_BASE (IN_CLASS, WITH_BODY, T_TDC_INTERFACE_##PREFIXED_SHORT_NAME, T_##SHORT_NAME, T_TDC_HANDLE_##PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_PART_ADDITIONAL(IN_CLASS, WITH_BODY, T_INTERFACE, T_INSTANCE, T_DESCRIPTOR, T_HANDLE)\
public:\
T_INSTANCE (const T_TDC_ACTION& action_)\
{\
construct_from_action (action_, new_##T_HANDLE);\
}\
T_TDC_ACTION operator = (const T_TDC_ACTION& action_)\
{\
set_action (action_);\
return action_;\
}\
M_TDC_INSTANCE_ADDITIONAL_BASE(IN_CLASS, WITH_BODY, T_INTERFACE, T_INSTANCE, T_HANDLE)
#define M_TDC_INSTANCE_COMP_ADDITIONAL(IN_CLASS, WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_PART_ADDITIONAL (IN_CLASS, WITH_BODY, T_TDC_INTERFACE_##PREFIXED_SHORT_NAME, T_##SHORT_NAME, T_TDC_DESCRIPTOR_##PREFIXED_SHORT_NAME, T_TDC_HANDLE_##PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_ENUM_ADDITIONAL(IN_CLASS, WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)\
T_##SHORT_NAME (T_TDC_ENUM_##PREFIXED_SHORT_NAME value_)\
{\
construct_from_number (value_, new_T_TDC_DESCRIPTOR_##PREFIXED_SHORT_NAME);\
}\
void operator = (T_TDC_ENUM_##PREFIXED_SHORT_NAME value_)\
{\
set_descriptor_value (value_);\
}\
M_TDC_INSTANCE_PART_ADDITIONAL (IN_CLASS, WITH_BODY, T_TDC_INTERFACE_##PREFIXED_SHORT_NAME, T_##SHORT_NAME, T_TDC_DESCRIPTOR_##PREFIXED_SHORT_NAME, T_TDC_DESCRIPTOR_##PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_INT_ADDITIONAL(SHORT_NAME)\
typedef T_TDC_HANDLE_##SHORT_NAME T_HANDLE;\
T_##SHORT_NAME (int value_)\
{\
construct_from_number (value_, new_T_TDC_DESCRIPTOR_##SHORT_NAME);\
}\
void operator = (int value_)\
{\
set_descriptor_value (value_);\
}\
M_TDC_INSTANCE_PART_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, T_TDC_INTERFACE_##SHORT_NAME, T_##SHORT_NAME, T_TDC_DESCRIPTOR_##SHORT_NAME, T_TDC_DESCRIPTOR_##SHORT_NAME)
//-----
#define M_TDC_INSTANCE_PRIM_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME, PRIMITIVE)
#define M_TDC_INSTANCE_PSTRUCT_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_PUNION_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_SDU_ADDITIONAL(SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,SHORT_NAME)
#define M_TDC_INSTANCE_PENUM_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ENUM_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
//-----
#define M_TDC_INSTANCE_MSG_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME, MESSAGE)
#define M_TDC_INSTANCE_MSTRUCT_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_MUNION_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_MENUM_ADDITIONAL(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ENUM_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
//-----
#define M_TDC_INSTANCE_XXX_PRIMITIVE_UNION_ADDITIONAL(SAP,PREFIXED_SAP)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, SAP,PREFIXED_SAP, PRIMITIVE)
#define M_TDC_INSTANCE_XXX_MESSAGE_UNION_ADDITIONAL(MSG,PREFIXED_MSG)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, MSG,PREFIXED_MSG, MESSAGE)
#define M_TDC_INSTANCE_PRIMITIVE_ADDITIONAL()\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, PRIMITIVE_UNION,PRIMITIVE_UNION, PRIMITIVE)\
static int call_tdc_initialize_primitive ();\
#define M_TDC_INSTANCE_MESSAGE_ADDITIONAL()\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITHOUT_BODY, MESSAGE_UNION,MESSAGE_UNION, MESSAGE)\
static int call_tdc_initialize_message ();\
//-----
#define M_TDC_INSTANCE_PRIM_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME, PRIMITIVE)
#define M_TDC_INSTANCE_PSTRUCT_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_PUNION_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_PENUM_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ENUM_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
//-----
#define M_TDC_INSTANCE_MSG_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME, MESSAGE)
#define M_TDC_INSTANCE_MSTRUCT_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_MUNION_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_COMP_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
#define M_TDC_INSTANCE_MENUM_ADDITIONAL_INLINE(SHORT_NAME,PREFIXED_SHORT_NAME)\
M_TDC_INSTANCE_ENUM_ADDITIONAL (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SHORT_NAME,PREFIXED_SHORT_NAME)
//-----
#define M_TDC_INSTANCE_XXX_PRIMITIVE_UNION_ADDITIONAL_INLINE(SAP,PREFIXED_SAP)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITH_BODY, SAP,PREFIXED_SAP, PRIMITIVE)
#define M_TDC_INSTANCE_XXX_MESSAGE_UNION_ADDITIONAL_INLINE(MSG,PREFIXED_MSG)\
M_TDC_INSTANCE_ADDITIONAL_MAIN (M_TDC_IN_CLASS, M_TDC_WITH_BODY, MSG,PREFIXED_MSG, MESSAGE)
//-----
#ifdef TDC_TYPE_NAME_COMPLETE
#define M_TDC_TYPE_NAME_COMPLETE { T_TDC_TYPE_NAME type_name = {0}; return type_name; }
#else
#define M_TDC_TYPE_NAME_COMPLETE ;
#endif
#endif //DOT_COMPLETE_DEFINES
//============================================================================
#if TDC_DEBUG_DOT_COMPLETE
void F_TDC_DEBUG_DOT_COMPLETE__TDC_H_1J()
{
T_TDC_DEBUG_DOT_COMPLETE__TDC_H_1 s;
s.
i;
}
#else
#endif
//============================================================================
// implementation classes
//============================================================================
typedef bool T_TDC_TABLE_KIND;
enum T_TDC_ACTION_ENUM
{
TDC_ACTION_UNKNOWN,
// MANDATORY-SEND OPTIONAL-SEND MANDATORY-WAIT OPTIONAL-WAIT
TDC_ACTION_SKIP, // ERROR ABSENT SKIPED SKIPED
TDC_ACTION_SHOW, // ERROR ABSENT SKIPED SKIPED
TDC_ACTION_FORBID, // ERROR ABSENT ERROR CHECKED
TDC_ACTION_REQUIRE, // ERROR ERROR ERROR CHECKED PRESENT
TDC_ACTION_MESSAGE,
TDC_ACTION_DESTROYED,
TDC_ACTION_SKIP_TO_END,
TDC_ACTION_SET = 0x10, // PRESENT PRESENT CHECKED CHECKED VALUE
TDC_ACTION_HAS_VALUE = 0x20,
TDC_ACTION_HAS_REF = 0x40,
TDC_ACTION_IS_IMPLICIT = 0x80,
TDC_ACTION_SET_VALUE = TDC_ACTION_SET + TDC_ACTION_HAS_VALUE,
TDC_ACTION_SET_REF = TDC_ACTION_SET + TDC_ACTION_HAS_REF,
TDC_ACTION_CHILD_TOUCHED = TDC_ACTION_SET + TDC_ACTION_HAS_REF + TDC_ACTION_IS_IMPLICIT,
TDC_ACTION_DEFAULT = TDC_ACTION_UNKNOWN
};
struct T_TDC_ASSIGN_ACTION
{
/* allow one optional extra set of () on action member functions, first set is suplyed by macro
second set might be suplyed by the user, this will have no effect on behaviour of code */
void operator ()();
};
extern T_TDC_ASSIGN_ACTION tdc_assign_action;
struct T_TDC_ACTION
{
//create a waper class for T_TDC_ACTION_ENUM so that the action constants can not be converted to integers
T_TDC_ACTION_ENUM action;
T_TDC_ACTION (T_TDC_ACTION_ENUM action_):
action (action_)
{
//nothing
}
T_TDC_ACTION ();
};
struct T_TDC_CREATE_ACTION:T_TDC_ACTION
{
/* This type is returned by constant action function, this allow the user to optional
omit the "()" after the action name
Src code After macro expantion Function returns After implicit type convting
======== ==================== ======================== =====================
_skip tdc_skip() SKIP::T_TDC_CREATE_ACTION SKIP::T_TDC_ACTION
_skip() tdc_skip()() SKIP::T_TDC_ACTION SKIP::T_TDC_ACTION
_skip()() tdc_skip()()() <error T_TDC_ACTION have no operator ()>
*/
T_TDC_CREATE_ACTION ();
T_TDC_ACTION operator()();
};
extern T_TDC_CREATE_ACTION SKIP;
extern T_TDC_CREATE_ACTION SHOW;
extern T_TDC_CREATE_ACTION FORBID;
extern T_TDC_CREATE_ACTION REQUIRE;
extern T_TDC_CREATE_ACTION SKIP_TO_END;
extern T_TDC_CREATE_ACTION tdc_skip();
extern T_TDC_CREATE_ACTION tdc_show();
extern T_TDC_CREATE_ACTION tdc_forbid();
extern T_TDC_CREATE_ACTION tdc_require();
extern T_TDC_CREATE_ACTION tdc_skip_to_end();
//----------------------------------------------------------------------------
enum T_TDC_EVENT_ENUM
{
TDC_EVENT_SEND,
TDC_EVENT_AWAIT
};
enum T_TDC_IS_ENUM
{
TDC_IS_UNKNOWN = 0,
TDC_IS_VAR = 0x001,
TDC_IS_STRUCT = 0x002,
TDC_IS_SDU = 0x004,
TDC_IS_P = 0x008,
TDC_IS_M = 0x010,
TDC_IS_COMP = 0x20,
TDC_IS_ARRAY = 0x40,
TDC_IS_UNION = 0x80,
TDC_IS_MESSAGE_UNION = 0x100,
TDC_IS_PRIMITIVE_UNION = 0x200,
TDC_IS_MSG = 0x400,
TDC_IS_PRIM = 0x800,
TDC_IS_XXX_MESSAGE_UNION = 0x1000,
TDC_IS_XXX_PRIMITIVE_UNION = 0x2000,
TDC_IS_POINTER = 0x4000,
TDC_IS_PVAR = TDC_IS_VAR | TDC_IS_P,
TDC_IS_MVAR = TDC_IS_VAR | TDC_IS_M
};
//----------------------------------------------------------------------------
struct T_TDC_HANDLE_BASE;
struct T_TDC_DESCRIPTOR_BASE;
struct T_TDC_INSTANCE_MAIN_BASE;
struct T_TDC_INTERFACE_BASE;
struct T_TDC_INSTANCE_BASE;
struct T_TDC_PATH;
struct T_TDC_PATH_TEXT;
typedef T_TDC_INTERFACE_BASE* (*T_TDC_NEW_INTERFACE)();
typedef T_TDC_HANDLE_BASE* (*T_TDC_NEW_HANDLE)();
struct T_PRIMITIVE_UNION;
struct T_TDC_INTERFACE_PRIMITIVE_UNION;
struct T_TDC_DESCRIPTOR_PRIMITIVE_UNION;
struct T_MESSAGE_UNION;
struct T_TDC_INTERFACE_MESSAGE_UNION;
struct T_TDC_DESCRIPTOR_MESSAGE_UNION;
typedef signed long T_TDC_INT_S32;
typedef signed short T_TDC_INT_S16;
typedef signed char T_TDC_INT_S8;
typedef unsigned long T_TDC_INT_U32;
typedef unsigned short T_TDC_INT_U16;
typedef unsigned char T_TDC_INT_U8;
typedef char CHAR;
//----------------------------------------------------------------------------
inline unsigned long num_elements(const unsigned char* array)
{
return strlen((const char*)array);
}
inline unsigned long num_elements(const signed char* array)
{
return strlen((const char*)array);
}
//----------------------------------------------------------------------------
enum T_TDC_RW_MODE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -