diff options
Diffstat (limited to 'oop_example.c')
-rw-r--r-- | oop_example.c | 91 |
1 files changed, 0 insertions, 91 deletions
diff --git a/oop_example.c b/oop_example.c deleted file mode 100644 index e9a4ffe..0000000 --- a/oop_example.c +++ /dev/null @@ -1,91 +0,0 @@ -#include <math.h> -#include "lua.h" -#include "lauxlib.h" -#include "lualib.h" -#include "luaT/luaT.h" -#include <stdio.h> -#include <stdlib.h> - -const char *point_tname = "nerv.Point"; - -typedef struct { - double x, y; - int arr[100]; -} Point; - -static int point_get_sinx (lua_State *L) { - Point *p = luaT_checkudata(L, 1, point_tname); - lua_pushnumber(L, sin(p->x)); - return 1; -} - -static int point_set_x (lua_State *L) { - Point *p = luaT_checkudata(L, 1, point_tname); - p->x = luaL_checknumber(L, 2); - return 0; -} - - -static int point_get_y(lua_State *L) { - Point *p = luaT_checkudata(L, 1, point_tname); - lua_pushnumber(L, sin(p->x)); - return 1; -} - -static int point_newindex(lua_State *L) { - Point *p = luaT_checkudata(L, 1, point_tname); - if (lua_isnumber(L, 2)) - { - int d = luaL_checkinteger(L, 2); - double v = luaL_checknumber(L, 3); - if (0 <= d && d < 100) - p->arr[d] = v; - lua_pushboolean(L, 1); - return 1; - } - else - { - lua_pushboolean(L, 0); - return 1; - } -} - -static int point_index(lua_State *L) { - Point *p = luaT_checkudata(L, 1, point_tname); - if (lua_isnumber(L, 2)) - { - int d = luaL_checkinteger(L, 2); - if (0 <= d && d < 100) - lua_pushnumber(L, p->arr[d]); - lua_pushboolean(L, 1); - return 2; - } - else - { - lua_pushboolean(L, 0); - return 1; - } -} - -int point_new(lua_State *L) { - Point *self = (Point *)malloc(sizeof(Point)); - self->x = 0; - self->y = 0; - luaT_pushudata(L, self, point_tname); - return 1; -} - -static const luaL_Reg point[] = { - {"get_sinx", point_get_sinx}, - {"set_x", point_set_x}, - {"get_y", point_get_y}, - {"__index__", point_index}, - {"__newindex__", point_newindex}, - {NULL, NULL} -}; - -void nerv_point_init(lua_State *L) { - luaT_newmetatable(L, "nerv.Point", NULL, point_new, NULL, NULL); - luaL_register(L, NULL, point); - lua_pop(L, 1); -} |