Class: RubyTDMS::StringChannelEnumerator

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

Instance Method Summary collapse

Constructor Details

#initialize(channel) ⇒ StringChannelEnumerator

Returns a new instance of StringChannelEnumerator.



6
7
8
9
10
11
# File 'lib/ruby_tdms/string_channel_enumerator.rb', line 6

def initialize(channel)
  @channel = channel

  @index_offset = @channel.raw_data_offset
  @data_offset = @index_offset + (4 * @channel.value_count)
end

Instance Method Details

#[](i) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/ruby_tdms/string_channel_enumerator.rb', line 38

def [](i)
  if (i < 0) || (i >= size)
    raise RangeError, 'Channel %s has a range of 0 to %d, got invalid index: %d' % [@channel.path, size - 1, i]
  end

  inject(0) do |j, value|
    return value if j == i
    j += 1
  end
end

#eachObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/ruby_tdms/string_channel_enumerator.rb', line 19

def each
  data_pos = @data_offset

  0.upto(size - 1) do |i|
    index_pos = @index_offset + (4 * i)

    @channel.stream.seek index_pos
    next_data_pos = @data_offset + @channel.stream.read_u32

    length = next_data_pos - data_pos

    @channel.stream.seek data_pos
    yield @channel.stream.read(length)

    data_pos = next_data_pos
  end
end

#sizeObject



14
15
16
# File 'lib/ruby_tdms/string_channel_enumerator.rb', line 14

def size
  @size ||= @channel.value_count
end