squirrelのデータをC++から簡単にアクセスする

モデルのポリゴンデータを.nutで記述するつもりなので、手始めにsquirrelのデータへのアクセスを容易にするためのオブジェクト&イテレータを実装してみた。

return {
    NAME="カイン"
    JOB="竜騎士"
    EQUIP=["グングニルの槍","クリスタルアーマー","リボン"]
};

のようなsquirrelスクリプト(cain.nut)を用意して、C++から

void hoge(){
    vm.dofile("cain.nut");
    vmobj cain=vm.popstackobj();
    string name = cain["NAME"];
    string job = cain["JOB"];
    for( vmiter iter = cain["EQUIP"]; !iter.isend(); ++iter ){
        printf("equip[%d]=%s\n",(int)iter.key(),(const char*)iter.value());
    }
}

みたいに呼べるようになった。
さて実際にモデルデータ読み込んでみるか。それができたらmqo2nutコンバータ作ってモデルだすぞ〜。

.nutのサイズと読み込み速度

仕事で使ってるモデルデータはテキスト形式だと余裕で100MBオーバーがあがってくるので、それにも耐えられる仕様を考えると.nutはキツイかも。1回コンパイルして.cnutにすべき。そのままだとサイズがテキストの倍になってしまうので、それをさらにzlibなどで圧縮するのが妥当かな。とりあえず趣味の範疇だと.nutのままでも支障が無いので気にしない。
.cnutにすると読み込みえれぇ速ぇよ。