genUtil(API)

提供: Eospedia
2014年9月30日 (火) 05:46時点におけるKinoshita (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

General/genUtilEosで使用する基本的な数値、演算、処理などを定義しているAPI です。

定数

Float値の最大値

#ifndef I386MAC
#ifndef X86MAC64
#ifndef I386CYGWIN 
#include <values.h>
#else
#define MAXFLOAT 1e30
#endif
#else
#include <math.h>
#endif
#else
#define MAXFLOAT 1e30
#endif 

文字数の最大値

#define GEN_UTIL_MAX_STRING_LENGTH  (1024)

比率

円周率

#define PI M_PI

(度数)/(ラジアン)

#define DEGREE  (180.0/PI)

(ラジアン)/(度数)

#define RADIAN  (PI/180.0)

(百分率)/(分数割合)

#define PERCENT (100.0)

構造体

API

数値演算

2乗

#define SQR(x)    ((x)*(x))

正の平方根

#define SQRT(x)   ((x)>0?sqrt(x):0)

3乗

#define CUBIC(x)  ((x)*(x)*(x))

最大値(2値)

#ifndef MAX
#define MAX(x,y) ((x)>(y)?(x):(y))
#endif

最小値(2値、3値)

#ifndef MIN
#define MIN(x,y) ((x)<(y)?(x):(y))
#define MIN3(x,y,z) MIN( MIN(x,y), z)
#endif

数値補正

角度(ラジアン)を0 ~ 2π間に補正します。

#define NORMAL_PHASE(x)     ((x)>=(0)?(fmod((x),2*M_PI)):(fmod((x),2*M_PI)+2*M_PI))   /* 0 ~ 2M_PI */

角度(ラジアン)を0 ~ π間に補正します。

#define MIN_NORMAL_PHASE(x)  MIN(NORMAL_PHASE(x), 2*M_PI-NORMAL_PHASE(x))             /* 0 ~ M_PI */

整数xを0 ~ y間の整数に補正します。

#define POSITIVE_MODE(x,y)  ((x)>=(0)?(     (x)%(y)    ):((y)==1?0:     (x)%(y)  +(y)))

実数xを0 ~ y間の実数に補正します。

#define POSITIVE_FMODE(x,y) ((x)>=(0)?(fmod((x),(y))   ):((y)==1?0:fmod((x),(y)) +(y)))

文字列比較

組み合わせることで文字列比較のスイッチ文として使用できます。

#define SSWITCH(x)  { char* __sswitch_tmp_=x; \
					if(0==strcmp(__sswitch_tmp_, "")) { \
						fprintf(stderr, "SSWITCH Error\n"); \
						exit(EXIT_FAILURE); \
					}
#define SCASE(x)    else if(0==strcmp(x,__sswitch_tmp_))
#define SDEFAULT    else
#define SBREAK      ;
#define SSWITCHEND  }

奇数・偶数判定

#define IsOdd(x)    ((x)%2==1?1:0)
#define IsEven(x)    ((x)%2==0?1:0)

バイト処理

#ifdef M68
#define BYTE4SET(x3,x2,x1,x0) ((((x0)<< 0)&0x000f) \
							  |(((x1)<< 8)&0x00f0) \
							  |(((x2)<<16)&0x0f00) \
							  |(((x3)<<24)&0xf000))
#define BYTE4GETBYTE(x,byte)  (((x)>>(byte*8))&0x000f) 
#else
#define BYTE4SET(x3,x2,x1,x0) ((((x3)<< 0)&0x000f) \
							  |(((x2)<< 8)&0x00f0) \
							  |(((x1)<<16)&0x0f00) \
							  |(((x0)<<24)&0xf000))
#define BYTE4GETBYTE(x,byte)  (((x)>>((3-byte)*8))&0x000f) 
#endif

usage作成

オプションとしての引数は2個まで使用できます。

#define USAGEPRINT(x) fprintf(stderr,x);
#define USAGEPRINT1(x,x1) fprintf(stderr,x,x1);
#define USAGEPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);

ログ出力

オプションとしての引数は12個まで使用できます。

#define LOGPRINT(fpt,ID,ID2,x) \
					fprintf(fpt, "%-6s %-15s",ID,ID2); \
					fprintf(fpt, x); \
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s",ID,ID2); \
					fprintf(stdout, x); \
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT1(fpt,ID,ID2,x,d1) 	\
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1); \
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1); \
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT2(fpt,ID,ID2,x,d1,d2) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT3(fpt,ID,ID2,x,d1,d2,d3) 	\
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3); \
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3); \
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT4(fpt,ID,ID2,x,d1,d2,d3,d4) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4); \
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4); \
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT5(fpt,ID,ID2,x,d1,d2,d3,d4,d5) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5);	\
					fprintf(stdout, "\n"); fflush(stdout);
#define LOGPRINT6(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6);	\
					fprintf(fpt, "\n"); fflush(fpt);  \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT7(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT8(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT9(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT10(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT11(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11);	\
					fprintf(stdout, "\n"); fflush(stdout); 
#define LOGPRINT12(fpt,ID,ID2,x,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12) \
					fprintf(fpt, "%-6s %-15s ",ID,ID2); \
					fprintf(fpt, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12);	\
					fprintf(fpt, "\n"); fflush(fpt); \
					fprintf(stdout, "%-6s %-15s ",ID,ID2); \
					fprintf(stdout, x, d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12);	\
					fprintf(stdout, "\n"); fflush(stdout);

デバッグメッセージ出力

オプションとしての引数は7個まで使用できます。
DEBUGをデバッグ時に#define、リリース時に#undefすれば、メッセージをデバッグ時だけ表示することができます。

#ifdef DEBUG
#define DEBUGPRINT(x) fprintf(stderr,x);fflush(stderr);
#define DEBUGPRINT1(x,x1) fprintf(stderr,x,x1);fflush(stderr);
#define DEBUGPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);fflush(stderr);
#define DEBUGPRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3);fflush(stderr);
#define DEBUGPRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4);fflush(stderr);
#define DEBUGPRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5);fflush(stderr);
#define DEBUGPRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6);fflush(stderr);
#define DEBUGPRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);fflush(stderr)
#define DEBUGCOMMAND(x) (x);
#else
#define DEBUGPRINT(x)
#define DEBUGPRINT1(x,x1)
#define DEBUGPRINT2(x,x1,x2)
#define DEBUGPRINT3(x,x1,x2,x3)
#define DEBUGPRINT4(x,x1,x2,x3,x4)
#define DEBUGPRINT5(x,x1,x2,x3,x4,x5)
#define DEBUGPRINT6(x,x1,x2,x3,x4,x5,x6)
#define DEBUGPRINT7(x,x1,x2,x3,x4,x5,x6,x7)
#define DEBUGCOMMAND(x)
#endif
#ifdef DEBUG2
#define DEBUG2PRINT(x) fprintf(stderr,x);fflush(stderr);
#define DEBUG2PRINT1(x,x1) fprintf(stderr,x,x1);fflush(stderr);
#define DEBUG2PRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);fflush(stderr);
#define DEBUG2PRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3);fflush(stderr);
#define DEBUG2PRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4);fflush(stderr);
#define DEBUG2PRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5);fflush(stderr);
#define DEBUG2PRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6);fflush(stderr);
#define DEBUG2PRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);fflush(stderr)
#else
#define DEBUG2PRINT(x)
#define DEBUG2PRINT1(x,x1)
#define DEBUG2PRINT2(x,x1,x2)
#define DEBUG2PRINT3(x,x1,x2,x3)
#define DEBUG2PRINT4(x,x1,x2,x3,x4)
#define DEBUG2PRINT5(x,x1,x2,x3,x4,x5)
#define DEBUG2PRINT6(x,x1,x2,x3,x4,x5,x6)
#define DEBUG2PRINT7(x,x1,x2,x3,x4,x5,x6,x7)
#endif

エラーメッセージ出力

オプションとしての引数は7個まで使用できます。

#define ERRORPRINT(x) fprintf(stderr,x);
#define ERRORPRINT1(x,x1) fprintf(stderr,x,x1);
#define ERRORPRINT2(x,x1,x2) fprintf(stderr,x,x1,x2);
#define ERRORPRINT3(x,x1,x2,x3) fprintf(stderr,x,x1,x2,x3);
#define ERRORPRINT4(x,x1,x2,x3,x4) fprintf(stderr,x,x1,x2,x3,x4);
#define ERRORPRINT5(x,x1,x2,x3,x4,x5) fprintf(stderr,x,x1,x2,x3,x4,x5);
#define ERRORPRINT6(x,x1,x2,x3,x4,x5,x6) fprintf(stderr,x,x1,x2,x3,x4,x5,x6);
#define ERRORPRINT7(x,x1,x2,x3,x4,x5,x6,x7) fprintf(stderr,x,x1,x2,x3,x4,x5,x6,x7);