メモリ
ゲーム開発では、ユーザはメモリ確保をコントロールしたいと望む声があるかと思います。
xtalはその声に応えます。
xtal::initialize()を呼ぶ前に、xtal::set_user_malloc(void* (*malloc)(size_t), void (*free)(void*));を呼ぶことで、xtalが使う全てのメモリ確保を、ユーザ定義のmallocに置き換えることが可能になります。
void* my_malloc(size_t size){ /* ユーザ独自のメモリ確保関数の実装 */ } void my_free(void* p){ /* ユーザー独自のメモリ解放関数の実装 */ } int main(){ using namespace xtal; try{ set_user_malloc(&my_malloc, &my_free); initialize(); Any code = compile("println(10 + 20);"); code(); }catch(Any e){ puts(e.to_s().c_str()); } uninitialize(); return 0; }
malloc等を記述するのが面倒で、単純に渡したメモリ領域を使って欲しいだけという場合は、xtal::set_memory(void* memory, size_t size);関数を使うと良いです。
static int buffer[1024*100]; int main(){ using namespace xtal; try{ set_memory(buffer, sizeof(buffer)); initialize(); Any code = compile("println(10 + 20);"); code(); }catch(Any e){ puts(e.to_s().c_str()); } uninitialize(); return 0; }