+ def member_at_index(self, index):
+ utils._check_uint64(index)
+
+ if index >= len(self):
+ raise IndexError
+
+ member_ptr = self._borrow_member_ptr_by_index(self._ptr, index)
+ assert member_ptr is not None
+ return self._structure_member_field_class_pycls(self, member_ptr)
+
+
+class _StructureFieldClass(_StructureFieldClassConst, _FieldClass):
+ _NAME = 'Structure'
+ _borrow_member_by_index = staticmethod(
+ native_bt.field_class_structure_borrow_member_by_index
+ )
+ _borrow_member_ptr_by_name = staticmethod(
+ native_bt.field_class_structure_borrow_member_by_name
+ )
+ _structure_member_field_class_pycls = property(lambda _: _StructureFieldClassMember)
+
+ def append_member(self, name, field_class, user_attributes=None):
+ utils._check_str(name)
+ utils._check_type(field_class, _FieldClass)
+
+ if name in self:
+ raise ValueError("duplicate member name '{}'".format(name))
+
+ user_attributes_value = None
+
+ if user_attributes is not None:
+ # check now that user attributes are valid
+ user_attributes_value = bt2.create_value(user_attributes)
+
+ status = native_bt.field_class_structure_append_member(
+ self._ptr, name, field_class._ptr
+ )
+ utils._handle_func_status(
+ status, 'cannot append member to structure field class object'
+ )
+
+ if user_attributes is not None:
+ self[name]._user_attributes = user_attributes_value
+