Quote:
Originally Posted by JoinedSenses
SM doesnt have LinkedList
|
This is not tested, but would be more smart for O(1) push & pop at the cost of some more memory usage (using circular buffer)
PHP Code:
methodmap Queue < Handle {
public Queue(int size=32) {
ArrayList data = new ArrayList(1, size+3);
data.Set(0, 0); // tail
data.Set(1, 0); // head
data.Set(2, size); // Size
return view_as<Queue>(data);
}
property int Tail {
public get() { return view_as<ArrayList>(this).Get(0); }
public set(const int value) { view_as<ArrayList>(this).Set(0, value); }
}
property int Head {
public get() { return view_as<ArrayList>(this).Get(1); }
public set(const int value) { view_as<ArrayList>(this).Set(1, value); }
}
property int Size {
public get() { return view_as<ArrayList>(this).Get(2); }
}
// ----
property bool isEmpty {
public get() { return this.Head == this.Tail; }
}
property bool isFull {
public get() { return ((this.Head+1)%this.Size) == this.Tail; }
}
// ----
public void Push(const int value) {
view_as<ArrayList>(this).Set(this.Head+3, value);
this.Head = (this.Head + 1) % this.Size;
}
public int Pop() {
int tmp = view_as<ArrayList>(this).Get(this.Tail+3);
this.Tail = (this.Tail + 1) % this.Size;
return tmp;
}
public int Front() {
return view_as<ArrayList>(this).Get(this.Tail+3);
}
}