Another deque operator
This commit is contained in:
@@ -316,6 +316,36 @@ LuaDefine(deque_nthr, "c") {
|
|||||||
return LS.result();
|
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") {
|
LuaDefine(deque_findl, "c") {
|
||||||
LuaArg deque, val;
|
LuaArg deque, val;
|
||||||
LuaRet pos;
|
LuaRet pos;
|
||||||
|
|||||||
@@ -85,6 +85,11 @@ int deque_popr(lua_State *L);
|
|||||||
int deque_nthl(lua_State *L);
|
int deque_nthl(lua_State *L);
|
||||||
int deque_nthr(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.
|
// Search a deque for a value.
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user