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;

View File

@@ -85,6 +85,11 @@ int deque_popr(lua_State *L);
int deque_nthl(lua_State *L);
int deque_nthr(lua_State *L);
// Set (overwrite) the nth element in a deque.
//
int deque_setl(lua_State *L);
int deque_setr(lua_State *L);
//
// Search a deque for a value.
//