class PriorityQueue

class PriorityQueue

lib/collections/priority_queue.tya:2

PriorityQueue provides the collections/PriorityQueue standard library API.

Source
# PriorityQueue provides the collections/PriorityQueue standard library API.
class PriorityQueue
  # PriorityQueue.items stores instance state.
  # @type Array
  items: []

  # PriorityQueue.seq stores instance state.
  # @type Int
  seq: 0

  # PriorityQueue.initialize provides the collections/PriorityQueue standard library operation.
  # @param items Array items value.
  # @return Self the initialized object.
  initialize: items = nil ->
    self.items = []
    self.seq = 0
    if items != nil
      i = 0
      while i < items.len()
        priority = items[i][0]
        if priority.class != Number
          raise error("collections.PriorityQueue.from_array: priority must be a number")
        self.items.push([priority, self.seq, items[i][1]])
        self.seq = self.seq + 1
        i = i + 1

  # PriorityQueue.best_index provides the collections/PriorityQueue standard library operation.
  # @return Int the resulting value.
  best_index: ->
    best = 0
    i = 1
    while i < self.items.len()
      a = self.items[i]
      b = self.items[best]
      if a[0] < b[0] or a[0] == b[0] and a[1] < b[1]
        best = i
      i = i + 1
    best

  # PriorityQueue.clear provides the collections/PriorityQueue standard library operation.
  # @return Nil the resulting value.
  clear: ->
    self.items = []
    self

  # PriorityQueue.empty? provides the collections/PriorityQueue standard library operation.
  # @return Boolean whether the condition is true.
  empty?: ->
    self.items.empty?()

  # PriorityQueue.from_array provides the collections/PriorityQueue standard library operation.
  # @param items Array items value.
  # @return Array the resulting value.
  from_array: items ->
    PriorityQueue(items)

  # PriorityQueue.len provides the collections/PriorityQueue standard library operation.
  # @return Int the resulting value.
  len: ->
    self.items.len()

  # PriorityQueue.new provides the collections/PriorityQueue standard library operation.
  # @return Self the resulting value.
  new: ->
    PriorityQueue(nil)

  # PriorityQueue.peek provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  peek: ->
    if self.empty?()
      raise error("collections.PriorityQueue.peek: empty priority queue")
    self.items[self.best_index()][2]

  # PriorityQueue.peek_priority provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  peek_priority: ->
    if self.empty?()
      raise error("collections.PriorityQueue.peek_priority: empty priority queue")
    self.items[self.best_index()][0]

  # PriorityQueue.pop provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  pop: ->
    if self.empty?()
      raise error("collections.PriorityQueue.pop: empty priority queue")
    index = self.best_index()
    entry = self.items[index]
    self.remove_at(index)
    entry[2]

  # PriorityQueue.push provides the collections/PriorityQueue standard library operation.
  # @param value String value value.
  # @param priority Int priority value.
  # @return Any the resulting value.
  push: value, priority ->
    if priority.class != Number
      raise error("collections.PriorityQueue.push: priority must be a number")
    self.items.push([priority, self.seq, value])
    self.seq = self.seq + 1
    self

  # PriorityQueue.remove_at provides the collections/PriorityQueue standard library operation.
  # @param index Int index value.
  # @return Any the resulting value.
  remove_at: index ->
    next = []
    i = 0
    while i < self.items.len()
      if i != index
        next.push(self.items[i])
      i = i + 1
    self.items = next

  # PriorityQueue.to_array provides the collections/PriorityQueue standard library operation.
  # @return Array the resulting value.
  to_array: ->
    clone = PriorityQueue(nil)
    i = 0
    while i < self.items.len()
      clone.items.push(self.items[i])
      i = i + 1
    out = []
    while not clone.empty?()
      idx = clone.best_index()
      entry = clone.items[idx]
      out.push([entry[0], entry[2]])
      clone.remove_at(idx)
    out

Instance Variables

items

PriorityQueue.items

lib/collections/priority_queue.tya:5

PriorityQueue.items stores instance state.

Source
  # PriorityQueue.items stores instance state.
  # @type Array
  items: []

seq

PriorityQueue.seq

lib/collections/priority_queue.tya:9

PriorityQueue.seq stores instance state.

Source
  # PriorityQueue.seq stores instance state.
  # @type Int
  seq: 0

Methods

best_index

PriorityQueue.best_index()

lib/collections/priority_queue.tya:29

PriorityQueue.best_index provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.best_index provides the collections/PriorityQueue standard library operation.
  # @return Int the resulting value.
  best_index: ->
    best = 0
    i = 1
    while i < self.items.len()
      a = self.items[i]
      b = self.items[best]
      if a[0] < b[0] or a[0] == b[0] and a[1] < b[1]
        best = i
      i = i + 1
    best

clear

PriorityQueue.clear()

lib/collections/priority_queue.tya:42

PriorityQueue.clear provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.clear provides the collections/PriorityQueue standard library operation.
  # @return Nil the resulting value.
  clear: ->
    self.items = []
    self

empty?

PriorityQueue.empty?()

lib/collections/priority_queue.tya:48

PriorityQueue.empty? provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.empty? provides the collections/PriorityQueue standard library operation.
  # @return Boolean whether the condition is true.
  empty?: ->
    self.items.empty?()

from_array

PriorityQueue.from_array(items)

lib/collections/priority_queue.tya:54

PriorityQueue.from_array provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.from_array provides the collections/PriorityQueue standard library operation.
  # @param items Array items value.
  # @return Array the resulting value.
  from_array: items ->
    PriorityQueue(items)

initialize

PriorityQueue.initialize(items = nil)

lib/collections/priority_queue.tya:14

PriorityQueue.initialize provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.initialize provides the collections/PriorityQueue standard library operation.
  # @param items Array items value.
  # @return Self the initialized object.
  initialize: items = nil ->
    self.items = []
    self.seq = 0
    if items != nil
      i = 0
      while i < items.len()
        priority = items[i][0]
        if priority.class != Number
          raise error("collections.PriorityQueue.from_array: priority must be a number")
        self.items.push([priority, self.seq, items[i][1]])
        self.seq = self.seq + 1
        i = i + 1

len

PriorityQueue.len()

lib/collections/priority_queue.tya:59

PriorityQueue.len provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.len provides the collections/PriorityQueue standard library operation.
  # @return Int the resulting value.
  len: ->
    self.items.len()

new

PriorityQueue.new()

lib/collections/priority_queue.tya:64

PriorityQueue.new provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.new provides the collections/PriorityQueue standard library operation.
  # @return Self the resulting value.
  new: ->
    PriorityQueue(nil)

peek

PriorityQueue.peek()

lib/collections/priority_queue.tya:69

PriorityQueue.peek provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.peek provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  peek: ->
    if self.empty?()
      raise error("collections.PriorityQueue.peek: empty priority queue")
    self.items[self.best_index()][2]

peek_priority

PriorityQueue.peek_priority()

lib/collections/priority_queue.tya:76

PriorityQueue.peek_priority provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.peek_priority provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  peek_priority: ->
    if self.empty?()
      raise error("collections.PriorityQueue.peek_priority: empty priority queue")
    self.items[self.best_index()][0]

pop

PriorityQueue.pop()

lib/collections/priority_queue.tya:83

PriorityQueue.pop provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.pop provides the collections/PriorityQueue standard library operation.
  # @return Any the resulting value.
  pop: ->
    if self.empty?()
      raise error("collections.PriorityQueue.pop: empty priority queue")
    index = self.best_index()
    entry = self.items[index]
    self.remove_at(index)
    entry[2]

push

PriorityQueue.push(value, priority)

lib/collections/priority_queue.tya:95

PriorityQueue.push provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.push provides the collections/PriorityQueue standard library operation.
  # @param value String value value.
  # @param priority Int priority value.
  # @return Any the resulting value.
  push: value, priority ->
    if priority.class != Number
      raise error("collections.PriorityQueue.push: priority must be a number")
    self.items.push([priority, self.seq, value])
    self.seq = self.seq + 1
    self

remove_at

PriorityQueue.remove_at(index)

lib/collections/priority_queue.tya:105

PriorityQueue.remove_at provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.remove_at provides the collections/PriorityQueue standard library operation.
  # @param index Int index value.
  # @return Any the resulting value.
  remove_at: index ->
    next = []
    i = 0
    while i < self.items.len()
      if i != index
        next.push(self.items[i])
      i = i + 1
    self.items = next

to_array

PriorityQueue.to_array()

lib/collections/priority_queue.tya:116

PriorityQueue.to_array provides the collections/PriorityQueue standard library operation.

Source
  # PriorityQueue.to_array provides the collections/PriorityQueue standard library operation.
  # @return Array the resulting value.
  to_array: ->
    clone = PriorityQueue(nil)
    i = 0
    while i < self.items.len()
      clone.items.push(self.items[i])
      i = i + 1
    out = []
    while not clone.empty?()
      idx = clone.best_index()
      entry = clone.items[idx]
      out.push([entry[0], entry[2]])
      clone.remove_at(idx)
    out