From 1be9181f8e6e97a0726687afcf4eceb0573f58a5 Mon Sep 17 00:00:00 2001 From: Ivan Remen Date: Mon, 10 Apr 2017 07:08:47 -0400 Subject: [PATCH 1/3] Ussender clear --- ussender.lua | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ussender.lua b/ussender.lua index d3c8502..e4ac3da 100644 --- a/ussender.lua +++ b/ussender.lua @@ -1,12 +1,28 @@ -- Race conditions in this files are possible. It is ok by biz logic. +-- + +local tuple_length_limit = 1001 --max numbers of element + 1. VALUE MUST BE ODD. + +local function truncate_tuple(selected) + selected = selected:transform(1, #selected - tuple_length_limit):transform(1, (tuple_length_limit - 1) / 2) + box.replace(0, selected) + return selected +end + function ussender_add(user_id, sender_id) local user_id = box.unpack("i", user_id) local sender_id = box.unpack("l", sender_id) local selected = { box.select_limit(0, 0, 0, 1, user_id) } + if #selected == 0 then box.insert(0, user_id, sender_id) else + + if #selected[1] >= tuple_length_limit then + selected[1] = truncate_tuple(selected[1]) + end + local fun, param, state = selected[1]:pairs() state, _ = fun(param, state) -- skip the first element of tuple for state, v in fun, param, state do @@ -26,6 +42,9 @@ function ussender_select(user_id) if #ret == 0 then return {user_id} end + if #ret[1] >= tuple_length_limit then + ret[1] = truncate_tuple(ret[1]) + end return ret end From f4e5f09c9ecb772bdd2120c7d03a9023d063316d Mon Sep 17 00:00:00 2001 From: Ivan Remen Date: Mon, 10 Apr 2017 07:39:11 -0400 Subject: [PATCH 2/3] space number unhardcode --- ussender.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ussender.lua b/ussender.lua index e4ac3da..dbf914d 100644 --- a/ussender.lua +++ b/ussender.lua @@ -2,10 +2,11 @@ -- local tuple_length_limit = 1001 --max numbers of element + 1. VALUE MUST BE ODD. +local space_no = 0 local function truncate_tuple(selected) selected = selected:transform(1, #selected - tuple_length_limit):transform(1, (tuple_length_limit - 1) / 2) - box.replace(0, selected) + box.replace(space_no, selected) return selected end @@ -13,7 +14,7 @@ function ussender_add(user_id, sender_id) local user_id = box.unpack("i", user_id) local sender_id = box.unpack("l", sender_id) - local selected = { box.select_limit(0, 0, 0, 1, user_id) } + local selected = { box.select_limit(space_no, 0, 0, 1, user_id) } if #selected == 0 then box.insert(0, user_id, sender_id) @@ -31,14 +32,14 @@ function ussender_add(user_id, sender_id) return end end - box.update(0, user_id, "!p", -1, sender_id) + box.update(space_no, user_id, "!p", -1, sender_id) end end function ussender_select(user_id) local user_id = box.unpack("i", user_id) - local ret = {box.select_limit(0, 0, 0, 1, user_id)} + local ret = {box.select_limit(space_no, 0, 0, 1, user_id)} if #ret == 0 then return {user_id} end @@ -50,5 +51,5 @@ end function ussender_delete(user_id) local user_id = box.unpack("i", user_id) - box.delete(0, user_id) + box.delete(space_no, user_id) end From 6111814e6ac2d0415cf5b29f1735737259855028 Mon Sep 17 00:00:00 2001 From: Ivan Remen Date: Mon, 10 Apr 2017 07:40:17 -0400 Subject: [PATCH 3/3] missed space_no --- ussender.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ussender.lua b/ussender.lua index dbf914d..e4a901f 100644 --- a/ussender.lua +++ b/ussender.lua @@ -17,7 +17,7 @@ function ussender_add(user_id, sender_id) local selected = { box.select_limit(space_no, 0, 0, 1, user_id) } if #selected == 0 then - box.insert(0, user_id, sender_id) + box.insert(space_no, user_id, sender_id) else if #selected[1] >= tuple_length_limit then