class Generics::List

Public Class Methods

[](type) click to toggle source

@param [Class, Module] type @return [Class]

# File lib/generics/collections/list.rb, line 14
def self.[](type)
  Class.new(self).tap do |klass|
    klass.instance_variable_set('@type', type)
    klass.define_singleton_method(:name) { klass.superclass.name }
  end
end
new(*collection) click to toggle source

@param [Class, Module] type

# File lib/generics/collections/list.rb, line 112
def initialize(*collection)
  collection.each { |value| compatible!(value) }
  @collection = ::Hamster::Vector.new(collection)
end
type() click to toggle source
# File lib/generics/collections/list.rb, line 21
def self.type
  @type
end

Public Instance Methods

[](index) click to toggle source

Enumerable

# File lib/generics/collections/list.rb, line 46
def [](index)
  @collection[index]
end
add(value) click to toggle source

Destructive

# File lib/generics/collections/list.rb, line 137
def add(value)
  compatible!(value)
  self.class.new(*@collection.add(value))
end
clone() click to toggle source

Preserves frozen state and does copies singleton state @return [List]

# File lib/generics/collections/list.rb, line 125
def clone
  self.class.new(*@collection.clone)
end
compatible!(value) click to toggle source
# File lib/generics/collections/list.rb, line 29
def compatible!(value)
  fail NotSameType unless value.is_a?(self.class.type)
  true
end
compatible?(value) click to toggle source
# File lib/generics/collections/list.rb, line 25
def compatible?(value)
  value.is_a?(self.class.type)
end
delete(value) click to toggle source
# File lib/generics/collections/list.rb, line 152
def delete(value)
  compatible!(value)
  self.class.new(*@collection.delete(value))
end
delete_at(index) click to toggle source

Methods that returns self

# File lib/generics/collections/list.rb, line 97
def delete_at(index)
  self.class.new(*@collection.delete_at(index))
end
dup() click to toggle source

Does not preserve frozen state and does not copy singleton state @return [List]

# File lib/generics/collections/list.rb, line 119
def dup
  self.class.new(*@collection.dup)
end
each() { |item| ... } click to toggle source
# File lib/generics/collections/list.rb, line 50
def each
  @collection.each { |item| yield item }
  return self
end
empty?() click to toggle source
# File lib/generics/collections/list.rb, line 71
def empty?
  @collection.empty?
end
insert(index, *values) click to toggle source
# File lib/generics/collections/list.rb, line 147
def insert(index, *values)
  values.each { |value| compatible!(value) }
  self.class.new(*@collection.insert(index, *values))
end
inspect() click to toggle source

Object

# File lib/generics/collections/list.rb, line 36
def inspect
  "#<#{self.class.name}[#{self.class.type}]: #{to_s}>"
end
last() click to toggle source
# File lib/generics/collections/list.rb, line 75
def last
  @collection.last
end
length() click to toggle source
# File lib/generics/collections/list.rb, line 67
def length
  @collection.length
end
map() click to toggle source
Calls superclass method
# File lib/generics/collections/list.rb, line 55
def map
  self.class.new(super)
end
pop() click to toggle source
# File lib/generics/collections/list.rb, line 79
def pop
  @collection.pop
end
qdup() click to toggle source

Quick dup; does not duplicate, just relies on immutability @return [List]

# File lib/generics/collections/list.rb, line 131
def qdup
  self.class.new(*@collection)
end
reverse() click to toggle source
# File lib/generics/collections/list.rb, line 83
def reverse
  @collection.reverse
end
sample() click to toggle source
# File lib/generics/collections/list.rb, line 87
def sample
  @collection.sample
end
set(index, value, &block) click to toggle source
# File lib/generics/collections/list.rb, line 142
def set(index, value, &block)
  compatible!(value)
  self.class.new(*@collection.set(index, value, &block))
end
shift() click to toggle source
# File lib/generics/collections/list.rb, line 101
def shift
  self.class.new(*@collection.shift)
end
size() click to toggle source

Getters

# File lib/generics/collections/list.rb, line 63
def size
  @collection.size
end
slice(*args) click to toggle source
# File lib/generics/collections/list.rb, line 91
def slice(*args)
  @collection.slice(*args)
end
to_s() click to toggle source
# File lib/generics/collections/list.rb, line 40
def to_s
  @collection.to_a.to_s
end
uniq(&block) click to toggle source
# File lib/generics/collections/list.rb, line 105
def uniq(&block)
  self.class.new(*@collection.uniq(&block))
end
unshift(value) click to toggle source
# File lib/generics/collections/list.rb, line 161
def unshift(value)
  compatible!(value)
  self.class.new(*@collection.unshift(value))
end