Minor tweaks and a new deque operator

This commit is contained in:
2021-07-20 14:48:53 -04:00
parent 08ca274444
commit 2930953569
10 changed files with 81 additions and 120 deletions

View File

@@ -316,6 +316,45 @@ LuaDefine(deque_nthr, "c") {
return LS.result();
}
LuaDefine(deque_findl, "c") {
LuaArg deque, val;
LuaRet pos;
LuaVar check;
LuaStack LS(L, deque, val, pos, check);
int left, fill, max;
deque_get_info(L, deque.index(), &left, &fill, &max);
for (int i = 0; i < fill; i++) {
int index = (left + i) & (max - 1);
LS.rawgeti(check, deque, DEQUE_BASE + index);
if (LS.rawequal(check, val)) {
LS.set(pos, i + 1);
return LS.result();
}
}
LS.set(pos, LuaNil);
return LS.result();
}
LuaDefine(deque_findr, "c") {
LuaArg deque, val;
LuaRet pos;
LuaVar check;
LuaStack LS(L, deque, val, pos, check);
int left, fill, max;
deque_get_info(L, deque.index(), &left, &fill, &max);
int base = left + fill - 1;
for (int i = 0; i < fill; i++) {
int index = (base - i) & (max - 1);
LS.rawgeti(check, deque, DEQUE_BASE + index);
if (LS.rawequal(check, val)) {
LS.set(pos, i + 1);
return LS.result();
}
}
LS.set(pos, LuaNil);
return LS.result();
}
LuaDefine(deque_size, "c") {
LuaArg deque;
LuaRet size;