Class: RubyTDMS::AggregateChannelEnumerator
- Inherits:
-
Object
- Object
- RubyTDMS::AggregateChannelEnumerator
- Includes:
- Enumerable
- Defined in:
- lib/ruby_tdms/aggregate_channel_enumerator.rb
Instance Method Summary collapse
- #[](i) ⇒ Object
- #each ⇒ Object
-
#initialize(channels) ⇒ AggregateChannelEnumerator
constructor
A new instance of AggregateChannelEnumerator.
- #size ⇒ Object
Constructor Details
#initialize(channels) ⇒ AggregateChannelEnumerator
Returns a new instance of AggregateChannelEnumerator.
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/ruby_tdms/aggregate_channel_enumerator.rb', line 6 def initialize(channels) @channels = channels @offsets = [] size = 0 @channels.inject(0) do |size, channel| @offsets << size size += channel.values.size end end |
Instance Method Details
#[](i) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ruby_tdms/aggregate_channel_enumerator.rb', line 30 def [](i) if (i < 0) || (i >= size) raise RangeError, 'Channel %s has a range of 0 to %d, got invalid index: %d' % [@channels[0].path, size - 1, i] end channel, offset = nil, nil j = @offsets.size - 1 @offsets.reverse_each do |o| if i >= o channel = @channels[j] offset = @offsets[j] break else j -= 1 end end channel.values[i - offset] end |
#each ⇒ Object
23 24 25 26 27 |
# File 'lib/ruby_tdms/aggregate_channel_enumerator.rb', line 23 def each @channels.each do |channel| channel.values.each { |value| yield value } end end |
#size ⇒ Object
18 19 20 |
# File 'lib/ruby_tdms/aggregate_channel_enumerator.rb', line 18 def size @size ||= @channels.inject(0) { |sum, chan| sum += chan.values.size } end |