MUSASHI C source: mssValue.h


構造体、共用体、列挙体
struct MssValueStruct enum OpeType union V enum vType


DEFINE,マクロ
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