Class: Algorithmix::DataStructure::Generic::Deque

Inherits:
Object
  • Object
show all
Defined in:
lib/algorithmix/data_structure/generic/deque.rb

Instance Method Summary collapse

Constructor Details

#initialize(obj = nil, copy: false) ⇒ Object

Creates a new deque.

Parameters:

  • obj (#to_a) (defaults to: nil)

Raises:

  • ArgumentError, if given obj doesn’t respond to #to_a method



15
16
17
18
# 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

Instance Method Details

#!=(deque) ⇒ true, false

Compares contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (true, false)

Raises:

  • ArgumentError, if given object is not a deque



135
136
137
138
# 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

#&(deque) ⇒ Deque

Finds intersection of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



234
235
236
237
# 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

#+(deque) ⇒ Deque

Concatenates contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



163
164
165
166
# 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

#-(deque) ⇒ Deque

Finds difference of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



261
262
263
264
# 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

#<<(value) ⇒ Object

Inserts a new element at the end of the deque.

Parameters:

  • value

Returns:

  • self object



54
55
56
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 54

def <<(value)
  push_back(value)
end

#<=>(deque) ⇒ Object

Compares contents of the deque and a deque given as argument.

Parameters:

Returns:

  • 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

Raises:

  • ArgumentError, if given object is not a deque



153
154
155
156
# 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

#==(deque) ⇒ true, false

Compares contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (true, false)

Raises:

  • ArgumentError, if given object is not a deque



119
120
121
122
# 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

#>>(value) ⇒ Object

Inserts a new element at the beginning of the deque.

Parameters:

  • value

Returns:

  • self object



40
41
42
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 40

def >>(value)
  push_front(value)
end

#[](idx) ⇒ Object

Returns the element at given index.

Parameters:

  • idx

Returns:

  • element at given position, or nil if there is no element at that index.



105
106
107
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 105

def [](idx)
  @container[idx]
end

#^(deque) ⇒ Deque

Finds symmetric difference of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



288
289
290
291
# 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

#apply(&block) ⇒ Deque

Applies a function to each element of the deque.

Parameters:

  • &block

Returns:

  • (Deque)

    a new deque



378
379
380
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 378

def apply(&block)
  map(&block)
end

#apply!(&block) ⇒ Deque

Applies a function to each element of the deque.

Parameters:

  • &block

Returns:

  • (Deque)

    self object



383
384
385
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 383

def apply!(&block)
  map!(&block)
end

#assign(obj, copy: false) ⇒ Object

Assigns content of an obj, to content of the deque.

Parameters:

Returns:

  • self object

Raises:

  • ArgumentError, if given object doesn’t respond to #to_a method



26
27
28
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 26

def assign(obj, copy: false)
  from_obj(obj, copy)
end

#at(idx) ⇒ Object

Returns the element at given index.

Parameters:

  • idx

Returns:

  • element at given position, or nil if there is no element at that index.



110
111
112
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 110

def at(idx)
  @container[idx]
end

#backObject

Returns last element of the deque.



82
83
84
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 82

def back
  @container.last
end

#clearObject

Clears content of the deque.

Returns:

  • self object



318
319
320
321
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 318

def clear
  @container = []
  self
end

#concat(deque) ⇒ Deque

Concatenates contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



169
170
171
172
# 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

#concat!(deque) ⇒ Deque

Concatenates contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    self object

Raises:

  • ArgumentError, if given object is not a deque



185
186
187
188
189
# 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

#diff?(deque) ⇒ true, false

Compares contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (true, false)

Raises:

  • ArgumentError, if given object is not a deque



141
142
143
144
# 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

#difference(deque) ⇒ Deque

Finds difference of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



267
268
269
270
# 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

#difference!(deque) ⇒ Deque

Finds difference of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



277
278
279
280
281
# 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

#empty?Boolean

Checks if the deque is empty.

Returns:

  • (Boolean)


87
88
89
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 87

def empty?
  @container.empty?
end

#eql?(deque) ⇒ true, false

Compares contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (true, false)

Raises:

  • ArgumentError, if given object is not a deque



125
126
127
128
# 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

#filter(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    a new deque



341
342
343
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 341

def filter(&block)
  select(&block)
end

#filter!(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    self object



346
347
348
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 346

def filter!(&block)
  select!(&block)
end

#find_all(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    a new deque



351
352
353
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 351

def find_all(&block)
  select(&block)
end

#find_all!(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    self object



356
357
358
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 356

def find_all!(&block)
  select!(&block)
end

#frontObject

Returns first element of the deque.



77
78
79
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 77

def front
  @container.first
end

#intersect(deque) ⇒ Deque

Finds intersection of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



240
241
242
243
# 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

#intersect!(deque) ⇒ Deque

Finds intersection of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    self object

Raises:

  • ArgumentError, if given object is not a deque



250
251
252
253
254
# 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

#lengthObject

Returns size of the deque.



97
98
99
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 97

def length
  @container.size
end

#map(&block) ⇒ Deque

Applies a function to each element of the deque.

Parameters:

  • &block

Returns:

  • (Deque)

    a new deque



364
365
366
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 364

def map(&block)
  Deque.new(@container.map { |e| block.call(e)})
end

#map!(&block) ⇒ Deque

Applies a function to each element of the deque.

Parameters:

  • &block

Returns:

  • (Deque)

    self object



372
373
374
375
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 372

def map!(&block)
  @container.map! { |e| block.call(e)}
  self
end

#merge(deque) ⇒ Deque

Concatenates contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



175
176
177
178
# 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

#merge!(deque) ⇒ Deque

Concatenates contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    self object

Raises:

  • ArgumentError, if given object is not a deque



196
197
198
199
200
# 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

#pop_backObject

Removes last element of the deque.

Returns:

  • last element of the deque

Raises:

  • Algorithmix::EmptyContainerError, if the deque is empty.



71
72
73
74
# 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

#pop_frontObject

Removes first element of the deque.

Returns:

  • first element of the deque

Raises:

  • Algorithmix::EmptyContainerError, if the deque is empty.



62
63
64
65
# 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

#push_back(value) ⇒ Object

Inserts a new element at the end of the deque.

Parameters:

  • value

Returns:

  • self object



48
49
50
51
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 48

def push_back(value)
  @container << value
  self
end

#push_front(value) ⇒ Object

Inserts a new element at the beginning of the deque.

Parameters:

  • value

Returns:

  • self object



34
35
36
37
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 34

def push_front(value)
  @container.unshift(value)
  self
end

#select(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    a new deque



327
328
329
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 327

def select(&block)
  Deque.new( @container.select { |e| block.call(e)})
end

#select!(&block) ⇒ Deque

Filters elements of the deque by given condition.

Parameters:

  • &block

Returns:

  • (Deque)

    self object



335
336
337
338
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 335

def select!(&block)
  @container.select! { |e| block.call(e)}
  self
end

#sizeObject

Returns size of the deque.



92
93
94
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 92

def size
  @container.size
end

#symmetric_difference(deque) ⇒ Object

Raises:

  • (ArgumentError)


294
295
296
297
# 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

#symmetric_difference!(deque) ⇒ Deque

Finds symmetric difference of contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    self object

Raises:

  • ArgumentError, if given object is not a deque



304
305
306
307
308
# 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

#to_aObject

Converts content of the deque to an array witl elements.



311
312
313
# File 'lib/algorithmix/data_structure/generic/deque.rb', line 311

def to_a
  @container
end

#union(deque) ⇒ Deque

Unites contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



213
214
215
216
# 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

#union!(deque) ⇒ Deque

Unites contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    self object

Raises:

  • ArgumentError, if given object is not a deque



223
224
225
226
227
# 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

#|(deque) ⇒ Deque

Unites contents of the deque and a deque given as argument.

Parameters:

Returns:

  • (Deque)

    a new deque

Raises:

  • ArgumentError, if given object is not a deque



207
208
209
210
# 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