メモリ

ゲーム開発では、ユーザはメモリ確保をコントロールしたいと望む声があるかと思います。
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;
 }