📄 cplusbase.h
字号:
int ObjectTypeId() { return 3; }
void setParam(DWORD param) { m_wParam=param; }
DWORD getParam() { return m_wParam; }
int GetVariableCount();
void Add(VariableDefinition* pObject,DWORD nParam=0);
VariableDefinition* GetAt(int nIndex,DWORD* lpParam=NULL);
VariableDefinition* GetVariableDefinition(char* name);
TObject* Get_DefinitionObject(WORD nIdentifierId);
void RemoveAll(bool bDeleteObject=true);
bool m_bLoopMark;
virtual bool CompleteIt(OTSTR& strError); // Check BitLen, and set BeginBit
virtual bool GetIntegratedType(int* type=NULL) { return false; }
};
////////////////////////////////////////////////////
class CEnumItem: public CVarient, public TObject
{
public:
CEnumItem() {}
~CEnumItem() {}
int ObjectTypeId() { return 1; }
};
class EnumItemList: protected TObArray<CEnumItem>, public TObject
{
public:
enum { COMMENT_OR=0, COMMENT_EQUAL=1 };
public:
EnumItemList();
~EnumItemList();
int ObjectTypeId() { return 2; }
void setName(char* szName);
OTSTR& getName();
void setDescription(char* szDescription);
OTSTR& getDescription();
/////////////////////////////////////////////////////
int GetSize();
CEnumItem* AddItem(CEnumItem& EnumItem,bool bRepetitionCheck=true);
int FindItem(char* name);
CEnumItem* GetAt(int nIndex);
bool Lookup_byName (char* name, long& valReturn, char** szDescriptionReturn=NULL);
bool Lookup_byValue(long value, OTSTR& strRetrun, char** szDescriptionReturn=NULL);
void RemoveAll();
////////////////////////////////////////////////////////////////
bool GetComments(long value,int nMode, OTSTR& strReturn,char* szDefault=NULL);
};
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
// RunTime Object
//
// DumpToList(nDisplayAttr)
enum
{
SH_INTEGRATE_STRUC=1, SH_SHOW_VALUE_ANYWAY=2, SH_SHOW_COMMENT=4,
SH_SHOW_ELEMID =8, SH_SHOW_LEADERMARK =16,
SH_INDENT_ON =32, // 缩进
};
#define COL_LOCATION 0
#define COL_BITMASK 1
#define COL_NAME 2
#define COL_DESCRIPTION 3
#define COL_COMMENT 4
class CStruct;
class RunEnv;
class NullSyntaxObject;
#ifdef _DLL_PROJECT
class CLASS_EXPORT CVariableItem: public TVarient
#else
class CVariableItem: public TVarient
#endif
{
/////////////////////////////////////////
// 注: TVarient中带的name,type,size无效, 由m_Attr替代
public:
CVariableItem();
virtual ~CVariableItem();
bool Create(CStruct* pParentStruct,VariableDefinition* pVariableDefinition); // 创建已定义的变量
bool Create(StructDefinition* pStructDefinition, char* varname, long size); // 根据已定义的结构创建变量
bool Create(VariableItemAttr::type_ extype, char* varname, long size); // 创建简单数据类型变量
bool init() { return false; } // this function not allowed
//////////////////////////////////////////////////
VariableItemAttr& GetAttr() { return m_Attr; }
VariableDefinition* GetDefinition() { return m_pVariableDefinition; }
int getType() { return m_Attr.getType(); }
int getSize() { return m_Attr.getSize(); }
OTSTR& getName() { return m_Attr.getName(); }
char* getTypeName() { return m_Attr.getTypeName(); }
int getBitLen() { return m_Attr.getBitLen(); }
void setDescription(char* szDescription) { m_Attr.setDescription(szDescription); }
OTSTR& getDescription() { return m_Attr.getDescription(); }
OTSTR GetVariableName(); // name[..]
OTSTR GetNameEx(); // structname.itemname
////////////////////////////////////////////////
// void setParam(DWORD param) { m_wParam=param; }
// DWORD getParam() { return m_wParam; }
long GetId() { return m_Id; }
////////////////////////////////////////////////
// 对T_PCHOICE和T_PSTRUCT适用
bool isStruct(bool bIncludeChoice=true);
long GetSubElemCount(int nStructIdx,bool bConsiderImplicitChoiceElem);
CVariableItem* GetSubElemAt(int nStructIdx, int nSubItemIdx, bool bConsiderImplicitChoiceElem); // 取第nStructIdx个结构元素的第nSubItemIdx个变量
CVariableItem* FindFirstSubElembyId(int nStructIdx, long ElemId, bool bConsiderImplicitChoiceElem); // 例: Structname DataA; 取结构DataA下的一个变量
CVariableItem* FindFirstSubElem (int nStructIdx, char* name, bool bCaseSensitive,bool bConsiderImplicitChoiceElem);
CVariableItem* RemoveSubElemAt(int nStructIdx, int nSubItemIdx);
////////////////////////////////////////////////
// T_PCHOICE是含有动态个数变量的特殊结构
bool isChoice();
bool isImplicitChoice();
bool AddChoiceElem(CVariableItem* pVariableItem, int ElemId, char* lpLeadChForDump=NULL); // 例: Choice DataA; 在空结构DataA下加一个变量(类型可为结构)
long GetChoiceElemCount(bool bConsiderImplicitChoiceElem);
CVariableItem* GetChoiceElemAt(int nSubItemIdx, bool bConsiderImplicitChoiceElem); // Choice Index永远=0, size=1
CVariableItem* FindFirstChoiceElembyId(long ElemId, bool bConsiderImplicitChoiceElem); // 例: Choice DataA; 取结构DataA下的一个变量
CVariableItem* FindFirstChoiceElem (char* name, bool bCaseSensitive, bool bConsiderImplicitChoiceElem);
////////////////////////////////////////////////
virtual bool Clone(CVariableItem& VariableItem, bool bCloneNameAlso); // bCloneNameAlso=false, 表示保留原名
virtual bool PassAddressClone(CVariableItem& SrcVariableItem,long nIndex,VariableDefinition* pVariableDefinition); // 如果有相关的Definition,则需要检查类型匹配
////////////////////////////////////////////////
// " (nIndex>= 0)||(size==1) szdata为单一元素= ..
// (nIndex==-1)&&(size> 1) 为结构 ={ .. , .. [,] }"
bool sets(long nIndex, char* szdata, RunEnv* pCurRunEnv=NULL); // pCurRunEnv 为其间表达式运算的环境
bool sets(char* szdata, RunEnv* pCurRunEnv=NULL); // nIndex=0, 方便对size=1的元素的访问
bool setAt_WithBitsData(long nIndex, CVarient& VarientVal);
bool setAt_WithBitsData(long nIndex, unsigned data);
////////////////////////////////////////////////
// lastIdx=-1 mean noIdx or All array[], when lastIdx==NULL, 最后一个不能有[]
// FOR CHOICE WITH NAME=NULL
CVariableItem* GetItem(long nIdx,char* NextString, long* retlastIdx, RunEnv* pCurRunEnv=NULL);
CVariableItem* GetItem(char* NextString, long* retlastIdx, RunEnv* pCurRunEnv=NULL);
////////////////////////////////////////////////
bool Dump(char* filename,bool bOverWrite);
bool DumpToList(VirtualList& List,TObject* pTranslater,WORD nDisplayAttr); // pTranslater used by GetValueComment()
protected:
CStruct* m_pParentStruct;
VariableDefinition* m_pVariableDefinition; // 描述变量定义, Defined VariableDefinition
StructDefinition* m_pStructDefinition; // 描述结构定义, 如果变量是结构类型则该项有效
VariableItemAttr m_Attr;
long m_Id; // 标识号, 可用于Choice下成员的ElemId
DWORD m_wParam;
virtual CStruct* NewStruct();
bool SetStructItem(int nIndex,CStruct* pStruct);
CStruct* GetStructItem(int nIndex); // 注: VariableItem为T_PSTRUCT,T_PCHOICE类型, 指向CStruct
bool Clone(CVariableItem& VariableItem,CStruct* pParentStruct, bool bCloneNameAlso);
void Destroy();
///////////////////////////////////////////////////
void Dump(FILE* fp, OTSTR strHeaderFormat); // "%?ds %?ds %s" (type name = data)
bool DumpToList(CVariableItem* pParentObject,long MaxElemIdLen,VirtualList& List,long ParentItemId,TObject* pTranslater,WORD nDisplayAttr,long nSpaceLen, bool bOneOfMultiStructMember, bool bisFirstItemInStruct);
bool DumpStructToList(CVariableItem& VariableItem, int nIndex, VirtualList& List,long ParentItemId,TObject* pTranslater,WORD nDisplayAttr,long nSpaceLen,int nStructIndex,bool bShowChoiceItemMark);
bool SetListItemData(VirtualList& List,bool& bFirstRow, long& nItem, long nCol, DWORD Itemparam, char* szText);
long GetMaxSubElemIdLen(int nStructIdx,bool bConsiderImplicitChoiceElem);
virtual void DumpLocationMask(OTSTR& str) { str=""; }
virtual bool DumpErrorFlag() { return false; }
virtual bool ValueValid() { return true; }
virtual bool DumpBitsMask(OTSTR& str) { str=""; return true; }
////////////////////////////////////////////////
class InterData
{
public:
char m_NameLeadCh;
bool m_bisImplicitChoice;
public:
InterData() { Clear(); }
~InterData() {}
void Clear()
{
m_NameLeadCh=' ';
m_bisImplicitChoice=false;
}
void operator=(const InterData& right)
{
m_NameLeadCh=right.m_NameLeadCh;
m_bisImplicitChoice=right.m_bisImplicitChoice;
}
};
InterData m_InterData;
InterData* m_pPassAddressInterData;
public:
void SetNameLeadCh(char Ch);
char GetNameLeadCh() { return m_InterData.m_NameLeadCh; }
////////////////////////////////////////////////////////////
// 值的Comment: VarDefinition_Dump > TypeOF's struct's Dump
virtual bool isValueCommentValid() { return false; }
virtual int GetValueComment(TObject* pTranslater,CVariableItem* pParentObject,int nArrIndex,OTSTR& strComment,char* szDefault=SHOW_WHEN_COMMENT_NOT_FOUND) { strComment=""; return 0; } // false表示未取得匹配的Comment ( or或者equal不匹配 , strComment可返回不匹配描述)
////////////////////////////////////////////////////////////
// TypeOfData: 用以取得综合值的结构体
virtual bool isTypeOfDataValid(WORD nDisplayAttr) { return false; }
virtual CVariableItem* GetTypeOfData(int nIndex,WORD nDisplayAttr) { return NULL; }
private:
friend class RunTimeStk;
friend class CStruct;
};
///////////////////////////////////////////
class CStruct: public TName
{
public:
CStruct();
virtual ~CStruct();
int GetItemCount(bool bConsiderImplicitChoiceElem);
CVariableItem* GetVariable (char* name, bool bCaseSensitive, bool bConsiderImplicitChoiceElem);
CVariableItem* GetVariableAt(int nIndex, bool bConsiderImplicitChoiceElem);
CVariableItem* RemoveVariableAt(int nIndex);
bool sets(char* szdata,RunEnv* pCurRunEnv=NULL); // " { .. } " pCurRunEnv 为其间表达式运算的环境, 便于从环境中取得相应的数值
///////////////////////////////////////////////////
// lastIdx=-1 mean noIdx or All array[], when lastIdx==NULL, 最后一个不能有[]
// FOR CHOICE WITH NAME=NULL
CVariableItem* GetItem(char* varString, long* retlastIdx,RunEnv* pCurRunEnv=NULL);
////////////////////////////////////////////////
// void setParam(DWORD param) { m_wParam=param; }
// DWORD getParam() { return m_wParam; }
protected:
StructDefinition* m_pStructDefinition; // Defined StructDefinition
TObArray<CVariableItem> m_VariableItemList;
bool m_bHasImplicitChoiceElem;
DWORD m_wParam;
bool Create(StructDefinition* pStructDefinition,char* szName=NULL);
bool Clone (CStruct& StructItem);
void Destroy();
bool AddVariable(CVariableItem* pVariableItem); // can be used For Choice
CVariableItem* GetVariablebyId(long Id, bool bConsiderImplicitChoiceElem); // used by Choice Item
////////////////////////////////////////////////
bool Dump(char* filename,bool bOverWrite);
void Dump(FILE* fp, OTSTR strHeader);
//////////////////////////////////////////////
virtual CVariableItem* NewVariableItem();
private:
friend class RunTimeStk;
friend class CVariableItem;
static NullSyntaxObject NullObject;
};
/////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
// RunTimeProc
enum
{
CALLBACK_ASSIGNVALUE =0, // 单数据变量(非数组)赋值 A=value
// PARAM: IdentName
// Value(CVarient)
CALLBACK_GET_IDENTVALUE =1, // 取单数据变量(非数组)的值
// Ident sample: A
// A.B
// A.B[...].C[..].D ...
// A[Idx]
// Func()
// ConstA::B -> 到相关的Program定义中取
// ConstA -> 到相关的Program定义中取
// PARAM: IdentName
// Return: Value(CVarient)
CALLBACK_SETVALUE =2, // 单数据变量(可数组)赋值 A=szData
// PARAM: IdentName
// Value( (char*)szData)
};
/////////////////////////////////////////////////////
// SetExStyle(nExStyle) // FOR CHOICE WHO NAME=NULL
enum
{
EN_IMPLICIT_CHOICE_ELEM = 1 , // 设置环境变量的该属性后, 当使用与该环境有关的GetItem等操作时, 自动(!!)使用隐式CHOICE的成员变量处理模式
};
#ifdef _DLL_PROJECT
class CLASS_EXPORT RunEnv // base
#else
class RunEnv // base
#endif
{
public:
RunEnv() { m_nExStyle=0; }
virtual ~RunEnv() {}
void setExStyle(WORD nExStyle) { m_nExStyle=nExStyle; }
virtual cCallback::tFunction GetRunTimeProc() { return NULL; }
virtual CVariableItem* GetItem(char* varString,long* lastIdx=NULL) { return NULL; }
protected:
WORD m_nExStyle;
friend class CVariableItem;
friend class CStruct;
};
////////////////////////////////////////////
static char* cDumpFormat[]=
{
0, // NULL 表示采用Default的
0,
0,
"0x%02X",
"0x%04X",
"0x%08X",
0,
0,
0,
0,
0,
0
};
static char* cDumpListFormat[]=
{
0, // NULL 表示采用Default的
0,
0,
"%02X",
"%04X",
"%08X",
0,
0,
0,
0,
0,
0
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -