Another deque operator
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user