class GMSEC::Field
Constants
- GMSEC_TYPEDEF
Map
GMSEC
values to deftypes. Note that we list backward compatible aliases first.- RUBY_TO_GMSEC_TYPE
- TYPE_TO_GMSEC_VALUE
Public Class Methods
new(name=nil, value=nil, type: nil)
click to toggle source
# File lib/gmsec/field.rb, line 55 def initialize(name=nil, value=nil, type: nil) if name self.name = name end if type self.type = type end if value self.value = value end end
Public Instance Methods
name()
click to toggle source
# File lib/gmsec/field.rb, line 69 def name with_string_pointer do |pointer| gmsec_GetFieldName(self, pointer, status) end end
name=(value)
click to toggle source
# File lib/gmsec/field.rb, line 75 def name=(value) gmsec_SetFieldName(self, value.to_s, status) end
type()
click to toggle source
# File lib/gmsec/field.rb, line 124 def type # Create a pointer to GMSEC_TYPE that we're going to read and convert to a symbol. pointer = FFI::MemoryPointer.new(find_type(:GMSEC_TYPE)) gmsec_GetFieldType(self, pointer, status) # Default to GMSEC_STR if type is not registered in GMSEC_DEF GMSEC_TYPEDEF[pointer.read_ushort] || :str end
type=(type)
click to toggle source
# File lib/gmsec/field.rb, line 134 def type=(type) if type.nil? raise TypeError.new("#{value.class} is not supported as a GMSEC type.") end field_type = TYPE_TO_GMSEC_VALUE[type] gmsec_SetFieldType(self, field_type, status) if status.is_error? raise RuntimeError.new("Error in specifying type '#{type}': #{status}") end end
value()
click to toggle source
# File lib/gmsec/field.rb, line 79 def value field_type = "GMSEC_#{type.to_s.upcase}".to_sym pointer = FFI::MemoryPointer.new(find_type(field_type)) send(get_field_value_method, self, pointer, status) read_pointer_value(pointer) end
value=(value)
click to toggle source
# File lib/gmsec/field.rb, line 86 def value=(value) if type == :unset # Guess what GMSEC type value is. self.type = RUBY_TO_GMSEC_TYPE[value.class] end # Determind method on value type method = "gmsec_SetFieldValue#{type.to_s.upcase}" # Cast value based on value type. value = case value when Symbol value.to_s when TrueClass, FalseClass value ? 1 : 0 else value end # Cast value based on target type. value = case type when :bool value ? 1 : 0 when :i16, :i32, :u16, :u32 value.to_i when :f32, :f64 value.to_f when :char value.ord when :str value.to_s else raise RuntimeError.new("Error in assigning value to field: type '#{type}' not supported") end send(method, self, value, status) end
Protected Instance Methods
get_field_value_method()
click to toggle source
# File lib/gmsec/field.rb, line 149 def get_field_value_method "gmsec_GetFieldValue#{type.to_s.upcase.split("_").last}" end
read_pointer_value(pointer)
click to toggle source
# File lib/gmsec/field.rb, line 153 def read_pointer_value(pointer) case type when :char pointer.read_string(1) when :bool pointer.read_int == self.class.enum_type(:GMSEC_BOOL)[:GMSEC_TRUE] when :short pointer.read_short when :ushort pointer.read_ushort when :long pointer.read_long when :double pointer.read_double when :str pointer.read_pointer.read_string_to_null when :i16 pointer.read_int16 when :i32 pointer.read_int32 when :i64 pointer.read_int64 when :u16 pointer.read_uint16 when :u32 pointer.read_uint32 when :f32, :float pointer.read_float when :f64 pointer.read_double else raise TypeError.new("#{type} is not a supported type.") end end