C++でJSONを扱う件(2)
で、object型ですが、ここでは簡略化して、以下のように考えます。
- struct objson{
- objson* parent; // 親
- objson* child; // 子
- objson* prev; // 兄
- objson* next; // 弟
- char* value; // データ部
- char dat[4]; // key部
- //その他いろいろあるけど省略
- objson& operator[](const char* c); //["abc"]とかのため
- operator char*(); //キャストするため
- void operator=(char* cp); //代入するため
- };
これは、objectのデータ長さが一定ではないためです。
もちろん、構造体のメンバの中に、VARIANT的な値をもつという方法もありますが、ここでは面倒になるのでやりません。
よって、bool/int/doulbeとかであれば、まぁあっても8バイトなわけなので、最初から確保するという荒業もありますが、文字列だとそうはいきません。
よって、こんな風に生成してみます。
- int size = sizeof(objson) + strlen(moji) + strlen(key);
- char* p = new char[size];
- memset(p,0,size);
- objson* o = (objson*)p;
keyを設定するには、datへcopy、値を設定するには、valueのポインタを設定してからstrcpyします。
- strcpy(o->dat,key);
- o->value = &o->dat[strlen(key)+1];
- strcpy(o->value,value);
長さを算定してメモリを確保し、それにobjson*でキャストしています。
例えば、メモリ管理を自分で書けば、メモリを連続させたりすることもできるし、不要なnew-deleteを考えなくてもすみます。
ここでは、keyになる文字列と値になる文字列の分を足して、メモリを確保しています。
生成したあとは、parent/child/prev/nextを設定して階層をつくってやれば、
o->child->child->child
なんて指定も可能になります。
つづく。。
0 件のコメント:
コメントを投稿