class Algorithmix::DataStructure::Generic::Queue

Public Class Methods

new(obj = nil, copy: false) click to toggle source

Creates a new queue.

@param obj [#to_a] Any objects which responds to to_a method @kwarg copy [true, false] If is set to true, will duplicate the given object. By default is set to false. @return [Queue] a newly create queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 14
def initialize(obj = nil, copy: false)
  @container = []
  obj.nil? ? nil : from_obj(obj, copy)
end

Public Instance Methods

!=(queue) click to toggle source

Compares contents of the self object and that given as argument.

@param queue [Queue] @return [true, false] @raise ArgumentError, if given object is not a queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 92
def !=(queue)
  raise ArgumentError, "Undefined method Queue#!= for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container != queue.to_a
end
&(queue) click to toggle source

Finds the intersection of the self object and queue given as argument.

@param queue [Queue] @return [Queue] a new queue @raise ArgumentError, if given object is not a queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 178
def &(queue)
  raise ArgumentError, "Undefined method Queue#& for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  Queue.new(@container & queue.to_a)
end
+(queue) click to toggle source

Concatenates contents of two queues.

@param queue [Queue] @return [Queue] a new queue object

# File lib/algorithmix/data_structure/generic/queue.rb, line 119
def +(queue)
  raise ArgumentError, "Undefined method Queue#+ for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  Queue.new(@container + queue.to_a)
end
-(queue) click to toggle source

Finds the difference of the current queue and queue given as argument.

@param queue [Queue] @return [Queue] a new queue @raise ArgumentError, if given object is not a queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 201
def -(queue)
  raise ArgumentError, "Undefined method Queue#- for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  Queue.new(@container - queue.to_a)
end
<<(value) click to toggle source

(see push)

# File lib/algorithmix/data_structure/generic/queue.rb, line 38
def <<(value)
  push(value)
end
<=>(queue) click to toggle source

Compares contents of the self object and that given as argument.

@param queue [Queue] @return 1, if content of the first queue is greater than content of the second

0, if contents of both queues are equal
-1, if content of the second queue is greater than content of the first

@raise ArgumentError, if given object is not a queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 110
def <=>(queue)
  raise ArgumentError, "Undefined method Queue#<=> for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container <=> queue.to_a
end
==(queue) click to toggle source

Compares contents of the self object and that given as argument.

@param queue [Queue] @return [true, false] @raise ArgumentError, if given object is not a queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 76
def ==(queue)
  raise ArgumentError, "Undefined method Queue#== for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container == queue.to_a
end
^(queue) click to toggle source

Finds the symmetric difference of the self object and queue given as argument.

@param queue [Queue] @return [Queue] a new queue @raise ArgumentError, if given object is not a queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 224
def ^(queue)
  raise ArgumentError, "Undefined method Queue#^ for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  Queue.new((@container | queue.to_a) - (@container & queue.to_a))
end
apply(&block) click to toggle source

(see map)

# File lib/algorithmix/data_structure/generic/queue.rb, line 301
def apply(&block)
  map(&block)
end
apply!(&block) click to toggle source

(see map!)

# File lib/algorithmix/data_structure/generic/queue.rb, line 306
def apply!(&block)
  map!(&block)
end
assign(obj, copy: false) click to toggle source

Assigns content of an object, to stack's content, removing previous elements.

@param obj [#to_a] Any object which responds to to_a method. @kwarg copy [true, false] If is set to true, will duplicate the given object. By default is set to false. @return self object [Queue]

# File lib/algorithmix/data_structure/generic/queue.rb, line 24
def assign(obj, copy: false)
  from_obj(obj, copy)
end
clear() click to toggle source

Clears content of the queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 247
def clear
  @container = []
  self
end
concat(queue) click to toggle source

(see +)

# File lib/algorithmix/data_structure/generic/queue.rb, line 125
def concat(queue)
  raise ArgumentError, "Undefined method Queue#concat for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self + queue
end
concat!(queue) click to toggle source

Same as +, but modifies the current object

# File lib/algorithmix/data_structure/generic/queue.rb, line 137
def concat!(queue)
  raise ArgumentError, "Undefined method Queue#concat! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container += queue.to_a
  self
end
diff?(queue) click to toggle source

(see #!=)

# File lib/algorithmix/data_structure/generic/queue.rb, line 98
def diff?(queue)
  raise ArgumentError, "Undefined method Queue#diff? for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self != queue
end
difference(queue) click to toggle source

(see -)

# File lib/algorithmix/data_structure/generic/queue.rb, line 207
def difference(queue)
  raise ArgumentError, "Undefined method Queue#difference for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self - queue
end
difference!(queue) click to toggle source

Same as -, but modifies the current queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 213
def difference!(queue)
  raise ArgumentError, "Undefined method Queue#difference! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container -= queue.to_a
  self
end
empty?() click to toggle source

Checks if the queue is empty.

# File lib/algorithmix/data_structure/generic/queue.rb, line 67
def empty?
  @container.empty?
end
eql?(queue) click to toggle source

(see #==)

# File lib/algorithmix/data_structure/generic/queue.rb, line 82
def eql?(queue)
  raise ArgumentError, "Undefined method Queue#eql? for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self == queue
end
filter(&block) click to toggle source

(see select)

# File lib/algorithmix/data_structure/generic/queue.rb, line 267
def filter(&block)
  select(&block)
end
filter!(&block) click to toggle source

(see select!)

# File lib/algorithmix/data_structure/generic/queue.rb, line 272
def filter!(&block)
  select!(&block)
end
find_all(&block) click to toggle source

(see select)

# File lib/algorithmix/data_structure/generic/queue.rb, line 277
def find_all(&block)
  select(&block)
end
find_all!(&block) click to toggle source

(see select!)

# File lib/algorithmix/data_structure/generic/queue.rb, line 282
def find_all!(&block)
  select!(&block)
end
front() click to toggle source

Returns the front element of the queue, or nil if it's empty.

# File lib/algorithmix/data_structure/generic/queue.rb, line 52
def front
  @container.first
end
intersect(queue) click to toggle source

(see #&)

# File lib/algorithmix/data_structure/generic/queue.rb, line 184
def intersect(queue)
  raise ArgumentError, "Undefined method Queue#intersect for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self & queue
end
intersect!(queue) click to toggle source

Same as #&, but modifies the current object.

# File lib/algorithmix/data_structure/generic/queue.rb, line 190
def intersect!(queue)
  raise ArgumentError, "Undefined method Queue#intersect! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container &= queue.to_a
  self
end
length() click to toggle source

(see size)

# File lib/algorithmix/data_structure/generic/queue.rb, line 62
def length
  @container.size
end
map(&block) click to toggle source

Applies a function to each element of the queue.

@param &block @return [Queue] a new queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 290
def map(&block)
  Queue.new(@container.map { |e| block.call(e)})
end
map!(&block) click to toggle source

Same as map, but modifies the current object.

# File lib/algorithmix/data_structure/generic/queue.rb, line 295
def map!(&block)
  @container.map! { |e| block.call(e) }
  self
end
merge(queue) click to toggle source

(see +)

# File lib/algorithmix/data_structure/generic/queue.rb, line 131
def merge(queue)
  raise ArgumentError, "Undefined method Queue#merge for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self + queue
end
merge!(queue) click to toggle source

Same as +, but modifies the current object

# File lib/algorithmix/data_structure/generic/queue.rb, line 144
def merge!(queue)
  raise ArgumentError, "Undefined method Queue#merge! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container += queue.to_a
  self
end
pop() click to toggle source

Removes the front element of the queue.

@return front element @raise Algorithmix::EmptyContainerError if the queue is empty.

# File lib/algorithmix/data_structure/generic/queue.rb, line 46
def pop
  raise EmptyContainerError, "The queue is empty." if @container.empty?
  @container.shift
end
push(value) click to toggle source

Inserts a value at the end of the queue.

@param value @return [Queue] self object

# File lib/algorithmix/data_structure/generic/queue.rb, line 32
def push(value)
  @container << value
  self
end
select(&block) click to toggle source

Filters elements of the queue by given condition.

@param &block @return [Queue] a new queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 256
def select(&block)
  Queue.new(@container.select { |e| block.call(e) })
end
select!(&block) click to toggle source

Same as select, but modofies the current object.

# File lib/algorithmix/data_structure/generic/queue.rb, line 261
def select!(&block)
  @container.select! { |e| block.call(e) }
  self
end
size() click to toggle source

Returns number of elements in the queue.

# File lib/algorithmix/data_structure/generic/queue.rb, line 57
def size
  @container.size
end
symmetric_difference(queue) click to toggle source

(see #^)

# File lib/algorithmix/data_structure/generic/queue.rb, line 230
def symmetric_difference(queue)
  raise ArgumentError, "Undefined method Queue#symmetric_difference for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self ^ queue
end
symmetric_difference!(queue) click to toggle source

Same as #^, but modifies the current object.

# File lib/algorithmix/data_structure/generic/queue.rb, line 236
def symmetric_difference!(queue)
  raise ArgumentError, "Undefined method Queue#symmetric_difference! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container = (@container | queue.to_a) - (@container & queue.to_a)
end
to_a() click to toggle source

Converts the queue to an array with elements.

# File lib/algorithmix/data_structure/generic/queue.rb, line 242
def to_a
  @container
end
union(queue) click to toggle source

(see #|)

# File lib/algorithmix/data_structure/generic/queue.rb, line 161
def union(queue)
  raise ArgumentError, "Undefined method Queue#union for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  self | queue
end
union!(queue) click to toggle source

Same as union, but modifies the current object

# File lib/algorithmix/data_structure/generic/queue.rb, line 167
def union!(queue)
  raise ArgumentError, "Undefined method Queue#union! for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  @container |= queue.to_a
  self
end
|(queue) click to toggle source

Unites contents of the self queue and queue given as argument.

@param queue [Queue] @return [Queue] a new queue @raise ArgumentError, if given object is not a queue

# File lib/algorithmix/data_structure/generic/queue.rb, line 155
def |(queue)
  raise ArgumentError, "Undefined method Queue#| for #{queue}:#{queue.class}" unless queue.is_a?(Queue)
  Queue.new(@container | queue.to_a)
end

Private Instance Methods

from_obj(obj, copy) click to toggle source
# File lib/algorithmix/data_structure/generic/queue.rb, line 312
def from_obj(obj, copy)
  raise ArgumentError, "Object doesn't respond to #to_a method" unless obj.respond_to?(:to_a)

  @container = copy ? obj.send(:to_a).dup : obj.send(:to_a)
  self
end