Trails/queue.wren
Ronja 3c95c9e5f3 Initial Commit
first implementation of distance based trail
2022-01-23 11:01:09 +01:00

57 lines
No EOL
963 B
Text

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]
}
}