Advertisement
WeltEnSTurm

Untitled

Oct 12th, 2012
369
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.61 KB | None | 0 0
  1.  
  2. #include "ws/engine/lua.hpp"
  3.  
  4. namespace ws {
  5.     namespace engine {
  6.  
  7.         struct NumArray {
  8.             NumArray(int size){
  9.                 this->size = size;
  10.                 values = new double[size];
  11.             }
  12.             ~NumArray(){
  13.                 delete[] values;
  14.             }
  15.             int size;
  16.             double* values;
  17.         };
  18.  
  19.         Lua::Lua(){
  20.             startTable();
  21.             pushField("writeln", [&](int argc){
  22.                 for(int i=1; i<=argc; ++i)
  23.                     io::write(toString(i));
  24.                 io::writeln();
  25.                 return 0;
  26.             });
  27.             finishTable("io");
  28.  
  29.             startTable();
  30.             pushField("create", [&](int argc){
  31.                 if(!argc or argc>1) throw Exception("invalid arguments to entity.create(classname)");
  32.                 Entity& e = Entity::create(getString(1));
  33.                 push(e.luaTable);
  34.                 return 1;
  35.             });
  36.             finishTable("entity");
  37.  
  38.             startMetatable("Array");
  39.             pushField(
  40.                     "new", [&](int argc){
  41.                         newUD<NumArray>("Array", getNumber(1));
  42.                         return 1;
  43.                     },
  44.                     "__gc", [&](int argc){
  45.                         getLUD<NumArray>("Array", 1)->~NumArray();
  46.                         return 0;
  47.                     },
  48.                     "__index", [&](int argc){
  49.                         int index = getNumber(2);
  50.                         NumArray& a = *getLUD<NumArray>("Array");
  51.                         luaL_argcheck(*this, 1 <= index && index <= a.size, 2, "index out of range");
  52.                         push(a.values[index-1]);
  53.                         return 1;
  54.                     },
  55.                     "__newindex", [&](int argc){
  56.                         int index = getNumber(2);
  57.                         NumArray& a = *getLUD<NumArray>("Array");
  58.                         luaL_argcheck(*this, 1 <= index && index <= a.size, 2, "index out of range");
  59.                         a.values[index-1] = getNumber(3);
  60.                         return 1;
  61.                     },
  62.                     "__tostring", [&](int argc){
  63.                         push("Hi there");
  64.                         return 1;
  65.                     }
  66.             );
  67.             finishTable("Array");
  68.  
  69.         }
  70.  
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement