構造体、共用体、列挙体 DEFINE,マクロ
struct Arg
struct Func
struct mssCal
MaxCalArg
0001: /**
0002: * # CHAPTER #
0003: * ============================================================================
0004: * xtcal等で利用される計算式に関するヘッダーファイル
0005: * ============================================================================
0006: */
0007:
0008: #include <mssConfig.h>
0009: #include <mssValue.h>
0010: #include <mssHeader.h>
0011: #include <regex.h>
0012:
0013: #ifndef __MSSCAL_H
0014: #define __MSSCAL_H
0015:
0016: /**
0017: * # DEFINE #
0018: *一つの関数がとる、引数の最大数
0019: */
0020: #define MaxCalArg 20 /*一つの関数がとる、引数の最大数*/
0021:
0022: /**
0023: * # STRUCT #
0024: * 関数や演算子の引数
0025: */
0026: struct Arg {
0027: MssValue val[MssFieldMaxCnt];/*引数の値(複数あるのは項目ワイルドカード用)*/
0028: int valCnt; /*値の個数*/
0029: char *str; /**/
0030: int datType; /*引数の型(N,S,X)*/
0031: int type; /*引数のタイプ(NODE,LEAF(CONST, FIELD)*/
0032: struct mssCal *node; /*引数が関数や演算子なら、そのノード*/
0033: struct mssFields *flds; /*type==FIELDならば、その項目*/
0034: MssValue constant; /*type=CONSTならば、その値*/
0035: };
0036:
0037: /**
0038: * # STRUCT #
0039: *関数の各種情報
0040: */
0041: struct Func {
0042: char name[32]; /*関数名*/
0043: int type; /*関数,演算子の種類 0:関数 n:n項演算子*/
0044: int priority; /*演算子の優先順位*/
0045: int argType[MaxCalArg]; /*引数の型(N,S,X)*/
0046: int retType; /*返値の型(N,S,X)*/
0047: unsigned char procType; /*利用可能処理タイプ*/
0048: MssValue (*pnt)(struct mssCal *cal); /* 関数のアドレス*/
0049:
0050: /*以下は上記変数から計算して求められる*/
0051: int argCnt; /*引数の数(最低必要な数)*/
0052: int argMul; /*可変引数を含むかどうか*/
0053: int mulBcnt; /*可変引数の場所の前に何個引数があるか*/
0054: int mulAcnt; /*可変引数の場所の後に何個引数があるか*/
0055: /*{S,S,M,N,N,N}: mulBcnt=1, mulAcnt=3*/
0056: }; /* ~~~ */
0057:
0058: /**
0059: * # STRUCT #
0060: * 計算式構造体
0061: */
0062: struct mssCal {
0063: struct Func *func; /* 関数情報*/
0064: int argCnt; /* 引数の数*/
0065: struct Arg arg[MaxCalArg]; /* 引数*/
0066: int retType; /* このノードの返値タイプ*/
0067: struct mssCal *parent; /* 親ノード*/
0068: regex_t regex; /* 正規表現を使う関数の場合、そのコンパイル結果*/
0069: };
0070:
0071: /**
0072: * # PROTOTYPE #
0073: */
0074: void mssCalReadFuncIsFldRec(struct mssCal *cal,struct mssFldRec *fr);
0075: void mssCalReadFuncIsFRK(struct mssCal *cal,struct mssFldRecKey *frk);
0076: void mssCalReadFuncIsFRD(struct mssCal *cal,struct mssFldRecDbl *frd);
0077: struct mssCal * mssCalCompile(char *str, struct mssHeader *hd);
0078: void mssCalShowTree(struct mssCal *cal,int level);
0079: MssValue mssCalculate(struct mssCal *cal, char **pnt);
0080: void mssCalFree(struct mssCal *cal);
0081:
0082: #endif /*_CAL_H*/