Class: DataField

Inherits:
FitObject show all
Defined in:
lib/fitreader/data_field.rb

Constant Summary collapse

TYPES =
{
  0 => { size: 1, unpack_type: 'C', endian: 0, invalid: 255 },
  1 => { size: 1, unpack_type: 'c', endian: 0, invalid: 127 },
  2 => { size: 1, unpack_type: 'C', endian: 0, invalid: 255 },
  3 => { size: 2, unpack_type: { big: 's>', little: 's<' }, endian: 1, invalid: 32767 },
  4 => { size: 2, unpack_type: { big: 'S>', little: 'S<' }, endian: 1, invalid: 65535 },
  5 => { size: 4, unpack_type: { big: 'l>', little: 'l<' }, endian: 1, invalid: 2147483647 },
  6 => { size: 4, unpack_type: { big: 'L>', little: 'L<' }, endian: 1, invalid: 4294967295 },
  7 => { size: 1, unpack_type: 'Z*', endian: 0, invalid: 0 },
  8 => { size: 4, unpack_type: { big: 'e', little: 'g' }, endian: 1, invalid: 4294967295 },
  9 => { size: 8, unpack_type: { big: 'E', little: 'G' }, endian: 1, invalid: 18446744073709551615 },
  10 => { size: 1, unpack_type: 'C', endian: 0, invalid: 0 },
  11 => { size: 2, unpack_type: { big: 'S>', little: 'S<' }, endian: 1, invalid: 0 },
  12 => { size: 4, unpack_type: { big: 'L>', little: 'L<' }, endian: 1, invalid: 0 },
  13 => { size: 1, unpack_type: 'C', endian: 0, invalid: 0xFF },
  14 => { size: 8, unpack_type: { big: 'q>', little: 'q<' }, endian: 1, invalid: 0x7FFFFFFFFFFFFFFF },
  15 => { size: 8, unpack_type: { big: 'Q>', little: 'Q<' }, endian: 1, invalid: 0xFFFFFFFFFFFFFFFF },
  16 => { size: 8, unpack_type: nil, endian: 1, invalid: 0x0000000000000000 }
}.freeze

Constants included from Unpack

Unpack::MASKS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from FitObject

#to_h

Methods included from Unpack

#read_bit, #read_bits, #read_multiple, #readbytes

Constructor Details

#initialize(io, d, arch) ⇒ DataField

Returns a new instance of DataField.



24
25
26
27
28
29
# File 'lib/fitreader/data_field.rb', line 24

def initialize(io, d, arch)
  base = TYPES[d.base_num]
  char = d.endianness.zero? ? base[:unpack_type] : base[:unpack_type][arch]
  @raw = read_multiple(io, char, d.size, base[:size])
  @valid = check(@raw, base[:invalid])
end

Instance Attribute Details

#rawObject (readonly)

Returns the value of attribute raw.



22
23
24
# File 'lib/fitreader/data_field.rb', line 22

def raw
  @raw
end

#validObject (readonly)

Returns the value of attribute valid.



22
23
24
# File 'lib/fitreader/data_field.rb', line 22

def valid
  @valid
end

Instance Method Details

#check(raw, invalid) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/fitreader/data_field.rb', line 31

def check(raw, invalid)
  if raw.is_a? Array
    raw.any? { |e| e != invalid }
  else
    raw != invalid
  end
end