///
module Rx {
export module internals {
// Priority Queue for Scheduling
export interface PriorityQueue {
length: number;
isHigherPriority(left: number, right: number): boolean;
percolate(index: number): void;
heapify(index: number): void;
peek(): ScheduledItem;
removeAt(index: number): void;
dequeue(): ScheduledItem;
enqueue(item: ScheduledItem): void;
remove(item: ScheduledItem): boolean;
}
interface PriorityQueueStatic {
new (capacity: number) : PriorityQueue;
count: number;
}
export var PriorityQueue : PriorityQueueStatic;
}
}
(function() {
var queue = new Rx.internals.PriorityQueue(100);
var n : number = queue.length
var b : boolean = queue.isHigherPriority(1, 100);
queue.percolate(100);
queue.heapify(100);
var item: Rx.internals.ScheduledItem = queue.peek();
queue.removeAt(100);
var item: Rx.internals.ScheduledItem = queue.dequeue();
queue.enqueue(item);
b = queue.remove(item);
n = Rx.internals.PriorityQueue.count;
});