Class: Tdms::AggregateChannelEnumerator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/tdms/aggregate.rb

Instance Method Summary collapse

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

#eachObject



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

#sizeObject



39
40
41
# File 'lib/tdms/aggregate.rb', line 39

def size
  @size ||= @channels.inject(0) { |sum, chan| sum += chan.values.size }
end