Another deque operator

This commit is contained in:
2021-07-20 16:16:07 -04:00
parent 2930953569
commit 4ba0471bde
2 changed files with 35 additions and 0 deletions

View File

@@ -316,6 +316,36 @@ LuaDefine(deque_nthr, "c") {
return LS.result();
}
LuaDefine(deque_setl, "c") {
LuaArg deque, nn, val;
LuaStack LS(L, deque, nn, val);
int left, fill, max;
deque_get_info(L, deque.index(), &left, &fill, &max);
int n = LS.ckint(nn);
if ((n < 1) || (n > fill)) {
luaL_error(L, "invalid index");
return LS.result();
}
int target = (left + n - 1) & (max - 1);
LS.rawseti(deque, DEQUE_BASE + target, val);
return LS.result();
}
LuaDefine(deque_setr, "c") {
LuaArg deque, nn, val;
LuaStack LS(L, deque, nn, val);
int left, fill, max;
deque_get_info(L, deque.index(), &left, &fill, &max);
int n = LS.ckint(nn);
if ((n < 1) || (n > fill)) {
luaL_error(L, "invalid index");
return LS.result();
}
int target = (left + fill - n) & (max - 1);
LS.rawseti(deque, DEQUE_BASE + target, val);
return LS.result();
}
LuaDefine(deque_findl, "c") {
LuaArg deque, val;
LuaRet pos;