Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ws/engine/lua.hpp"
- namespace ws {
- namespace engine {
- struct NumArray {
- NumArray(int size){
- this->size = size;
- values = new double[size];
- }
- ~NumArray(){
- delete[] values;
- }
- int size;
- double* values;
- };
- Lua::Lua(){
- startTable();
- pushField("writeln", [&](int argc){
- for(int i=1; i<=argc; ++i)
- io::write(toString(i));
- io::writeln();
- return 0;
- });
- finishTable("io");
- startTable();
- pushField("create", [&](int argc){
- if(!argc or argc>1) throw Exception("invalid arguments to entity.create(classname)");
- Entity& e = Entity::create(getString(1));
- push(e.luaTable);
- return 1;
- });
- finishTable("entity");
- startMetatable("Array");
- pushField(
- "new", [&](int argc){
- newUD<NumArray>("Array", getNumber(1));
- return 1;
- },
- "__gc", [&](int argc){
- getLUD<NumArray>("Array", 1)->~NumArray();
- return 0;
- },
- "__index", [&](int argc){
- int index = getNumber(2);
- NumArray& a = *getLUD<NumArray>("Array");
- luaL_argcheck(*this, 1 <= index && index <= a.size, 2, "index out of range");
- push(a.values[index-1]);
- return 1;
- },
- "__newindex", [&](int argc){
- int index = getNumber(2);
- NumArray& a = *getLUD<NumArray>("Array");
- luaL_argcheck(*this, 1 <= index && index <= a.size, 2, "index out of range");
- a.values[index-1] = getNumber(3);
- return 1;
- },
- "__tostring", [&](int argc){
- push("Hi there");
- return 1;
- }
- );
- finishTable("Array");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement