?? testexfunction.h
字號:
#ifndef __EXFUNCTION_H__
#define __EXFUNCTION_H__
#pragma once
#include "Identifier.h"
#include "Xml.h"
struct PARAMETER
{
CString type; //參數(shù)類型
CString name; //參數(shù)名
CString defVal; //缺省值
CString array; //如果參數(shù)是數(shù)組,保存[]及[]內(nèi)的文字常量
};
DECLARE_TEST_DUMP(PARAMETER)
typedef CList<PARAMETER*, PARAMETER*> CParameterList;
class CExFunction;
typedef CList<CExFunction*, CExFunction*> CExFunctionList;
//函數(shù)類
class CExFunction : public CIdentifier
{
public:
//構(gòu)造函數(shù)
CExFunction();
//析構(gòu)函數(shù)
virtual ~CExFunction();
public:
//解析一個函數(shù)的代碼
static CExFunction* ParseFunction(CTokenList& iList, UINT iAccessTrim=TRIM_PUBLIC,
BOOL iDefinition=FALSE, CTokenList* iopSrcList=NULL, POSITION* iopPos=NULL,
BOOL iIsInType=FALSE);
//合并函數(shù),有兩種情況:
//1.將由實現(xiàn)代碼解析得到的函數(shù)對象合并到由聲明代碼解析得到的函數(shù)中
//2.重載函數(shù),加入到重載函數(shù)列表
void UniteFunction(CExFunction* ipOther);
//==操作符
BOOL operator == (CExFunction& oOther);
//比較第N個參數(shù)是否相等
BOOL IsParamEqual(LPCTSTR iParamType, int iIndex);
//參數(shù)個數(shù)
int GetParameterCount() const {return mParameterList.GetCount();};
//取得函數(shù)原形
void GetPrototype(CString& oPrototype);
//取得第一個重載函數(shù)的POSITION,用于輸出重載函數(shù)的數(shù)據(jù)如原形
POSITION GetFirstRewriteFunctionPosition() {return mRewriteFuncList.GetHeadPosition();};
//取得下一個重載函數(shù)
CExFunction* GetNextRewriteFunction(POSITION& ioPos){return mRewriteFuncList.GetNext(ioPos);};
//輸出數(shù)據(jù)到代碼文檔
void OutputSymbols(CXml& oXml, LPCTSTR iPath);
private:
//解析函數(shù)聲明
static void ParseDeclare(CTokenList& iList, UINT iAccessTrim,
CExFunction& oFunc, BOOL iIsInType=FALSE);
//設(shè)置返回類型
void SetReturnType(LPCTSTR iReturnType) {mReturnType=iReturnType;};
//加入一個參數(shù)項
void AddParameter(PARAMETER* ipParam) {ASSERT(ipParam!=NULL); mParameterList.AddTail(ipParam);};
//加入一個該函數(shù)的實現(xiàn)代碼解析所獲得的記號,
//當前版本只是保存實現(xiàn)代碼記號,以后版本視需要可作進一步處理
void AddImpToken(CToken* ipToken) {ASSERT(ipToken!=NULL); mImpTokenList.AddTail(ipToken);};
//解析函數(shù)名之前的部分
static void ParsePrecursor(CTokenList& iList, CExFunction& oFunc, BOOL iIsInType=FALSE);
//解析參數(shù)表后面的部分
static void ParseTail(CTokenList& iList, CExFunction& oFunc);
//解析參數(shù)表
static void ParseParameter(CTokenList& iList, CExFunction& oFunc);
//解析一個參數(shù),此函數(shù)實現(xiàn)代碼有構(gòu)造性問題,建議采用另一個版本
static PARAMETER* ParseOneParameter(CTokenList& iList);
//解析一個參數(shù)的第二個版本
static PARAMETER* ParseOneParameter2(CTokenList& iList);
//解析參數(shù)的缺省值,如有缺省值,在解析后將對應(yīng)的記號從列表中刪除
static void ParseOneParameter2DefaultValue(CTokenList& iList, PARAMETER& oParam);
//解析參數(shù)的數(shù)組部分,如有數(shù)組部分,在解析后將對應(yīng)的記號從列表中刪除
static void ParseOneParameter2Array(CTokenList& iList, PARAMETER& oParam);
//解析參數(shù)的類型和參數(shù)名,由于不能簡單分辯類型和參數(shù)名,這兩項放在
//一個函數(shù)中解析
static void ParseOneParameter2TypeAndName(CTokenList& iList, PARAMETER& oParam);
public:
//取得返回類型
CString GetReturnType() const {return mReturnType;};
private:
CTokenList mImpTokenList; //臨時保存實現(xiàn)代碼
CString mReturnType; //返回類型
CParameterList mParameterList; //參數(shù)表
CString mPrototype; //函數(shù)原形字符串
CExFunctionList mRewriteFuncList; //同域的重載函數(shù)列表
UNIT_TEST(CExFunction)
};
DECLARE_TEST_DUMP(CExFunction)
#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -