PriorityQueue.js 954 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. var Class = require('./Class');
  2. var Heap = require('./Heap');
  3. var isSorted = require('./isSorted');
  4. var wrap = require('./wrap');
  5. exports = Class({
  6. initialize: function PriorityQueue() {
  7. var cmp =
  8. arguments.length > 0 && arguments[0] !== undefined
  9. ? arguments[0]
  10. : isSorted.defComparator;
  11. this._heap = new Heap(
  12. wrap(cmp, function(fn, a, b) {
  13. return fn(a, b) * -1;
  14. })
  15. );
  16. this.size = 0;
  17. },
  18. clear: function() {
  19. this._heap.clear();
  20. this.size = 0;
  21. },
  22. enqueue: function(item) {
  23. this._heap.add(item);
  24. this.size++;
  25. return this.size;
  26. },
  27. dequeue: function() {
  28. var item = this._heap.poll();
  29. if (item) {
  30. this.size--;
  31. return item;
  32. }
  33. },
  34. peek: function() {
  35. return this._heap.peek();
  36. }
  37. });
  38. module.exports = exports;