環境:VC++6.0
便利なクラス集


[INIファイル]
INIHandler.xxx

ほぼAPIのラッパクラス
直接 int, float の読み書きが可能

/* Memo */
INIファイルは、プログラムと同じフォルダに、同じファイル名で作られます。
#include <stdlib.h>
#include <string.h>

/* Functions */
CINIHandler::Write(section, key, word)
CINIHandler::Read(section, key, word, size)

そのまま、API のラッパクラスとなっています。
(Read)INIファイルに定義がない場合、空白文字列が帰ります。

CINIHandler::Writexxx(...)
CINIHandler::Readxxx(...)

同様



 [良く使う関数]
Misc.xxx

デバッグメッセージ、string.h にない文字列関数の拡張など

/* Memo */
#include <stdlib.h>
#include <string.h>


/* Functions */
double Avg(double d1, double d2, double weight, int type);

d1, d2 の間を内分した値を返す関数です。
type| 0 -> 相加平均, 1 -> 相乗平均, ...

void DebugMsg(char* text, ...);

デバッグ用ポップアップメッセージ表示関数です。
printf と同様に使用できます。

double SafetyLog(double x);

x=0 で sl(x)=0 となるような対数関数です。
ゼロ付近では直線、x>1 で対数関数で定義されます。

BYTE* FastDraw_Start(CDC* pDC, BITMAP* pbmp);
void SetPixelFast(BITMAP *bmp, int x, int y, COLORREF c);
void FastDraw_End(BYTE* bitmapData, CDC* pDC, BITMAP* pbmp);


ピクセル単位の高速描画関数です。
CDC クラスを使用する場合、SetPixelV は API のオーバヘッドがあるため
実用的にはメモリ単位での書き込みが必要です。
使用例
 // 描画バッファ取得
 BITMAP bmp;
 BYTE* bitmapData = FastDraw_Start(pDC, &bmp);
 // 描画
 for(int i=0; i<100; i++) SetPixelFast(&bmp, i, i, RGB(255,0,0));
 // 描画バッファ開放
 FastDraw_End(bitmapData, pDC, &bmp); 

int strcharcnt(const char *text, const char ltr);
文字 ltr が 文字列 text に含まれる文字数を返します。

char* strsettoken(char *text, const char ltr);
文字 ltr の 文字列 text での最初の出現を '\0' に置き換え、その次の文字への
ポインタを返します。
(strtoken と同様です)

char* strsettoken(char *text, const char* token, int* usedTokenIdx);
トークン記号列 token のいずれかの文字の 文字列 text での最初の出現を
'\0' に置き換え、何番目のトークン記号が現れたかを usedTokenIdx に設定し、
トークン記号の次の文字へのポインタを返します。

void strrmblank(char *text);
文字列 text から、両端のブランク記号(空白文字、タブ文字)を削除します。



[乱数生成器]
RandomDist.xxx

良く使う、一様乱数、正規乱数、ランダムウォークに対応

/* Memo */
#include <stdlib.h>

/* Functions */
double random_double(double low, double high);
下限 low, 上限 high の一様乱数を返します。

double random_reg(double sigma, double avg);
平均 avg, 分散 sigma の正規乱数を返します。

void CBrownian::Init(double sigma, double stress);
void CBrownian::Reset();
double CBrownian::GetNext();
分散 sigma (, ret=0 への張力 stress) のブラウンノイズを返します。



[設定ファイルリーダ]
SettingFileReader.xxx

外部テキストエディタで編集可能な設定ファイルの読み込み器

/* Memo */
同じ名前が複数存在する場合、後のものを優先
ファイルフォーマットはソースから推測してください
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

/* Functions */
 int ReadFromFile(const char* filename);
 int GetData(const char* key, int* data);
 int GetData(const char* key, float* data);
 int GetData(const char* key, char* data);