From 06639e0d8ec7a181417fbc645e353acdcac8f271 Mon Sep 17 00:00:00 2001 From: Alexander Lantsev Date: Fri, 13 Nov 2015 21:55:05 +0000 Subject: MirLua: more standart in work with metatables git-svn-id: http://svn.miranda-ng.org/main/trunk@15720 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/MirLua/src/m_message.cpp | 52 ++++------------------------------------ 1 file changed, 5 insertions(+), 47 deletions(-) (limited to 'plugins/MirLua/src/m_message.cpp') diff --git a/plugins/MirLua/src/m_message.cpp b/plugins/MirLua/src/m_message.cpp index 6d6959c5e4..3d0848d523 100644 --- a/plugins/MirLua/src/m_message.cpp +++ b/plugins/MirLua/src/m_message.cpp @@ -133,57 +133,15 @@ static luaL_Reg messageApi[] = { NULL, NULL } }; -#define MT_MESSAGEWINDOWEVENTDATA "MessageWindowEventData" - -static int mwed__init(lua_State *L) -{ - MessageWindowEventData *udata = (MessageWindowEventData*)lua_touserdata(L, 1); - if (udata == NULL) - { - lua_pushnil(L); - return 1; - } - - MessageWindowEventData **mwed = (MessageWindowEventData**)lua_newuserdata(L, sizeof(MessageWindowEventData*)); - *mwed = udata; - - luaL_setmetatable(L, MT_MESSAGEWINDOWEVENTDATA); - - return 1; -} - -static int mwed__index(lua_State *L) -{ - MessageWindowEventData *mwed = *(MessageWindowEventData**)luaL_checkudata(L, 1, MT_MESSAGEWINDOWEVENTDATA); - const char *key = lua_tostring(L, 2); - - if (!mir_strcmpi(key, "Module") == 0) - lua_pushstring(L, ptrA(mir_utf8encode(mwed->szModule))); - else if (!mir_strcmpi(key, "Type") == 0) - lua_pushinteger(L, mwed->uType); - else if (!mir_strcmpi(key, "hContact") == 0) - lua_pushinteger(L, mwed->hContact); - else if (!mir_strcmpi(key, "Flags") == 0) - lua_pushinteger(L, mwed->uFlags); - else - lua_pushnil(L); - - return 1; -} - -static luaL_Reg mwedMeta[] = -{ - { MT_MESSAGEWINDOWEVENTDATA, mwed__init }, - { "__index", mwed__index }, - { NULL, NULL } -}; - LUAMOD_API int luaopen_m_message(lua_State *L) { luaL_newlib(L, messageApi); - luaL_newmetatable(L, MT_MESSAGEWINDOWEVENTDATA); - luaL_setfuncs(L, mwedMeta, 0); + MT(L, "MessageWindowEventData") + .Field(&MessageWindowEventData::szModule, "Module", LUA_TSTRINGA) + .Field(&MessageWindowEventData::uType, "Type", LUA_TINTEGER) + .Field(&MessageWindowEventData::hContact, "hContact", LUA_TINTEGER) + .Field(&MessageWindowEventData::uFlags, "Flags", LUA_TINTEGER); lua_pop(L, 1); return 1; -- cgit v1.2.3