⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formulamodula.h

📁 我的简易编译器终于在花了近20个工作日后完成了。按照设计是做成一个FormulaEx.dll
💻 H
字号:
// FormulaModula.h: interface for the CFormulaModula class.
//
//////////////////////////////////////////////////////////////////////
/*
 * Generated by MyEclipse Struts
 * 
 * Written by Yang Huaisheng 
 * Homepage: http://codefan.spaces.live.com
 * version 0.01
 * create at 2006-04-30
 * 
 *  Distribute freely, except: don't remove my name from the source or
 *  documentation (don't take credit for my work), mark your changes (don't
 *  get me blamed for your possible bugs), don't alter or remove this
 *  notice.
 *  No warrantee of any kind, express or implied, is included with this
 *  software; use at your own risk, responsibility for damages (if any) to
 *  anyone resulting from the use of this software rests entirely with the
 *  user.
 * 
 *  Send bug reports, bug fixes, enhancements, requests, flames, etc. to
 *     codefan@hotmial.com
 *  
 */

#if !defined(AFX_FORMULAMODULA_H__52BAC31A_AC7F_4B85_ABE9_44FE8C687D2D__INCLUDED_)
#define AFX_FORMULAMODULA_H__52BAC31A_AC7F_4B85_ABE9_44FE8C687D2D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "..\Interface\ConstDef.h"
#include "..\Interface\IFormula.h"
//#include <list>
#include <Afxtempl.h>

class CVarItem{
public:
	int		nAllocType;// 0:nualloc  1:alloc char[] 2:alloc float[]
	VAR_DATA_TYPE vType;//
    char    szName[SIGNLENGTH+1];    //char[32]
	union{
		int		nLen;
		float	fVal;
//		char  * sVal;
 	};
	float *	fArVal;
	CString szValue;
public:
	int		nISN;
	union{
		BOOL	isUsed; //is used before the end of compiler
		BOOL    isLocked;
	};
	VAR_ITEM_STYLE    nStyle;// 0:unknow 1:varialbe 2:const variable 3:temp variable 
public:
	CVarItem & Clone (CVarItem & tmpItem); 
	CVarItem & operator=(CVarItem & tmpItem); 
//	CVarItem & operator=(CVarItem tmpItem); 
public:
	CVarItem();
	virtual ~CVarItem();
public:
	void SetName(LPCTSTR sn);
	void SetType(VAR_DATA_TYPE vt);
	void SetValue(LPCTSTR sv);
	void SetString(LPCTSTR sv);
	void SetFloat(float fv);
	void SetArrayNumber(int nl,float * lpv,bool bCopy=false);
	inline void SetUsed();
public:
	CString GetName();
	VAR_DATA_TYPE GetType();
	CString GetValue();
	float	GetFloat(float fPos=0);
	BOOL ToBool();
	float ToFloat();
	int  ToInt();
	float MinFloat();
	float MaxFloat();
	float SumFloat();
	float AveFloat();
	int   GetCount();
	CString ToString();
	CString GetDescribe(LIST_VAR_TYPE nListType=LV_SUMMARY);
public:
	friend CVarItem AFXAPI operator+(CVarItem & tmpItem, CVarItem & tmpItem2); 
	friend CVarItem AFXAPI operator-(CVarItem & tmpItem, CVarItem & tmpItem2);  
	friend CVarItem AFXAPI operator*(CVarItem & tmpItem, CVarItem & tmpItem2);  
	friend CVarItem AFXAPI operator/(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator==(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator!=(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator>(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator<(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator>=(CVarItem & tmpItem,CVarItem & tmpItem2);  
	friend BOOL AFXAPI operator<=(CVarItem & tmpItem,CVarItem & tmpItem2);  
	friend BOOL AFXAPI operator!(CVarItem & tmpItem);  
	friend BOOL AFXAPI operator||(CVarItem & tmpItem,CVarItem & tmpItem2); 
	friend BOOL AFXAPI operator&&(CVarItem & tmpItem,CVarItem & tmpItem2); 
};
typedef CVarItem VARITEM;
//typedef std::list<CVarItem> VARTABLE;
typedef CList<CVarItem,CVarItem&> VARTABLE;
typedef CVarItem * PVARITEM;

struct SFormulaItem{  //四元式结构
//public:
	int nOpt;//int 
	union{
		int nResult;//int  
		PVARITEM pvRes;
	};
	union{
		int nPrm;//int  
		PVARITEM pvPrm;
	};
	union{
		int nPrm2;//int  
		PVARITEM pvPrm2;
	};
//public:
	
};

//typedef std::list<SFormulaItem> FORMULATABLE;
//typedef CList<SFormulaItem,SFormulaItem&> FORMULATABLE;
typedef SFormulaItem * PFORMULAITEM;
typedef CArray<SFormulaItem,SFormulaItem&> FORMULATABLE;

class CFormulaModule;
typedef CFormulaModule * PFORMUALMODULE;

class CFormulaModule{
public:
	VAR_DATA_TYPE	vRetType;
	int				nPrmSum;
	CString     sModuleName;
    PFORMUALMODULE pParentModule;
private:
	int			nSourceLen;
	char*		szSource;
	int			nFormulaSum;
	FORMULATABLE formulaTable;
public:
	VARTABLE	varTable; 
	CFormulaModule();
	virtual ~CFormulaModule();
public:
	void Reset();	
	void Release();	
	CFormulaModule & operator=(CFormulaModule & tmpFM); 
	void SetSource(LPCTSTR szSou, int nL=-1);
	LPCTSTR GetSource();
	int		GetSourceLen();
	void GetVarInPlace();
private:
	int nCurVarISN;
	int nCurTempISN;
	int nCurConstISN;

	CString GetDescribe(PFORMULAITEM pFI , LIST_FORMULA_ITEM_TYPE nListType);
public:
	PVARITEM AddVarItem(VAR_ITEM_STYLE nS);
	int	 AddVariable(LPCTSTR szName);
	int	 AddConst(LPCTSTR szValue);
	int	 AddTemp(LPCTSTR szValue);
	void LockTemp(int nIsn);
	void UnlockTemp(int nIsn);
	int	 UsedTemp();
	BOOL IsTemp(int nIsn);
	int  GetCurTemp();
	void SetValue(int isn,LPCTSTR szValue);
	int  SetFloat(LPCTSTR szName,float fVal);
	int  SetVariable(LPCTSTR szName,LPCTSTR szValue);
	int  SetArrayNumberVar(LPCTSTR szName,int nLen,float * lpValue);
	int  GetVariableSum();

	int		 GetVarISN(LPCTSTR szName);
	PVARITEM GetVarItem(LPCTSTR szName,int & nLay);
	PVARITEM GetVarItem(int isn);
	CString  GetVarName(int isn);

	//int  GetVariableIndex(LPCTSTR szName);
	VAR_DATA_TYPE GetVariableType(LPCTSTR szName);
	CString ListVariable(int nVarInd, LIST_VAR_TYPE nListType=LV_SUMMARY);

	void ReplicateVarTable( VARTABLE & desTable);
	int  GetFormulaItemSum();
	int  AddFormulaItem(SFormulaItem & fi);
	PFORMULAITEM GetFormulaItem(int nInd);
	CString ListFormulaItem(int nFormulaInd = -1, LIST_FORMULA_ITEM_TYPE nListType=LFI_LABEL);
};
//typedef std::list<CFormulaModule> FORMUALMODULALIST;
//typedef CArray<CFormulaModule,CFormulaModule&> FORMUALMODULALIST;
typedef CList<CFormulaModule,CFormulaModule&> FORMUALMODULALIST;

#endif // !defined(AFX_FORMULAMODULA_H__52BAC31A_AC7F_4B85_ABE9_44FE8C687D2D__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -