dkutil filepacking library 原案

いつだか、ファイルパッキング機構を考えた事がある。*1
http://studiokingyo.fc2web.com/dxlib/kowaza/k4.html#k16
で、作ったはイイが、ちょっとコンパイルに面倒なdkutil 1.0x仕様と言う事で実際に使っている人は皆無だと思う。(私も含めて)
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/algo/dkutilFilePack.h
なので、ちょっともう一回設計を考えてみたいと思う。

一つのデータ(ファイル)を書き込む際の処理フロー

  • # シグネチャ生成
  • # 圧縮
  • # 暗号化
  • # ファイルに書き込み

擬似コード (alldata:すべてのデータ allsize:すべてのデータのサイズ)


void encode_write(BYTE *alldata,size_t allsize){
シグネチャ生成関数の計算(alldata,allsize)
圧縮処理(alldata,allsize);
暗号化処理(alldata,allsize);
ファイルに書き込み(シグネチャ生成());
ファイルに書き込み(alldata,allsize);
}

てなわけで、一塊のデータを書き込むにはこんなフローがいる訳です。
*2

で、シグネチャ生成、圧縮処理、暗号化処理のところはやっぱりとっかえひっかえしたいですよね^^;
圧縮、暗号化のとっかえひっかえができるように作ったのが例の*3ファイルパック機構なのだが、イカンセンちょっと使いにくかった。し、メンテもしにくかった。

http://www.c3.club.kyutech.ac.jp/~sukiyaki/の精神論の設計の所で語られているように
もう少し、仕様をきめてからコーディングをしようと思う。

昔から、ここらへんの設計に時間を割いていないので一応動くけど、条件が重なるとミスる物や
やっぱり使いにくかったと言ったものが多々ある。

とりあえず、考えてみたもの

polymorphic encoder

  • encodeする際にメモリ領域の先頭にヘッダ値を書き込む
  • decodeする際はencodeした時に書き込んだヘッダを元に復元
  • ヘッダにはシグネチャとdecode時に必要なバッファサイズ、encode済みのバッファサイズを記憶しておく

続く

*1:タイトルのように、考察と呼べないものかもしれないが・・・

*2:ちなみに、これらの処理を メモリを少なく、速くするには 分割してデータを書き込めるようにして、かつ、一回のループですべてをこなすようにコーディングする。

*3:http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/algo/dkutilFilePack.h

ファイルパッキング機構、ファイルシステムについて扱っているサイト

前、私が考えたセーブデータを改竄されないようにするための考察
http://d.hatena.ne.jp/studiokingyo/20040714#p4

ゲーム用ファイルシステムの考察
http://homepage3.nifty.com/moha/prog_file.html