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