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