構造体、共用体、列挙体 DEFINE,マクロ
struct MssValueStruct
enum OpeType
union V
enum vType
MssVnull
0001: /**
0002: * # CHAPTER #
0003: * ============================================================================
0004: * MUSASHIで用いられる値関連のヘッダーファイル
0005: * ============================================================================
0006: */
0007:
0008: #include <mssConfig.h>
0009: #include <mssOutput.h>
0010:
0011: #include <time.h>
0012:
0013: #ifndef __MSSVALUE_H
0014: #define __MSSVALUE_H 1
0015:
0016: /**
0017: * # MACRO #
0018: * 値をNULLに設定するマクロ
0019: */
0020: #define MssVnull(v) ((v).nul=1)
0021:
0022: /**
0023: * # ENUM #
0024: * オペレータ列挙体
0025: */
0026: enum OpeType {
0027: OPE_EQ, /* == */
0028: OPE_NE, /* != */
0029: OPE_LT, /* < */
0030: OPE_LE, /* <= */
0031: OPE_GT, /* > */
0032: OPE_GE /* >= */
0033: };
0034:
0035: /**
0036: * # UNION #
0037: * 実際に値を保存する共用体
0038: */
0039: union V {
0040: int i;
0041: double d;
0042: char *s;
0043: void *a;
0044: unsigned short int usi;
0045: };
0046:
0047: /**
0048: * # ENUM #
0049: * 値の種類の列挙体
0050: */
0051: enum vType {
0052: INT, /* int */
0053: DBL, /* double */
0054: STR, /* char * */
0055: ADD, /* void * */
0056: USI, /* unsignd short int */
0057: };
0058:
0059: /**
0060: * # STRUCT #
0061: * 全ての値を収める構造体
0062: */
0063: struct MssValueStruct {
0064: enum vType vType;
0065: union V v;
0066: int nul; /*null値の場合:1*/
0067: };
0068:
0069: /**
0070: * # TYPEDEF #
0071: */
0072: typedef struct MssValueStruct MssValue;
0073:
0074: /**
0075: * # PROTOTYPE #
0076: */
0077: void mssVinit(MssValue *v, enum vType vType);
0078: void mssVclear(MssValue *v);
0079: void mssVclearMin(MssValue *v);
0080: void mssVclearMax(MssValue *v);
0081: MssValue mssVint2i(int i);
0082: MssValue mssVint2d(int i);
0083: MssValue mssVint2s(int i);
0084: MssValue mssVdbl2i(double d);
0085: MssValue mssVdbl2d(double d);
0086: MssValue mssVdbl2s(double d);
0087: MssValue mssVstr2i(char *str);
0088: MssValue mssVstr2d(char *str);
0089: MssValue mssVstr2s(char *str);
0090: MssValue mssVi2d(MssValue v);
0091: MssValue mssVi2s(MssValue v);
0092: MssValue mssVd2i(MssValue v);
0093: MssValue mssVd2s(MssValue v);
0094: MssValue mssVs2i(MssValue v);
0095: MssValue mssVs2d(MssValue v);
0096: MssValue mssVadd(MssValue v1, MssValue v2);
0097: MssValue mssVsub(MssValue v1, MssValue v2);
0098: MssValue mssVmul(MssValue v1, MssValue v2);
0099: MssValue mssVdiv(MssValue v1, MssValue v2);
0100: MssValue mssVmod(MssValue v1, MssValue v2);
0101: MssValue mssVsqrt(MssValue v);
0102: MssValue mssVcntUp(MssValue v);
0103: MssValue mssVcntDown(MssValue v);
0104: MssValue mssVmin(MssValue v1, MssValue v2);
0105: MssValue mssVmax(MssValue v1, MssValue v2);
0106: int mssVcmp(MssValue a, enum OpeType ope, MssValue b);
0107: void mssVwrite(MssValue v, struct mssFPW *fp);
0108: void mssVwriteInt(MssValue v, struct mssFPW *fp);
0109: void mssVwriteDbl(MssValue v, struct mssFPW *fp);
0110: void mssVwriteStr(MssValue v, struct mssFPW *fp);
0111:
0112: #endif