class Algorithmix::DataStructure::Generic::Queue
Public Class Methods
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
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
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
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
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
(see push
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 38 def <<(value) push(value) end
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
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
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
(see map
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 301 def apply(&block) map(&block) end
(see map!
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 306 def apply!(&block) map!(&block) end
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
Clears content of the queue.
# File lib/algorithmix/data_structure/generic/queue.rb, line 247 def clear @container = [] self end
(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
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
(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
(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
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
Checks if the queue is empty.
# File lib/algorithmix/data_structure/generic/queue.rb, line 67 def empty? @container.empty? end
(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
(see select
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 267 def filter(&block) select(&block) end
(see select!
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 272 def filter!(&block) select!(&block) end
(see select
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 277 def find_all(&block) select(&block) end
(see select!
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 282 def find_all!(&block) select!(&block) end
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
(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
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
(see size
)
# File lib/algorithmix/data_structure/generic/queue.rb, line 62 def length @container.size end
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
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
(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
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
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
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
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
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
Returns number of elements in the queue.
# File lib/algorithmix/data_structure/generic/queue.rb, line 57 def size @container.size end
(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
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
Converts the queue to an array with elements.
# File lib/algorithmix/data_structure/generic/queue.rb, line 242 def to_a @container end
(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
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
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
# 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