Class: Rclrb::Fields::ArrayField
- Inherits:
-
Object
- Object
- Rclrb::Fields::ArrayField
- 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
- #create_from_dict(v) ⇒ Object
- #destroy_ros_message(data) ⇒ Object
- #ffi_type ⇒ Object
- #field_name ⇒ Object
- #fill_ros_message(data, index, value) ⇒ Object
- #init_value ⇒ Object
-
#initialize(field) ⇒ ArrayField
constructor
A new instance of ArrayField.
- #is_atomic ⇒ Object
- #parse_ros_message(data) ⇒ Object
- #ros_size ⇒ Object
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 (data) length = data[:length] unless @field.is_atomic for i in 0...length @field. data[:array] + i * @field.ffi_size end end Rclrb.rcl_deallocate data[:array] end |
#ffi_type ⇒ Object
210 211 212 |
# File 'lib/rclrb/fields.rb', line 210 def ffi_type return FFIType end |
#field_name ⇒ Object
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 (data, index, value) array_pointer = Rclrb.rcl_allocate value.length * @field.ffi_size @field. array_pointer, value arr = data[index] arr[:array] = array_pointer arr[:length] = value.length arr[:capacity] = value.length end |
#init_value ⇒ Object
173 174 175 |
# File 'lib/rclrb/fields.rb', line 173 def init_value() return "[]" end |
#is_atomic ⇒ Object
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 (data) return @field. data[:array], data[:length] end |
#ros_size ⇒ Object
195 196 197 |
# File 'lib/rclrb/fields.rb', line 195 def ros_size() return SIZE end |