前回の続きだ。
が、protobufはまた次以降にする。
やりたいのは、こうだ。
- 構造体のデータを、DBに読み書きしたい
- 労力は少なめにしたい
- 構造体のメンバがしばしば変更される
DBとか何とか書いているが、しょせんデータというのは、データの開始位置を示すアドレスと、そのデータが何バイト続いているかというバイト数だけだ。
そのデータをどう解釈するかは、型による。
が、読み書きだけであれば型はそれほど重要では無く、このアドレスからnバイト続いているんだ、くらいしかいらないだろう。
いるとすれば、型情報とエンディアンか。
まあ、今回は同じマシンにしか戻せなくてよいということと、DBのkey名と型は結びついているという前提であれば、いらないか。
そう割り切ってしまえば、面倒ではあるが、難しくは無い。
構造体メンバを各メンバごとに保存したければ、こうなるか。
01: typedef struct { 02: int xxx; 03: } st1; 04: 05: typedef struct { 06: st1 yyy; 07: };
- 構造体メンバyyyのオフセットを得る(offsetof()など)
- その中の構造体メンバxxxのオフセットとサイズを得る
両方のオフセットを足せば、開始アドレスが分かるだろう。
問題があるとすれば、ひどく面倒だ、ということだ。
protobufだったら、もう少し便利なのだろうか?
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。