Class: Rclrb::Fields::ArrayField

Inherits:
Object
  • Object
show all
Defined in:
lib/rclrb/fields.rb

Defined Under Namespace

Classes: FFIType

Constant Summary collapse

SIZE =
CApi::POINTER_SIZE + 2 * CApi::SIZE_T_SIZE

Instance Method Summary collapse

Constructor Details

#initialize(field) ⇒ ArrayField

Returns a new instance of ArrayField.



170
171
172
# File 'lib/rclrb/fields.rb', line 170

def initialize(field)
  @field = field
end

Instance Method Details

#create_from_dict(v) ⇒ Object



179
180
181
182
# File 'lib/rclrb/fields.rb', line 179

def create_from_dict v
  raise RclError.new "Expected Array got '#{v}' of type '#{v.class}'" unless v.is_a? Array
  return v.map { |x| @field.create_from_dict x }
end

#destroy_ros_message(data) ⇒ Object



198
199
200
201
202
203
204
205
206
# File 'lib/rclrb/fields.rb', line 198

def destroy_ros_message(data)
  length =  data[:length]
  unless @field.is_atomic
    for i in 0...length
      @field.destroy_ros_message data[:array] + i * @field.ffi_size
    end
  end
  Rclrb.rcl_deallocate data[:array]
end

#ffi_typeObject



210
211
212
# File 'lib/rclrb/fields.rb', line 210

def ffi_type
  return FFIType
end

#field_nameObject



176
177
178
# File 'lib/rclrb/fields.rb', line 176

def field_name()
  return "#{@field.field_name}.array_field()"
end

#fill_ros_message(data, index, value) ⇒ Object



186
187
188
189
190
191
192
193
# File 'lib/rclrb/fields.rb', line 186

def fill_ros_message(data, index, value)
  array_pointer = Rclrb.rcl_allocate value.length * @field.ffi_size
  @field.fill_ros_message_array array_pointer, value
  arr = data[index]
  arr[:array] = array_pointer
  arr[:length] = value.length
  arr[:capacity] = value.length
end

#init_valueObject



173
174
175
# File 'lib/rclrb/fields.rb', line 173

def init_value()
  return "[]"
end

#is_atomicObject



207
208
209
# File 'lib/rclrb/fields.rb', line 207

def is_atomic
  return false
end

#parse_ros_message(data) ⇒ Object



183
184
185
# File 'lib/rclrb/fields.rb', line 183

def parse_ros_message(data)
  return @field.parse_ros_message_array data[:array], data[:length]
end

#ros_sizeObject



195
196
197
# File 'lib/rclrb/fields.rb', line 195

def ros_size()
  return SIZE
end