teal-src/util/smqueue.tl
changeset 12062 4860da718e87
parent 12061 e880f5a13080
equal deleted inserted replaced
12061:e880f5a13080 12062:4860da718e87
    68 
    68 
    69 function smqueue:consume() : queue.queue.consume_iter
    69 function smqueue:consume() : queue.queue.consume_iter
    70 	return self._queue:consume()
    70 	return self._queue:consume()
    71 end
    71 end
    72 
    72 
    73 -- Compatibility wrapper, meant to look like a plain ol' array
    73 -- Compatibility layer, plain ol' table
    74 local record compat_mt
       
    75 	_queue : smqueue<any>
       
    76 end
       
    77 
       
    78 function compat_mt:__index(i : integer) : any
       
    79 	if i < self._queue._tail then return nil end
       
    80 	return self._queue._queue._items[(i + self._queue._tail) % self._queue._queue.size];
       
    81 end
       
    82 
       
    83 function compat_mt:__len() : integer
       
    84 	return self._queue:count_unacked()
       
    85 end
       
    86 
       
    87 function smqueue:table() : { any }
    74 function smqueue:table() : { any }
    88 	return setmetatable({ _queue = self }, compat_mt);
    75 	local t : { any } = {};
       
    76 	for i, v in self:resume() do
       
    77 		t[i] = v;
       
    78 	end
       
    79 	return t;
    89 end
    80 end
    90 
    81 
    91 local function freeze(q : smqueue<any>) : { string:integer }
    82 local function freeze(q : smqueue<any>) : { string:integer }
    92 	return { head = q._head, tail = q._tail }
    83 	return { head = q._head, tail = q._tail }
    93 end
    84 end