Class: Tdms::AggregateChannelEnumerator
- Inherits:
-
Object
- Object
- Tdms::AggregateChannelEnumerator
- Includes:
- Enumerable
- Defined in:
- lib/tdms/aggregate.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.
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/tdms/aggregate.rb', line 28 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
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/tdms/aggregate.rb', line 49 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
43 44 45 46 47 |
# File 'lib/tdms/aggregate.rb', line 43 def each @channels.each do |channel| channel.values.each { |value| yield value } end end |
#size ⇒ Object
39 40 41 |
# File 'lib/tdms/aggregate.rb', line 39 def size @size ||= @channels.inject(0) { |sum, chan| sum += chan.values.size } end |