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