opcode TabQueue2_Append, 0, iii
itab, ival1, ival2 xin
ind = 0
ik tab_i ind, itab
tabw_i ival1, (2 * (ik + 1) ), itab
tabw_i ival2, (2 * (ik + 1) + 1), itab
tabw_i (ik + 1), ind, itab
endop
opcode TabQueue2_Delete, 0,ii
itab, ival xin
ind = 0
iLast tab_i ind, itab
iCount = 1
iFound = 0
until iCount > iLast do
iCur tab_i (2 * iCount), itab
if (iCur == ival) then
iFound = 1
tabw_i (iLast - 1), ind, itab
endif
if (iFound == 1) then
iNext1 tab_i (2 * (iCount + 1)) , itab
iNext2 tab_i (2 * (iCount + 1) + 1), itab
tabw_i iNext1, (2 * iCount) , itab
tabw_i iNext2, (2 * iCount + 1), itab
endif
iCount = iCount + 1
od
endop
opcode TabQueue2_HasElements, k, i
itab xin
knd = 0
kk tab knd, itab
kres = (kk == 0) ? 0 : 1
xout kres
endop
opcode TabQueue2_ReadLastElement, kk, i
itab xin
knd = 0
kk tab knd, itab
kres1 tab (2 * kk) , itab
kres2 tab (2 * kk + 1), itab
xout kres1, kres2
endop