commit bdb91fe: [Minor] Lua_tensor: Add __len method

Vsevolod Stakhov vsevolod at highsecure.ru
Tue Aug 25 14:49:06 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-08-25 13:02:02 +0100
URL: https://github.com/rspamd/rspamd/commit/bdb91fe0c6d7cba2fcf4e3a022c60c29b0082061

[Minor] Lua_tensor: Add __len method

---
 src/lua/lua_tensor.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/src/lua/lua_tensor.c b/src/lua/lua_tensor.c
index 1506d4548..4fcc7e201 100644
--- a/src/lua/lua_tensor.c
+++ b/src/lua/lua_tensor.c
@@ -34,6 +34,7 @@ LUA_FUNCTION_DEF (tensor, mul);
 LUA_FUNCTION_DEF (tensor, tostring);
 LUA_FUNCTION_DEF (tensor, index);
 LUA_FUNCTION_DEF (tensor, newindex);
+LUA_FUNCTION_DEF (tensor, len);
 
 static luaL_reg rspamd_tensor_f[] = {
 		LUA_INTERFACE_DEF (tensor, load),
@@ -51,6 +52,7 @@ static luaL_reg rspamd_tensor_m[] = {
 		{"__tostring", lua_tensor_tostring},
 		{"__index", lua_tensor_index},
 		{"__newindex", lua_tensor_newindex},
+		{"__len", lua_tensor_len},
 		{NULL, NULL},
 };
 
@@ -560,6 +562,30 @@ lua_tensor_load (lua_State *L)
 	return 1;
 }
 
+static gint
+lua_tensor_len (lua_State *L)
+{
+	struct rspamd_lua_tensor *t = lua_check_tensor (L, 1);
+	gint nret = 1;
+
+	if (t) {
+		/* Return the main dimension first */
+		if (t->ndims == 1) {
+			lua_pushinteger (L, t->dim[0]);
+		}
+		else {
+			lua_pushinteger (L, t->dim[0]);
+			lua_pushinteger (L, t->dim[1]);
+			nret = 2;
+		}
+	}
+	else {
+		return luaL_error (L, "invalid arguments");
+	}
+
+	return nret;
+}
+
 static gint
 lua_load_tensor (lua_State * L)
 {


More information about the Commits mailing list