class Ms::Data::Interleaved

An Interleaved data array lazily evaluates it’s unresolved data as an interleaved array of n members. The unresolved data is evaluated into an array using to_a.

i = Ms::Data::Interleaved.new([1,4,2,5,3,6])
i.unresolved_data    # => [1,4,2,5,3,6]
i.data               # => []
i[0]                 # => [1,2,3]
i[1]                 # => [4,5,6]
i.data               # => [[1,2,3], [4,5,6]]

Attributes

n[R]

Public Class Methods

new(unresolved_data, n=2) click to toggle source
Calls superclass method
# File lib/ms/data/interleaved.rb, line 26
def initialize(unresolved_data, n=2)
  @n = 2
  super(unresolved_data)
end

Public Instance Methods

[](index) click to toggle source
# File lib/ms/data/interleaved.rb, line 31
def [](index)
  resolve.data[index]
end
resolve() click to toggle source
# File lib/ms/data/interleaved.rb, line 39
def resolve
  return(self) if resolved?
  
  unresolved_data = @unresolved_data.to_a
  
  unless unresolved_data.length % n == 0
    raise ArgumentError, "interleaved data must have a number of elements evenly divisible by n (#{n})"
  end
  
  n.times { @data << [] }
  map = @data * (unresolved_data.length/n)
  
  unresolved_data.each_with_index do |item, i|
    map[i] << item
  end

  self
end
resolved?() click to toggle source
# File lib/ms/data/interleaved.rb, line 35
def resolved?
  !@data.empty?
end