SData クラス

メモリバッファー提供します。ファイル入出力、リソースからの読み込み、圧縮(zlib)、暗号化を実装しています。
更新日 2014-07-29

仕様

メモリバッファーを内部に持つクラスです。ポインターを使って直接書き換えたり、サイズの変更、リソースからの直読み、 圧縮(zlib)、暗号化、ファイル入出力が可能です。

ソースコード

sdata.h 右クリックで「対象をファイルに保存」でダウンロードしてください。

依存関係

メソッド

Load(), Save()

ファイルに対して入出力を行います。バイナリイメージのままメモリ上に読み込みます。
SData data;
BOOL bLoad = data.Load( __TEXT("d:\\ABC.bmp"));
BOOL bSave = data.Save( __TEXT("e:\\FFF.bmp"));

LoadResouce()

リソースから読み込みます。
SData data;
BOOL bLoad = data.LoadResouce( MAKEINTRESOURCE(IDR_ABC), __TEXT("BIN"), hInstance);

Encode(), Decode()

暗号化・復号化を行います。パスワードを元に変換します。
TCHAR pw[] = __TEXT("OrfJi1kNd4"); 
data.Encode( pw );
data.Decode( pw );

Compress(), UnCompress()

zlib を利用した圧縮を施します。
data.Compress();	// 圧縮
data.UnCompress();	// 解凍

IsCompressed(), IsEncoded()

圧縮されてるか、暗号化されてるか確認を取れます。
BOOL bCompressed = data.IsCompressed();
BOOL bEncoded = data.IsEncoded();

LockBuffer(), ReleaseBuffer()

メモリへのポインターを返します。その間はロックが掛かります。終わったら必ずReleaseBuffer() を実行してください。ロック中は 他のメソッドは実行できません。
SData data;
data.Alloc(1024);
LPBYTE lpb = (LPBYTE)data.LockBuffer();
if (lpb != NULL)
{
	strcpy( lpb, "Now, I can walk on these memories!");

	data.ReleaseBuffer( lpb );
}

Alloc()

メモリを確保を行います。既に確保したメモリサイズを変更する場合もコレです。その際は既存のデータは残ります。なお終端直後の4バイトを 常にゼロの値で余分に確保してあるので、テキストの終端としても使えます。
SData data;
data.Alloc( 1*1024*1024 );	// 1MB 確保
data.Alloc( 512*1024);		// 半分にする。前半の512KB のデータは維持される。

length()

メモリのサイズを返します。
int n = data.length();

Insert(), Erase()

データを挿入したり、指定範囲を削除したりできます。削除すると、後半のデータが前に寄せられます。

operator =

インスタンス間のコピーです。char 文字列の場合は代入もできます。
SData data;
data = other;
data = "Hello!";

operator +=

データの連結です。
SData data;
data += other;

operator ==, operator !=

比較です。同じならTRUE を返します。
if (data == other)
{
	// 同じ場合
}

ZeroClear()

メモリをゼロで埋めます。範囲も指定できます。
data.ZeroClear();