class DoubleLinkedList

Constants

VERSION

Attributes

head[RW]
last[RW]

Public Class Methods

from_a(*ary) click to toggle source
# File lib/double_linked_list.rb, line 30
def from_a(*ary)
  elems = ary.flatten
  head = Element.new(elems.first)
  last = elems.drop(1).reduce(head) do |cur_last, datum|
    cur_last.append(datum)
  end
  new(head).tap do |o|
    o.last = last
  end
end
new(datum) click to toggle source
# File lib/double_linked_list.rb, line 25
def initialize(datum)
  @head = (datum.is_a?(Element) ? datum : Element.new(datum))
end

Public Instance Methods

<<(datum)
Alias for: append
append(datum) click to toggle source
# File lib/double_linked_list.rb, line 42
def append(datum)
  self.last = last.append(datum)
end
Also aliased as: <<
chunk_by(custom_dll = DoubleLinkedList, &block) click to toggle source
# File lib/double_linked_list.rb, line 67
def chunk_by(custom_dll = DoubleLinkedList, &block)
  head.chunk_by([], custom_dll, &block)
end
find(datum) click to toggle source
# File lib/double_linked_list.rb, line 47
def find(datum)
  find_by do |elem|
    elem.datum == datum
  end
end
find_by(&block) click to toggle source
# File lib/double_linked_list.rb, line 53
def find_by(&block)
  head.find_next_by(false, &block)
end
reverse_find(datum) click to toggle source
# File lib/double_linked_list.rb, line 57
def reverse_find(datum)
  reverse_find_by do |elem|
    elem.datum == datum
  end
end
reverse_find_by(&block) click to toggle source
# File lib/double_linked_list.rb, line 63
def reverse_find_by(&block)
  last.find_previous_by(false, &block)
end
select_by(&block) click to toggle source
# File lib/double_linked_list.rb, line 71
def select_by(&block)
  head.select_by(&block)
end
to_a() click to toggle source
# File lib/double_linked_list.rb, line 75
def to_a
  [].tap do |ary|
    each{ |elem| ary << elem.datum }
  end
end