aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/reg.c4
-rw-r--r--src/table.c39
-rw-r--r--src/table.h5
3 files changed, 42 insertions, 6 deletions
diff --git a/src/reg.c b/src/reg.c
index e6715c3..9393aa4 100644
--- a/src/reg.c
+++ b/src/reg.c
@@ -17,7 +17,7 @@
return 1;\
}
-open_common(array);
+open_common(table);
open_common(crypto);
open_common(io);
open_common(math);
@@ -35,7 +35,7 @@ int luaopen_lullaby(lua_State* L) {
lua_newtable(L);
int top = lua_gettop(L);
- push(top, array);
+ push(top, table);
push(top, crypto);
push(top, io);
push(top, math);
diff --git a/src/table.c b/src/table.c
index 593c31b..ea57b2c 100644
--- a/src/table.c
+++ b/src/table.c
@@ -3,6 +3,41 @@
#include <string.h>
#include <stdint.h>
+int l_split(lua_State* L){
+ size_t str_len = 0;
+ size_t search_len = 0;
+
+ const char* str = luaL_checklstring(L, 1, &str_len);
+ const char* search = luaL_checklstring(L, 2, &search_len);
+ int skip = 1;
+ if(lua_gettop(L) >= 3) skip = lua_toboolean(L, 3);
+
+ lua_newtable(L);
+ int idx = lua_gettop(L);
+
+ const char* last = str;
+
+ for(;;){
+ char* end = (char*)memmem(last, str_len - (last - str), search, search_len);
+ if(end == NULL) break;
+
+ if(!(skip && (end - last) == 0)){
+ lua_pushinteger(L, lua_objlen(L, idx) + 1);
+ lua_pushlstring(L, last, end - last);
+ lua_settable(L, idx);
+ }
+
+ last = end + 1;
+ }
+
+ lua_pushinteger(L, lua_objlen(L, idx) + 1);
+ lua_pushlstring(L, last, str_len - (last - str));
+ lua_settable(L, idx);
+
+ lua_pushvalue(L, idx);
+ return 1;
+}
+
int l_unpack(lua_State* L){
int top = lua_gettop(L);
lua_pushnil(L);
@@ -195,7 +230,7 @@ int l_sindexof(lua_State* L) {
return 1;
}
-int l_split(lua_State* L){
+/*int l_split(lua_State* L){
size_t input_len = 0;
size_t split_len = 0;
char* input = (char*)luaL_checklstring(L, 1, &input_len);
@@ -229,7 +264,7 @@ int l_split(lua_State* L){
lua_settable(L, -3);
return 1;
-}
+}*/
int l_to_char_array(lua_State* L){
size_t input_len = 0;
diff --git a/src/table.h b/src/table.h
index e962e3c..988eb45 100644
--- a/src/table.h
+++ b/src/table.h
@@ -20,8 +20,9 @@ int l_split(lua_State*);
int l_to_char_array(lua_State*);
int l_unpack(lua_State*);
+int l_split(lua_State*);
-static const luaL_Reg array_function_list [] = {
+static const luaL_Reg table_function_list [] = {
{"len",l_len},
{"reverse",l_reverse},
{"greatest",l_greatest},
@@ -52,6 +53,6 @@ static const luaL_Reg array_function_list [] = {
{NULL,NULL}
};
-static struct config array_config[] = {
+static struct config table_config[] = {
{.type = c_none}
};