- def __copy__(self):
- ptr = native_bt.field_class_copy(self._ptr)
- utils._handle_ptr(ptr, 'cannot copy {} field class object'.format(self._NAME.lower()))
- return _create_from_ptr(ptr)
-
- def __deepcopy__(self, memo):
- cpy = self.__copy__()
- memo[id(self)] = cpy
- return cpy
-
- def __call__(self, value=None):
- field_ptr = native_bt.field_create(self._ptr)
-
- if field_ptr is None:
- raise bt2.CreationError('cannot create {} field object'.format(self._NAME.lower()))
-
- field = bt2.fields._create_from_ptr(field_ptr)
-
- if value is not None:
- if not isinstance(field, (bt2.fields._IntegerField, bt2.fields._FloatingPointNumberField, bt2.fields._StringField)):
- raise bt2.Error('cannot assign an initial value to a {} field object'.format(field._NAME))
-
- field.value = value
-
- return field
-
-
-class _AlignmentProp:
- @property
- def alignment(self):
- alignment = native_bt.field_class_get_alignment(self._ptr)
- assert(alignment >= 0)
- return alignment
-
- @alignment.setter
- def alignment(self, alignment):
- utils._check_alignment(alignment)
- ret = native_bt.field_class_set_alignment(self._ptr, alignment)
- utils._handle_ret(ret, "cannot set field class object's alignment")
-
-
-class _ByteOrderProp:
- @property
- def byte_order(self):
- bo = native_bt.field_class_get_byte_order(self._ptr)
- assert(bo >= 0)
- return bo
-
- @byte_order.setter
- def byte_order(self, byte_order):
- utils._check_int(byte_order)
- ret = native_bt.field_class_set_byte_order(self._ptr, byte_order)
- utils._handle_ret(ret, "cannot set field class object's byte order")
-
-
-class IntegerFieldClass(_FieldClass, _AlignmentProp, _ByteOrderProp):
- _NAME = 'Integer'
-
- def __init__(self, size, alignment=None, byte_order=None, is_signed=None,
- base=None, encoding=None, mapped_clock_class=None):
- utils._check_uint64(size)
-
- if size == 0:
- raise ValueError('size is 0 bits')
-
- ptr = native_bt.field_class_integer_create(size)
- self._check_create_status(ptr)
- super().__init__(ptr)
-
- if alignment is not None:
- self.alignment = alignment
-
- if byte_order is not None:
- self.byte_order = byte_order
-
- if is_signed is not None:
- self.is_signed = is_signed
-
- if base is not None:
- self.base = base
-
- if encoding is not None:
- self.encoding = encoding
-
- if mapped_clock_class is not None:
- self.mapped_clock_class = mapped_clock_class