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 件のコメント:
コメントを投稿