Class: Ms::Data::Interleaved
- Defined in:
- lib/ms/data/interleaved.rb
Overview
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]]
Instance Attribute Summary collapse
-
#n ⇒ Object
readonly
Returns the value of attribute n.
Attributes inherited from Simple
Instance Method Summary collapse
- #[](index) ⇒ Object
-
#initialize(unresolved_data, n = 2) ⇒ Interleaved
constructor
A new instance of Interleaved.
- #resolve ⇒ Object
- #resolved? ⇒ Boolean
Constructor Details
#initialize(unresolved_data, n = 2) ⇒ Interleaved
Returns a new instance of Interleaved.
26 27 28 29 |
# File 'lib/ms/data/interleaved.rb', line 26 def initialize(unresolved_data, n=2) @n = 2 super(unresolved_data) end |
Instance Attribute Details
#n ⇒ Object (readonly)
Returns the value of attribute n.
24 25 26 |
# File 'lib/ms/data/interleaved.rb', line 24 def n @n end |
Instance Method Details
#[](index) ⇒ Object
31 32 33 |
# File 'lib/ms/data/interleaved.rb', line 31 def [](index) resolve.data[index] end |
#resolve ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# 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? ⇒ Boolean
35 36 37 |
# File 'lib/ms/data/interleaved.rb', line 35 def resolved? !@data.empty? end |