エラーコード等各種単純定義
エラーコード等各種単純定義
ヘッダファイル「ImageFuncDef.h」で【#define】定義し
た。コノ画像処理ライブラリ用の数学的定数値とか、
メッソド(メンバー関数)の返すエラーコード等について
解説します!
先ず、以下に「ImageFuncDef.h」の内容を紹介します!
#if !defined(IMAGE_FUNCDEF__INCLUDED_)
#define IMAGE_FUNCDEF__INCLUDED_
#include <stdio.h> // 標準入出力ヘッダー
#include <stdlib.h> // 標準ライブラリヘッダー
#include <math.h> // 算術関数ライブラリヘッダー
#include <float.h> // 算術上下限ライブラリヘッダー
#include <time.h>
/***********************************************************************/
/***** 画像ライブラリ用:単純定義 ****/
/***********************************************************************/
#undef TRUE
#undef FALSE
#undef PAI
#define TRUE 1 // 真
#define FALSE 0 // 偽
#define PAI 3.1415926535897931 // 定数 π
#define PAI_00 0.0 // 定数 0.0π
#define PAI_025 (PAI*0.25) // 定数 0.25π
#define PAI_05 (PAI*0.5) // 定数 0.5π
#define PAI_075 (PAI*0.75) // 定数 0.75π
#define PAI_08 (PAI*0.8) // 定数 0.8π
#define PAI_10 (PAI) // 定数 1.0π
#define PAI_15 (PAI*1.5) // 定数 1.5π
#define PAI_20 (PAI*2.0) // 定数 2.0π
#define PAI_25 (PAI*2.5) // 定数 2.5π
#define PAI_30 (PAI*3.0) // 定数 3.0π
#define PAI_35 (PAI*3.5) // 定数 3.5π
#define PAI_40 (PAI*4.0) // 定数 4.0π
#define PAI_80 (PAI*8.0) // 定数 8.0π
#undef MAX_BYTE
#undef MAX_SHORT
#undef MAX_INT
#undef MAX_REAL
#define MAX_BYTE 0x0ff // BYTE型の最大値
#define MAX_SHORT 0x07fff // short型の最大値
#define MAX_INT 0x07fffffff // int型の最大値
#define MAX_REAL FLT_MAX // 実数の最大値
/***********************************************************************/
/***** ステータス情報:画像処理関数のエラーリターンコード ****/
/***** STI_ARY_?は、ここで定義した値に ****/
/***** STI_ARY_? - n × 10 n は、出現順(1..9) ****/
/***********************************************************************/
#define END_STI 0 // 正常終了
#define STI_ARY_0 -1000 // 配列情報: Ptr の値が不正
#define STI_ARY_1 -1001 // 配列情報: adr の値が不正
#define STI_ARY_2 -1002 // 配列情報: h の値が不正
#define STI_ARY_3 -1003 // 配列情報: v の値が不正
#define STI_ARY_4 -1004 // 配列情報: inc の値が不正
#define STI_ARY_5 -1005 // 配列情報: w の値が不正
#define STI_FLG -3000 // 単純な型の引数が不正
#define STI_ICS -4000 // 設定値と矛盾 InConSistency
#define STI_MEM -5000 // メモリ不足
#define STI_RUN -6000 // 実行エラー STI_RUN - 任意
#define STI_NOT -9000 // 未実装機能 STI_NOT - 任意
/***********************************************************************/
/***** GUI情報:画面操作関連コード ****/
/***********************************************************************/
#define KEYBOARD_LEFT 1 // 「←」キー
#define KEYBOARD_RIGHT 2 // 「→」キー
#define KEYBOARD_UP 3 // 「↑」キー
#define KEYBOARD_DOWN 4 // 「↓」キー
//page
/***********************************************************************/
/***** 単純な型定義 ****/
/***********************************************************************/
#undef VREGISTER
#undef VSTATIC
#undef VEXTERN
#define VREGISTER volatile register
#define VSTATIC volatile static
#define VEXTERN volatile extern
#undef INT1
#undef INT2
#undef INT4
#undef BYTE
#undef UWORD
#undef DWORD
#undef LONG
typedef unsigned char INT1; // 1バイト、符号無しデータ
typedef short INT2; // 2バイト、符号付きデータ
typedef int INT4; // 4バイト、符号付きデータ
typedef unsigned char BYTE; // 1バイト、符号無しデータ
typedef unsigned short UWORD; // 2バイト、符号無しデータ
typedef unsigned long DWORD; // 4バイト、符号無しデータ
typedef long LONG; // 4バイト、符号付きデータ
#endif // !defined(IMAGE_FUNCDEF__INCLUDED_)
1.真偽π
#undef TRUE
#undef FALSE
#undef PAI
#define TRUE 1 // 真
#define FALSE 0 // 偽
#define PAI 3.1415926535897931 // 定数 π
#define PAI_00 0.0 // 定数 0.0π
#define PAI_025 (PAI*0.25) // 定数 0.25π
#define PAI_05 (PAI*0.5) // 定数 0.5π
#define PAI_075 (PAI*0.75) // 定数 0.75π
#define PAI_08 (PAI*0.8) // 定数 0.8π
#define PAI_10 (PAI) // 定数 1.0π
#define PAI_15 (PAI*1.5) // 定数 1.5π
#define PAI_20 (PAI*2.0) // 定数 2.0π
#define PAI_25 (PAI*2.5) // 定数 2.5π
#define PAI_30 (PAI*3.0) // 定数 3.0π
#define PAI_35 (PAI*3.5) // 定数 3.5π
#define PAI_40 (PAI*4.0) // 定数 4.0π
#define PAI_80 (PAI*8.0) // 定数 8.0π
このライブラリは、昭和の時代にベンチャー企業ADS社の
画像処理装置用制御プログラムをC言語で記載したのが元で
す!
その為【C++】の「bool」型と定数「true/false」が
存在しなかった時に記述されたソースコードが元に成って
居ます!
注意して欲しいのは、「#undef TRUE」と一旦、定義を削除
してから新たに
「#define TRUE 1」定義し直して居る事です!
このヘッダファイルは、
「#include <stdio.h>」とかと他の標準的なシステム定義を
記載して有るシステムが用意したヘッダファイルを
インクルードしている為に、念の為、重複定義を防ぐとして
コノようにしています!
次にπ(円周率を)英大文字「PAI」に定義して使用して居
ます?!
これも使用するコンパイラシステムでは既に同名で定義され
ている可能性が有るので「#undef」から始めています!
そして私のライブラリで使用する定数としては、やや
オーバースペック精度「3.1415926535897931」の値にして
います?!
更に「PAI_00」から「PAI_80」もπに乗数を付けた物「
何かは、定義の右側のコメントで確認して下さい」を
画像処理ライブラリの内部で使用≪主にグラフィック系や
画像の回転処理に活用≫しています
2.単純なデータ型の最大値
#undef MAX_BYTE
#undef MAX_SHORT
#undef MAX_INT
#undef MAX_REAL
#define MAX_BYTE 0x0ff // BYTE型の最大値
#define MAX_SHORT 0x07fff // short型の最大値
#define MAX_INT 0x07fffffff // int型の最大値
#define MAX_REAL FLT_MAX // 実数の最大値
これも使用するコンパイラシステムでは既に同名で定義され
ている可能性が有るので「#undef」から始めています!
そして私のライブラリで使用する定数としては、
右側のコメントで確認して下さい!
※FLT_MAXに関しては、「#include <float.h>」を
インクルードした場合に使える筈ですが、読者様が使用を
考えているコンパイラ処理系に存在しない場合も考えられ
るので確認し、代替を考えて下さい!
特異な処理系を使用される方には造作も無い事でしょう※
3.ステータス情報
「画像処理関数のエラーリターンコード」として
「リターンコード」を
「END_STI」を返したら、正常に関数が実行した事を示し、
「STI_???」と「???」の色々な関数を使用した時の不具合≪
関数への実引数の記述間違い、及び、関数を実行させた時の
実行エラー≫が何で遭ったかを関数を呼び出した側へ答え
として返す機構です!
※ここ「#define」ブロックの前にブロック説明用の
コメントが有ります※
/***********************************************************************/
/***** ステータス情報:画像処理関数のエラーリターンコード ****/
/***** STI_ARY_?は、ここで定義した値に ****/
/***** STI_ARY_? - n × 10 n は、出現順(1..9) ****/
/***********************************************************************/
#define END_STI 0 // 正常終了
#define STI_ARY_0 -1000 // 配列情報: Ptr の値が不正
#define STI_ARY_1 -1001 // 配列情報: adr の値が不正
#define STI_ARY_2 -1002 // 配列情報: h の値が不正
#define STI_ARY_3 -1003 // 配列情報: v の値が不正
#define STI_ARY_4 -1004 // 配列情報: inc の値が不正
#define STI_ARY_5 -1005 // 配列情報: w の値が不正
#define STI_FLG -3000 // 単純な型の引数が不正
#define STI_ICS -4000 // 設定値と矛盾 InConSistency
#define STI_MEM -5000 // メモリ不足
#define STI_RUN -6000 // 実行エラー STI_RUN - 任意
#define STI_NOT -9000 // 未実装機能 STI_NOT - 任意
更に捕捉すると「STI_ARY_?」とは、「STI_ARY_0」、
「STI_ARY_1」、「STI_ARY_2」、「STI_ARY_3」、
「STI_ARY_4」、「STI_ARY_5」の意味です!
コレの意味は、個別の右側コメントを確認して下さい!
そして「STI_ARY_? - n × 10 n は、出現順(1..9)」の
「n」は、配列情報=「TypeArray」をココでは意味します
≪元々ADS社の画像処理装置では、ハードウェア画像処理
機構を駆動させる情報管理構造体「TypeImage」が有ったの
でソフトウェア処理用の構造体「TypeArray」を区別して
【配列情報】と言う名称にしていた名残です!
申し訳御座いません!ナニブンニモ昭和から記述されている
ソースコードですのでと言い訳≫
ここで「n」に関して具体例で説明します!
TypeArray a; // 配列情報(画像を示すデータ型)で定義した変数「a」
TypeArray b; // 配列情報(画像を示すデータ型)で定義した変数「b」
int sti; // ステータス・インフォメーションを格納する変数
sti = Copy( &a, &b ); // 画像a から、画像b へ画像データをコピー
字面通り、このプログラムを実行させると変数「sti」には
「-1010」の値が格納され「Copy(a,b);」がエラーを発生し
実行出来無かった事が分かります!
「-1010」は、【n=1】で有り、「STI_ARY_0」に
【STI_ARY_0-n10】⇒【-1000-110】⇒【-1000-10】⇒
【-1010】と成ります!
この意味する所は、「TypeArray」で定義された実引数が
エラーの元で
「Ptr の値が不正」詰り、画像メモリ実体を表すポインタが
不正(ここでは空ポインタ)を意味し、更に「n=1」と
「TypeArray」を要求する実引数の1番目が問題で遭った
事を示します!とエラーの意味と場所が分かります!
「TypeArray」に関しては、解説クラスTypeArray
を参考にして下さい!
このクラスが、この画像処理ライブラリで一番重要な
クラスです!
4.単純な型定義
/***********************************************************************/
/***** 単純な型定義 ****/
/***********************************************************************/
#undef VREGISTER
#undef VSTATIC
#undef VEXTERN
#define VREGISTER volatile register
#define VSTATIC volatile static
#define VEXTERN volatile extern
#undef INT1
#undef INT2
#undef INT4
#undef BYTE
#undef UWORD
#undef DWORD
#undef LONG
typedef unsigned char INT1; // 1バイト、符号無しデータ
typedef short INT2; // 2バイト、符号付きデータ
typedef int INT4; // 4バイト、符号付きデータ
typedef unsigned char BYTE; // 1バイト、符号無しデータ
typedef unsigned short UWORD; // 2バイト、符号無しデータ
typedef unsigned long DWORD; // 4バイト、符号無しデータ
typedef long LONG; // 4バイト、符号付きデータ
上記の様に「#undef」で一旦、全て定義を殺し、
「#define」で再定義しています!
ヒョットシテ、システムに依っては既にココで記載した
定義名と同じ物が「#include <stdio.h>」・
「#include <stdlib.h>」で定義され齟齬が生じる可能性も
捨て切れ無いからです!
次に「typedef unsigned char INT1;」から
「typedef long LONG;」と有るのは、「#define」で定義
されているシステムが有る場合に「typedef」とC言語本体
のキーワードでこのライブラリで定義されている整数型の
データサイズ(バイト数)を定義してサイズに依る齟齬を
排除した心算です!