class Queue is Sequence{ data{_data} count{_count} construct new(){ _data = [] _count = 0 _head = -1 } clear(){ _count = 0 _head = -1 } enqueue(value){ _count = _count + 1 _head = _head + 1 if(_data.count >= _count){ if(_head >= _data.count){ _head = _head - _data.count } _data[_head] = value } else { _data.insert(_head, value) } return value } dequeue(){ if(_count == 0) return null var res = peek() _count = _count - 1 return res } peek(){ if(_count == 0) return null var tail = _head - _count + 1 if(tail < 0) tail = _data.count + tail return _data[tail] } empty(){_count == 0} iterate(iter){ if(!iter) return _count > 0 ? 0 : false if(iter >= _count - 1) return false return iter + 1 } iteratorValue(iter){ var index = _head - _count + 1 + iter if(index < 0) index = _data.count + index return _data[index] } }