class Algorithmix::DataStructure::Generic::Deque
Public Class Methods
Creates a new deque.
@param obj [#to_a] @kwarg copy [true, false] @return newly created deque @raise ArgumentError, if given obj doesn't respond to to_a
method
# File lib/algorithmix/data_structure/generic/deque.rb, line 15 def initialize(obj = nil, copy: false) @container = [] obj.nil? ? nil : from_obj(obj, copy) end
Public Instance Methods
Compares contents of the deque and a deque given as argument.
@param deque [Deque] @return [true, false] @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 135 def !=(deque) raise ArgumentError, "Undefined method Deque#!= for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container != deque.to_a end
Finds intersection of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 234 def &(deque) raise ArgumentError, "Undefined method Deque#& for #{deque}:#{deque.class}" unless deque.is_a?(Deque) Deque.new(@container & deque.to_a) end
Concatenates contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 163 def +(deque) raise ArgumentError, "Undefined method Deque#+ for #{deque}:#{deque.class}" unless deque.is_a?(Deque) Deque.new(@container + deque.to_a) end
Finds difference of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 261 def -(deque) raise ArgumentError, "Undefined method Deque#- for #{deque}:#{deque.class}" unless deque.is_a?(Deque) Deque.new(@container - deque.to_a) end
(see push_back
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 54 def <<(value) push_back(value) end
Compares contents of the deque and a deque given as argument.
@param deque [Deque] @return 1, if content of the deque is greater than content of the given deque,
0, if contents are equal -1, if content of the second deque is greater than content of self object
@raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 153 def <=>(deque) raise ArgumentError, "Undefined method Deque#<=> for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container <=> deque.to_a end
Compares contents of the deque and a deque given as argument.
@param deque [Deque] @return [true, false] @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 119 def ==(deque) raise ArgumentError, "Undefined method Deque#== for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container == deque.to_a end
(see push_front
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 40 def >>(value) push_front(value) end
Returns the element at given index.
@param idx @return element at given position, or nil if there is no element at that index.
# File lib/algorithmix/data_structure/generic/deque.rb, line 105 def [](idx) @container[idx] end
Finds symmetric difference of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 288 def ^(deque) raise ArgumentError, "Undefined method Deque#^ for #{deque}:#{deque.class}" unless deque.is_a?(Deque) Deque.new((@container | deque.to_a) - (@container & deque.to_a)) end
(see map
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 378 def apply(&block) map(&block) end
(see map!
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 383 def apply!(&block) map!(&block) end
Assigns content of an obj, to content of the deque.
@param obj [#to_a] @kwarg copy [true, false] by default is set to false, which means that no copy of the object will be made @raise ArgumentError, if given object doesn't respond to to_a
method @return self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 26 def assign(obj, copy: false) from_obj(obj, copy) end
(see []
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 110 def at(idx) @container[idx] end
Returns last element of the deque.
# File lib/algorithmix/data_structure/generic/deque.rb, line 82 def back @container.last end
Clears content of the deque.
@return self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 318 def clear @container = [] self end
(see +
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 169 def concat(deque) raise ArgumentError, "Undefined method Deque#concat for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self + deque end
Concatenates contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] self object @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 185 def concat!(deque) raise ArgumentError, "Undefined method Deque#concat! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container += deque.to_a self end
(see #!=)
# File lib/algorithmix/data_structure/generic/deque.rb, line 141 def diff?(deque) raise ArgumentError, "Undefined method Deque#diff? for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self != deque end
(see -
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 267 def difference(deque) raise ArgumentError, "Undefined method Deque#difference for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self - deque end
Finds difference of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 277 def difference!(deque) raise ArgumentError, "Undefined method Deque#difference! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container -= deque.to_a self end
Checks if the deque is empty.
# File lib/algorithmix/data_structure/generic/deque.rb, line 87 def empty? @container.empty? end
(see #==)
# File lib/algorithmix/data_structure/generic/deque.rb, line 125 def eql?(deque) raise ArgumentError, "Undefined method Deque#eql? for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self == deque end
(see select
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 341 def filter(&block) select(&block) end
(see select!
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 346 def filter!(&block) select!(&block) end
(see select
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 351 def find_all(&block) select(&block) end
(see select!
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 356 def find_all!(&block) select!(&block) end
Returns first element of the deque.
# File lib/algorithmix/data_structure/generic/deque.rb, line 77 def front @container.first end
(see #&)
# File lib/algorithmix/data_structure/generic/deque.rb, line 240 def intersect(deque) raise ArgumentError, "Undefined method Deque#intersect for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self & deque end
Finds intersection of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] self object @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 250 def intersect!(deque) raise ArgumentError, "Undefined method Deque#intersect! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container &= deque.to_a self end
(see size
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 97 def length @container.size end
Applies a function to each element of the deque.
@param &block @return [Deque] a new deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 364 def map(&block) Deque.new(@container.map { |e| block.call(e)}) end
Applies a function to each element of the deque.
@param &block @return [Deque] self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 372 def map!(&block) @container.map! { |e| block.call(e)} self end
(see +
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 175 def merge(deque) raise ArgumentError, "Undefined method Deque#merge for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self + deque end
Concatenates contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] self object @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 196 def merge!(deque) raise ArgumentError, "Undefined method Deque#merge! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container += deque.to_a self end
Removes last element of the deque.
@raise Algorithmix::EmptyContainerError, if the deque is empty. @return last element of the deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 71 def pop_back raise EmptyContainerError, "The deque is empty." if @container.empty? @container.pop end
Removes first element of the deque.
@raise Algorithmix::EmptyContainerError, if the deque is empty. @return first element of the deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 62 def pop_front raise EmptyContainerError, "The deque is empty." if @container.empty? @container.shift end
Inserts a new element at the end of the deque.
@param value @return self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 48 def push_back(value) @container << value self end
Inserts a new element at the beginning of the deque.
@param value @return self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 34 def push_front(value) @container.unshift(value) self end
Filters elements of the deque by given condition.
@param &block @return [Deque] a new deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 327 def select(&block) Deque.new( @container.select { |e| block.call(e)}) end
Filters elements of the deque by given condition.
@param &block @return [Deque] self object
# File lib/algorithmix/data_structure/generic/deque.rb, line 335 def select!(&block) @container.select! { |e| block.call(e)} self end
Returns size of the deque.
# File lib/algorithmix/data_structure/generic/deque.rb, line 92 def size @container.size end
(see symmetric_difference
)
# File lib/algorithmix/data_structure/generic/deque.rb, line 294 def symmetric_difference(deque) raise ArgumentError, "Undefined method Deque#symmetric_difference for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self ^ deque end
Finds symmetric difference of contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] self object @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 304 def symmetric_difference!(deque) raise ArgumentError, "Undefined method Deque#symmetric_difference! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container = (@container | deque.to_a) - (@container & deque.to_a) self end
Converts content of the deque to an array witl elements.
# File lib/algorithmix/data_structure/generic/deque.rb, line 311 def to_a @container end
(see #|)
# File lib/algorithmix/data_structure/generic/deque.rb, line 213 def union(deque) raise ArgumentError, "Undefined method Deque#union for #{deque}:#{deque.class}" unless deque.is_a?(Deque) self | deque end
Unites contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] self object @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 223 def union!(deque) raise ArgumentError, "Undefined method Deque#union! for #{deque}:#{deque.class}" unless deque.is_a?(Deque) @container |= deque.to_a self end
Unites contents of the deque and a deque given as argument.
@param deque [Deque] @return [Deque] a new deque @raise ArgumentError, if given object is not a deque
# File lib/algorithmix/data_structure/generic/deque.rb, line 207 def |(deque) raise ArgumentError, "Undefined method Deque#| for #{deque}:#{deque.class}" unless deque.is_a?(Deque) Deque.new(@container | deque.to_a) end
Private Instance Methods
# File lib/algorithmix/data_structure/generic/deque.rb, line 389 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