diff options
Diffstat (limited to 'matrix/init.c')
-rw-r--r-- | matrix/init.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/matrix/init.c b/matrix/init.c index 297f6af..e55558a 100644 --- a/matrix/init.c +++ b/matrix/init.c @@ -2,10 +2,13 @@ #include "generic/matrix.h" const char *nerv_matrix_tname = "nerv.Matrix"; -void nerv_matrix_float_host_init(lua_State *L); -void nerv_matrix_float_cuda_init(lua_State *L); -void nerv_matrix_double_host_init(lua_State *L); -void nerv_matrix_double_cuda_init(lua_State *L); +const char *nerv_matrix_cuda_tname = "nerv.CuMatrix"; +const char *nerv_matrix_host_tname = "nerv.MMatrix"; + +void nerv_matrix_host_float_init(lua_State *L); +void nerv_matrix_cuda_float_init(lua_State *L); +void nerv_matrix_host_double_init(lua_State *L); +void nerv_matrix_cuda_double_init(lua_State *L); static const luaL_Reg matrix_methods[] = { {"__tostring__", nerv_error_method_not_implemented }, @@ -16,12 +19,20 @@ static const luaL_Reg matrix_methods[] = { }; void nerv_matrix_init(lua_State *L) { - /* abstract class */ + /* abstract base class: Matrix */ luaT_newmetatable(L, nerv_matrix_tname, NULL, NULL, NULL, NULL); luaL_register(L, NULL, matrix_methods); lua_pop(L, 1); - nerv_matrix_float_host_init(L); - nerv_matrix_float_cuda_init(L); - nerv_matrix_double_host_init(L); - nerv_matrix_double_cuda_init(L); + + /* CuMatrix inherits from Matrix */ + luaT_newmetatable(L, nerv_matrix_cuda_tname, nerv_matrix_tname, + NULL, NULL, NULL); + nerv_matrix_cuda_float_init(L); + nerv_matrix_cuda_double_init(L); + + /* MMatrix inherits from Matrix */ + luaT_newmetatable(L, nerv_matrix_host_tname, nerv_matrix_tname, + NULL, NULL, NULL); + nerv_matrix_host_float_init(L); + nerv_matrix_host_double_init(L); } |