From 24dbb15bf6f2b513e2fb75345345b7b646ff1a81 Mon Sep 17 00:00:00 2001 From: "Nicolas \"Pixel\" Noble" Date: Wed, 7 Aug 2013 06:31:41 +0200 Subject: Adding skeleton LuaHandle. --- src/LuaHandle.cc | 121 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 src/LuaHandle.cc (limited to 'src/LuaHandle.cc') diff --git a/src/LuaHandle.cc b/src/LuaHandle.cc new file mode 100644 index 0000000..7607665 --- /dev/null +++ b/src/LuaHandle.cc @@ -0,0 +1,121 @@ +#include "LuaHandle.h" +#include "Handle.h" + +// Handle exports + +enum IOHandle_methods_t { + IOHANDLE_CLOSE, +}; + +struct Balau::lua_functypes_t IOHandle_methods[] = { + { IOHANDLE_CLOSE, "close", 0, 0, { } }, + { -1, 0, 0, 0, 0 }, +}; + +struct sLua_IOHandle { + static int IOHandle_proceed(Balau::Lua & L, int n, Balau::IOHandle * obj, int caller); +}; + +int sLua_IOHandle::IOHandle_proceed(Balau::Lua & L, int n, Balau::IOHandle * obj, int caller) { + int r = 0; + Balau::IO h = *obj; + + switch (caller) { + case IOHANDLE_CLOSE: + h->close(); + break; + } + + return r; +} + +void Balau::LuaHandleFactory::pushStatics(Balau::Lua & L) { + CHECK_METHODS(IOHandle); + PUSH_CLASS(Handle); + PUSH_CLASS_DONE(); +} + +void Balau::LuaHandleFactory::pushObjectAndMembers(Lua & L) { + pushObj(L, m_obj, "Handle"); + + PUSH_METHOD(IOHandle, IOHANDLE_CLOSE); +} + + +// Input exports + +enum IOInput_functions_t { + IOINPUT_CONSTRUCTOR, +}; + +enum IOInput_methods_t { + IOINPUT_OPEN, +}; + +struct Balau::lua_functypes_t IOInput_functions[] = { + { IOINPUT_CONSTRUCTOR, NULL, 1, 1, { Balau::BLUA_STRING } }, + { -1, 0, 0, 0, 0 }, +}; + +struct Balau::lua_functypes_t IOInput_methods[] = { + { IOINPUT_OPEN, "open", 0, 0, { } }, + { -1, 0, 0, 0, 0 }, +}; + +struct sLua_IOInput { + static int IOInput_proceed_static(Balau::Lua & L, int n, int caller); + static int IOInput_proceed(Balau::Lua & L, int n, Balau::IOHandle * obj, int caller); +}; + +int sLua_IOInput::IOInput_proceed_static(Balau::Lua & L, int n, int caller) { + int r; + + switch (caller) { + case IOINPUT_CONSTRUCTOR: + { + Balau::LuaInputFactory factory(new Balau::Input(L.tostring())); + factory.pushDestruct(L); + } + r = 1; + break; + } + + return r; +} + +int sLua_IOInput::IOInput_proceed(Balau::Lua & L, int n, Balau::IOHandle * obj, int caller) { + int r; + Balau::IO h = *obj; + + switch (caller) { + case IOINPUT_OPEN: + return L.yield(Balau::Future([h]() mutable { h->open(); return 0; })); + break; + } + + return r; +} + +void Balau::LuaInputFactory::pushStatics(Balau::Lua & L) { + CHECK_FUNCTIONS(IOInput); + CHECK_METHODS(IOInput); + + PUSH_SUBCLASS(Input, Handle); + PUSH_CONSTRUCTOR(IOInput, IOINPUT_CONSTRUCTOR); + PUSH_CLASS_DONE(); +} + +void Balau::LuaInputFactory::pushObjectAndMembers(Lua & L) { + LuaHandleFactory::pushObjectAndMembers(L); + + L.push("__type"); + L.getglobal("Input"); + L.settable(-3, true); + + PUSH_METHOD(IOInput, IOINPUT_OPEN); +} + +void Balau::registerLuaHandle(Lua & L) { + LuaHandleFactory::pushStatics(L); + LuaInputFactory::pushStatics(L); +} -- cgit v1.2.3