Get rid of getfield/setfield
This commit is contained in:
@@ -143,8 +143,8 @@ LuaDefine(queue_create, "c") {
|
||||
LuaStack LS(L, queue);
|
||||
|
||||
LS.newtable(queue);
|
||||
LS.setfield(queue, "head", 1000000);
|
||||
LS.setfield(queue, "tail", 1000000);
|
||||
LS.rawset(queue, "head", 1000000);
|
||||
LS.rawset(queue, "tail", 1000000);
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
@@ -153,9 +153,9 @@ LuaDefine(queue_push, "c") {
|
||||
lua_Integer head;
|
||||
LuaStack LS(L, queue, elt);
|
||||
|
||||
LS.getfield(head, queue, "head");
|
||||
LS.rawget(head, queue, "head");
|
||||
LS.rawset(queue, head, elt);
|
||||
LS.setfield(queue, "head", head+1);
|
||||
LS.rawset(queue, "head", head+1);
|
||||
return LS.result();
|
||||
}
|
||||
|
||||
@@ -165,14 +165,14 @@ LuaDefine(queue_pop, "c") {
|
||||
lua_Integer head, tail;
|
||||
LuaStack LS(L, queue, elt);
|
||||
|
||||
LS.getfield(tail, queue, "tail");
|
||||
LS.getfield(head, queue, "head");
|
||||
LS.rawget(tail, queue, "tail");
|
||||
LS.rawget(head, queue, "head");
|
||||
if (head == tail) {
|
||||
LS.set(elt, LuaNil);
|
||||
} else {
|
||||
LS.rawget(elt, queue, tail);
|
||||
LS.rawset(queue, tail, LuaNil);
|
||||
LS.setfield(queue, "tail", tail + 1);
|
||||
LS.rawset(queue, "tail", tail + 1);
|
||||
}
|
||||
return LS.result();
|
||||
}
|
||||
@@ -183,8 +183,8 @@ LuaDefine(queue_size, "c") {
|
||||
lua_Number head, tail;
|
||||
LuaStack LS(L, queue, size);
|
||||
|
||||
LS.getfield(head, queue, "head");
|
||||
LS.getfield(tail, queue, "tail");
|
||||
LS.rawget(head, queue, "head");
|
||||
LS.rawget(tail, queue, "tail");
|
||||
LS.set(size, head - tail);
|
||||
return LS.result();
|
||||
}
|
||||
@@ -196,8 +196,8 @@ LuaDefine(queue_nth, "c") {
|
||||
LuaStack LS(L, queue, n, elt);
|
||||
|
||||
nth = LS.ckinteger(n) - 1;
|
||||
LS.getfield(head, queue, "head");
|
||||
LS.getfield(tail, queue, "tail");
|
||||
LS.rawget(head, queue, "head");
|
||||
LS.rawget(tail, queue, "tail");
|
||||
if ((nth < 0) || (nth + tail >= head)) {
|
||||
luaL_error(L, "index out of range");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user