Class: RubyTDMS::AggregateChannelEnumerator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/ruby_tdms/aggregate_channel_enumerator.rb

Instance Method Summary collapse

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

#eachObject



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

#sizeObject



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