1 # The MIT License (MIT)
3 # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 # Permission is hereby granted, free of charge, to any person obtaining a copy
6 # of this software and associated documentation files (the "Software"), to deal
7 # in the Software without restriction, including without limitation the rights
8 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 # copies of the Software, and to permit persons to whom the Software is
10 # furnished to do so, subject to the following conditions:
12 # The above copyright notice and this permission notice shall be included in
13 # all copies or substantial portions of the Software.
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 from bt2
import native_bt
, object, utils
24 from bt2
import field_class
as bt2_field_class
25 import collections
.abc
31 def _create_field_from_ptr_template(
32 object_map
, ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
35 field_class_ptr
= native_bt
.field_borrow_class_const(ptr
)
36 typeid
= native_bt
.field_class_get_type(field_class_ptr
)
37 field
= object_map
[typeid
]._create
_from
_ptr
_and
_get
_ref
(
38 ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
43 def _create_field_from_ptr(ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
):
44 return _create_field_from_ptr_template(
45 _TYPE_ID_TO_OBJ
, ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
49 def _create_field_from_const_ptr(ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
):
50 return _create_field_from_ptr_template(
51 _TYPE_ID_TO_CONST_OBJ
, ptr
, owner_ptr
, owner_get_ref
, owner_put_ref
55 # Get the "effective" field of `field`. If `field` is a variant, return
56 # the currently selected field. If `field` is an option, return the
57 # content field. If `field` is of any other type, return `field`
61 def _get_leaf_field(field
):
62 if isinstance(field
, _VariantFieldConst
):
63 return _get_leaf_field(field
.selected_option
)
65 if isinstance(field
, _OptionFieldConst
):
66 return _get_leaf_field(field
.field
)
71 class _FieldConst(object._UniqueObject
):
72 _create_field_from_ptr
= staticmethod(_create_field_from_const_ptr
)
73 _create_field_class_from_ptr_and_get_ref
= staticmethod(
74 bt2_field_class
._create
_field
_class
_from
_const
_ptr
_and
_get
_ref
76 _borrow_class_ptr
= staticmethod(native_bt
.field_borrow_class_const
)
78 def __eq__(self
, other
):
79 other
= _get_leaf_field(other
)
80 return self
._spec
_eq
(other
)
84 field_class_ptr
= self
._borrow
_class
_ptr
(self
._ptr
)
85 assert field_class_ptr
is not None
86 return self
._create
_field
_class
_from
_ptr
_and
_get
_ref
(field_class_ptr
)
89 raise NotImplementedError
95 class _Field(_FieldConst
):
96 _create_field_from_ptr
= staticmethod(_create_field_from_ptr
)
97 _create_field_class_from_ptr_and_get_ref
= staticmethod(
98 bt2_field_class
._create
_field
_class
_from
_ptr
_and
_get
_ref
100 _borrow_class_ptr
= staticmethod(native_bt
.field_borrow_class
)
103 class _BitArrayFieldConst(_FieldConst
):
104 _NAME
= 'Const bit array'
107 def value_as_integer(self
):
108 return native_bt
.field_bit_array_get_value_as_integer(self
._ptr
)
110 def _spec_eq(self
, other
):
111 if type(other
) is not type(self
):
114 return self
.value_as_integer
== other
.value_as_integer
117 return repr(self
.value_as_integer
)
120 return str(self
.value_as_integer
)
123 return self
.cls
.length
126 class _BitArrayField(_BitArrayFieldConst
, _Field
):
129 def _value_as_integer(self
, value
):
130 utils
._check
_uint
64(value
)
131 native_bt
.field_bit_array_set_value_as_integer(self
._ptr
, value
)
133 value_as_integer
= property(
134 fget
=_BitArrayFieldConst
.value_as_integer
.fget
, fset
=_value_as_integer
138 @functools.total_ordering
139 class _NumericFieldConst(_FieldConst
):
141 def _extract_value(other
):
142 if isinstance(other
, _BoolFieldConst
) or isinstance(other
, bool):
145 if isinstance(other
, numbers
.Integral
):
148 if isinstance(other
, numbers
.Real
):
151 if isinstance(other
, numbers
.Complex
):
152 return complex(other
)
155 "'{}' object is not a number object".format(other
.__class
__.__name
__)
159 return int(self
._value
)
162 return float(self
._value
)
165 return repr(self
._value
)
167 def __lt__(self
, other
):
168 if not isinstance(other
, numbers
.Number
):
170 'unorderable types: {}() < {}()'.format(
171 self
.__class
__.__name
__, other
.__class
__.__name
__
175 return self
._value
< self
._extract
_value
(other
)
177 def _spec_eq(self
, other
):
179 return self
._value
== self
._extract
_value
(other
)
184 return hash(self
._value
)
186 def __rmod__(self
, other
):
187 return self
._extract
_value
(other
) % self
._value
189 def __mod__(self
, other
):
190 return self
._value
% self
._extract
_value
(other
)
192 def __rfloordiv__(self
, other
):
193 return self
._extract
_value
(other
) // self
._value
195 def __floordiv__(self
, other
):
196 return self
._value
// self
._extract
_value
(other
)
198 def __round__(self
, ndigits
=None):
200 return round(self
._value
)
202 return round(self
._value
, ndigits
)
205 return math
.ceil(self
._value
)
208 return math
.floor(self
._value
)
211 return int(self
._value
)
214 return abs(self
._value
)
216 def __add__(self
, other
):
217 return self
._value
+ self
._extract
_value
(other
)
219 def __radd__(self
, other
):
220 return self
.__add
__(other
)
228 def __mul__(self
, other
):
229 return self
._value
* self
._extract
_value
(other
)
231 def __rmul__(self
, other
):
232 return self
.__mul
__(other
)
234 def __truediv__(self
, other
):
235 return self
._value
/ self
._extract
_value
(other
)
237 def __rtruediv__(self
, other
):
238 return self
._extract
_value
(other
) / self
._value
240 def __pow__(self
, exponent
):
241 return self
._value
** self
._extract
_value
(exponent
)
243 def __rpow__(self
, base
):
244 return self
._extract
_value
(base
) ** self
._value
247 class _NumericField(_NumericFieldConst
, _Field
):
249 # Non const field are not hashable as their value may be modified
250 # without changing the underlying Python object.
251 raise TypeError('unhashable type: \'{}\''.format(self
._NAME
))
254 class _IntegralFieldConst(_NumericFieldConst
, numbers
.Integral
):
255 def __lshift__(self
, other
):
256 return self
._value
<< self
._extract
_value
(other
)
258 def __rlshift__(self
, other
):
259 return self
._extract
_value
(other
) << self
._value
261 def __rshift__(self
, other
):
262 return self
._value
>> self
._extract
_value
(other
)
264 def __rrshift__(self
, other
):
265 return self
._extract
_value
(other
) >> self
._value
267 def __and__(self
, other
):
268 return self
._value
& self
._extract
_value
(other
)
270 def __rand__(self
, other
):
271 return self
._extract
_value
(other
) & self
._value
273 def __xor__(self
, other
):
274 return self
._value ^ self
._extract
_value
(other
)
276 def __rxor__(self
, other
):
277 return self
._extract
_value
(other
) ^ self
._value
279 def __or__(self
, other
):
280 return self
._value | self
._extract
_value
(other
)
282 def __ror__(self
, other
):
283 return self
._extract
_value
(other
) | self
._value
285 def __invert__(self
):
289 class _IntegralField(_IntegralFieldConst
, _NumericField
):
293 class _BoolFieldConst(_IntegralFieldConst
, _FieldConst
):
294 _NAME
= 'Const boolean'
300 def _value_to_bool(cls
, value
):
301 if isinstance(value
, _BoolFieldConst
):
304 if not isinstance(value
, bool):
306 "'{}' object is not a 'bool', '_BoolFieldConst', or '_BoolField' object".format(
315 return bool(native_bt
.field_bool_get_value(self
._ptr
))
318 class _BoolField(_BoolFieldConst
, _IntegralField
, _Field
):
321 def _set_value(self
, value
):
322 value
= self
._value
_to
_bool
(value
)
323 native_bt
.field_bool_set_value(self
._ptr
, value
)
325 value
= property(fset
=_set_value
)
328 class _IntegerFieldConst(_IntegralFieldConst
, _FieldConst
):
332 class _IntegerField(_IntegerFieldConst
, _IntegralField
, _Field
):
333 def _check_range(self
, value
):
334 if not (value
>= self
._lower
_bound
and value
<= self
._upper
_bound
):
336 "Value {} is outside valid range [{}, {}]".format(
337 value
, self
._lower
_bound
, self
._upper
_bound
342 class _UnsignedIntegerFieldConst(_IntegerFieldConst
, _FieldConst
):
343 _NAME
= 'Const unsigned integer'
346 def _value_to_int(cls
, value
):
347 if not isinstance(value
, numbers
.Integral
):
348 raise TypeError('expecting an integral number object')
354 return native_bt
.field_integer_unsigned_get_value(self
._ptr
)
357 class _UnsignedIntegerField(_UnsignedIntegerFieldConst
, _IntegerField
, _Field
):
358 _NAME
= 'Unsigned integer'
360 def _set_value(self
, value
):
361 value
= self
._value
_to
_int
(value
)
363 self
._check
_range
(value
)
365 native_bt
.field_integer_unsigned_set_value(self
._ptr
, value
)
367 value
= property(fset
=_set_value
)
370 def _lower_bound(self
):
374 def _upper_bound(self
):
375 return (2 ** self
.cls
.field_value_range
) - 1
378 class _SignedIntegerFieldConst(_IntegerFieldConst
, _FieldConst
):
379 _NAME
= 'Const signed integer'
382 def _value_to_int(cls
, value
):
383 if not isinstance(value
, numbers
.Integral
):
384 raise TypeError('expecting an integral number object')
390 return native_bt
.field_integer_signed_get_value(self
._ptr
)
393 class _SignedIntegerField(_SignedIntegerFieldConst
, _IntegerField
, _Field
):
394 _NAME
= 'Signed integer'
396 def _set_value(self
, value
):
397 value
= self
._value
_to
_int
(value
)
399 self
._check
_range
(value
)
401 native_bt
.field_integer_signed_set_value(self
._ptr
, value
)
403 value
= property(fset
=_set_value
)
406 def _lower_bound(self
):
407 return -1 * (2 ** (self
.cls
.field_value_range
- 1))
410 def _upper_bound(self
):
411 return (2 ** (self
.cls
.field_value_range
- 1)) - 1
414 class _RealFieldConst(_NumericFieldConst
, numbers
.Real
):
418 def _value_to_float(cls
, value
):
419 if not isinstance(value
, numbers
.Real
):
420 raise TypeError("expecting a real number object")
425 class _SinglePrecisionRealFieldConst(_RealFieldConst
):
426 _NAME
= 'Const single-precision real'
430 return native_bt
.field_real_single_precision_get_value(self
._ptr
)
433 class _DoublePrecisionRealFieldConst(_RealFieldConst
):
434 _NAME
= 'Const double-precision real'
438 return native_bt
.field_real_double_precision_get_value(self
._ptr
)
441 class _RealField(_RealFieldConst
, _NumericField
):
445 class _SinglePrecisionRealField(_SinglePrecisionRealFieldConst
, _RealField
):
446 _NAME
= 'Single-precision real'
448 def _set_value(self
, value
):
449 value
= self
._value
_to
_float
(value
)
450 native_bt
.field_real_single_precision_set_value(self
._ptr
, value
)
452 value
= property(fset
=_set_value
)
455 class _DoublePrecisionRealField(_DoublePrecisionRealFieldConst
, _RealField
):
456 _NAME
= 'Double-precision real'
458 def _set_value(self
, value
):
459 value
= self
._value
_to
_float
(value
)
460 native_bt
.field_real_double_precision_set_value(self
._ptr
, value
)
462 value
= property(fset
=_set_value
)
465 class _EnumerationFieldConst(_IntegerFieldConst
):
467 return '{} ({})'.format(self
._value
, ', '.join(self
.labels
))
471 status
, labels
= self
._get
_mapping
_labels
(self
._ptr
)
472 utils
._handle
_func
_status
(status
, "cannot get label for enumeration field")
474 assert labels
is not None
478 class _EnumerationField(_EnumerationFieldConst
, _IntegerField
):
482 class _UnsignedEnumerationFieldConst(
483 _EnumerationFieldConst
, _UnsignedIntegerFieldConst
485 _NAME
= 'Const unsigned Enumeration'
486 _get_mapping_labels
= staticmethod(
487 native_bt
.field_enumeration_unsigned_get_mapping_labels
491 class _UnsignedEnumerationField(
492 _UnsignedEnumerationFieldConst
, _EnumerationField
, _UnsignedIntegerField
494 _NAME
= 'Unsigned enumeration'
497 class _SignedEnumerationFieldConst(_EnumerationFieldConst
, _SignedIntegerFieldConst
):
498 _NAME
= 'Const signed Enumeration'
499 _get_mapping_labels
= staticmethod(
500 native_bt
.field_enumeration_signed_get_mapping_labels
504 class _SignedEnumerationField(
505 _SignedEnumerationFieldConst
, _EnumerationField
, _SignedIntegerField
507 _NAME
= 'Signed enumeration'
510 @functools.total_ordering
511 class _StringFieldConst(_FieldConst
):
512 _NAME
= 'Const string'
515 def _value_to_str(cls
, value
):
516 if isinstance(value
, _StringFieldConst
):
519 if not isinstance(value
, str):
520 raise TypeError("expecting a 'str' object")
526 return native_bt
.field_string_get_value(self
._ptr
)
528 def _spec_eq(self
, other
):
530 return self
._value
== self
._value
_to
_str
(other
)
534 def __lt__(self
, other
):
535 return self
._value
< self
._value
_to
_str
(other
)
538 return bool(self
._value
)
541 return hash(self
._value
)
544 return repr(self
._value
)
547 return str(self
._value
)
549 def __getitem__(self
, index
):
550 return self
._value
[index
]
553 return native_bt
.field_string_get_length(self
._ptr
)
556 class _StringField(_StringFieldConst
, _Field
):
559 def _set_value(self
, value
):
560 value
= self
._value
_to
_str
(value
)
561 native_bt
.field_string_set_value(self
._ptr
, value
)
563 value
= property(fset
=_set_value
)
565 def __iadd__(self
, value
):
566 value
= self
._value
_to
_str
(value
)
567 status
= native_bt
.field_string_append(self
._ptr
, value
)
568 utils
._handle
_func
_status
(
569 status
, "cannot append to string field object's value"
574 # Non const field are not hashable as their value may be modified
575 # without changing the underlying Python object.
576 raise TypeError('unhashable type: \'{}\''.format(self
._NAME
))
579 class _ContainerFieldConst(_FieldConst
):
581 return len(self
) != 0
587 count
= self
._count
()
591 def __delitem__(self
, index
):
592 raise NotImplementedError
594 def __setitem__(self
, index
, value
):
596 '\'{}\' object does not support item assignment'.format(self
.__class
__)
600 class _ContainerField(_ContainerFieldConst
, _Field
):
604 class _StructureFieldConst(_ContainerFieldConst
, collections
.abc
.Mapping
):
605 _NAME
= 'Const structure'
606 _borrow_member_field_ptr_by_index
= staticmethod(
607 native_bt
.field_structure_borrow_member_field_by_index_const
609 _borrow_member_field_ptr_by_name
= staticmethod(
610 native_bt
.field_structure_borrow_member_field_by_name_const
618 return iter(self
.cls
)
620 def _spec_eq(self
, other
):
621 if not isinstance(other
, collections
.abc
.Mapping
):
624 if len(self
) != len(other
):
628 for self_key
in self
:
629 if self_key
not in other
:
632 if self
[self_key
] != other
[self_key
]:
638 items
= ['{}: {}'.format(repr(k
), repr(v
)) for k
, v
in self
.items()]
639 return '{{{}}}'.format(', '.join(items
))
641 def __getitem__(self
, key
):
642 utils
._check
_str
(key
)
643 field_ptr
= self
._borrow
_member
_field
_ptr
_by
_name
(self
._ptr
, key
)
645 if field_ptr
is None:
648 return self
._create
_field
_from
_ptr
(
649 field_ptr
, self
._owner
_ptr
, self
._owner
_get
_ref
, self
._owner
_put
_ref
652 def member_at_index(self
, index
):
653 utils
._check
_uint
64(index
)
655 if index
>= len(self
):
657 field_ptr
= self
._borrow
_member
_field
_ptr
_by
_index
(self
._ptr
, index
)
658 assert field_ptr
is not None
659 return self
._create
_field
_from
_ptr
(
660 field_ptr
, self
._owner
_ptr
, self
._owner
_get
_ref
, self
._owner
_put
_ref
664 class _StructureField(
665 _StructureFieldConst
, _ContainerField
, collections
.abc
.MutableMapping
668 _borrow_member_field_ptr_by_index
= staticmethod(
669 native_bt
.field_structure_borrow_member_field_by_index
671 _borrow_member_field_ptr_by_name
= staticmethod(
672 native_bt
.field_structure_borrow_member_field_by_name
675 def __setitem__(self
, key
, value
):
676 # raises if key is somehow invalid
679 # the field's property does the appropriate conversion or raises
680 # the appropriate exception
683 def _set_value(self
, values
):
685 for key
, value
in values
.items():
686 self
[key
].value
= value
690 value
= property(fset
=_set_value
)
693 class _OptionFieldConst(_FieldConst
):
694 _NAME
= 'Const option'
695 _borrow_field_ptr
= staticmethod(native_bt
.field_option_borrow_field_const
)
699 field_ptr
= self
._borrow
_field
_ptr
(self
._ptr
)
701 if field_ptr
is None:
704 return self
._create
_field
_from
_ptr
(
705 field_ptr
, self
._owner
_ptr
, self
._owner
_get
_ref
, self
._owner
_put
_ref
710 return self
.field
is not None
712 def _spec_eq(self
, other
):
713 return _get_leaf_field(self
) == other
716 return self
.has_field
719 return str(self
.field
)
722 return repr(self
.field
)
725 class _OptionField(_OptionFieldConst
, _Field
):
727 _borrow_field_ptr
= staticmethod(native_bt
.field_option_borrow_field
)
729 def _has_field(self
, value
):
730 utils
._check
_bool
(value
)
731 native_bt
.field_option_set_has_field(self
._ptr
, value
)
733 has_field
= property(fget
=_OptionFieldConst
.has_field
.fget
, fset
=_has_field
)
735 def _set_value(self
, value
):
736 self
.has_field
= True
738 assert field
is not None
741 value
= property(fset
=_set_value
)
744 class _VariantFieldConst(_ContainerFieldConst
, _FieldConst
):
745 _NAME
= 'Const variant'
746 _borrow_selected_option_field_ptr
= staticmethod(
747 native_bt
.field_variant_borrow_selected_option_field_const
754 def selected_option_index(self
):
755 return native_bt
.field_variant_get_selected_option_field_index(self
._ptr
)
758 def selected_option(self
):
759 # TODO: Is there a way to check if the variant field has a selected_option,
760 # so we can raise an exception instead of hitting a pre-condition check?
761 # If there is something, that check should be added to selected_option_index too.
762 field_ptr
= self
._borrow
_selected
_option
_field
_ptr
(self
._ptr
)
764 return self
._create
_field
_from
_ptr
(
765 field_ptr
, self
._owner
_ptr
, self
._owner
_get
_ref
, self
._owner
_put
_ref
768 def _spec_eq(self
, other
):
769 return _get_leaf_field(self
) == other
772 raise NotImplementedError
775 return str(self
.selected_option
)
778 return repr(self
.selected_option
)
781 class _VariantField(_VariantFieldConst
, _ContainerField
, _Field
):
783 _borrow_selected_option_field_ptr
= staticmethod(
784 native_bt
.field_variant_borrow_selected_option_field
787 def _selected_option_index(self
, index
):
788 if index
< 0 or index
>= len(self
):
789 raise IndexError('{} field object index is out of range'.format(self
._NAME
))
791 native_bt
.field_variant_select_option_field_by_index(self
._ptr
, index
)
793 selected_option_index
= property(
794 fget
=_VariantFieldConst
.selected_option_index
.fget
, fset
=_selected_option_index
797 def _set_value(self
, value
):
798 self
.selected_option
.value
= value
800 value
= property(fset
=_set_value
)
803 class _ArrayFieldConst(_ContainerFieldConst
, _FieldConst
, collections
.abc
.Sequence
):
804 _borrow_element_field_ptr_by_index
= staticmethod(
805 native_bt
.field_array_borrow_element_field_by_index_const
808 def _get_length(self
):
809 return native_bt
.field_array_get_length(self
._ptr
)
811 length
= property(fget
=_get_length
)
813 def __getitem__(self
, index
):
814 if not isinstance(index
, numbers
.Integral
):
816 "'{}' is not an integral number object: invalid index".format(
817 index
.__class
__.__name
__
823 if index
< 0 or index
>= len(self
):
824 raise IndexError('{} field object index is out of range'.format(self
._NAME
))
826 field_ptr
= self
._borrow
_element
_field
_ptr
_by
_index
(self
._ptr
, index
)
828 return self
._create
_field
_from
_ptr
(
829 field_ptr
, self
._owner
_ptr
, self
._owner
_get
_ref
, self
._owner
_put
_ref
832 def insert(self
, index
, value
):
833 raise NotImplementedError
835 def _spec_eq(self
, other
):
836 if not isinstance(other
, collections
.abc
.Sequence
):
839 if len(self
) != len(other
):
843 for self_elem
, other_elem
in zip(self
, other
):
844 if self_elem
!= other_elem
:
850 return '[{}]'.format(', '.join([repr(v
) for v
in self
]))
854 _ArrayFieldConst
, _ContainerField
, _Field
, collections
.abc
.MutableSequence
856 _borrow_element_field_ptr_by_index
= staticmethod(
857 native_bt
.field_array_borrow_element_field_by_index
860 def __setitem__(self
, index
, value
):
861 # raises if index is somehow invalid
864 if not isinstance(field
, (_NumericField
, _StringField
)):
865 raise TypeError('can only set the value of a number or string field')
867 # the field's property does the appropriate conversion or raises
868 # the appropriate exception
872 class _StaticArrayFieldConst(_ArrayFieldConst
, _FieldConst
):
873 _NAME
= 'Const static array'
876 return native_bt
.field_array_get_length(self
._ptr
)
879 class _StaticArrayField(_StaticArrayFieldConst
, _ArrayField
, _Field
):
880 _NAME
= 'Static array'
882 def _set_value(self
, values
):
883 if len(self
) != len(values
):
885 'expected length of value ({}) and array field ({}) to match'.format(
886 len(values
), len(self
)
890 for index
, value
in enumerate(values
):
891 if value
is not None:
892 self
[index
].value
= value
894 value
= property(fset
=_set_value
)
897 class _DynamicArrayFieldConst(_ArrayFieldConst
, _FieldConst
):
898 _NAME
= 'Const dynamic array'
904 class _DynamicArrayField(_DynamicArrayFieldConst
, _ArrayField
, _Field
):
905 _NAME
= 'Dynamic array'
907 def _set_length(self
, length
):
908 utils
._check
_uint
64(length
)
909 status
= native_bt
.field_array_dynamic_set_length(self
._ptr
, length
)
910 utils
._handle
_func
_status
(status
, "cannot set dynamic array length")
912 length
= property(fget
=_ArrayField
._get
_length
, fset
=_set_length
)
914 def _set_value(self
, values
):
915 if len(values
) != self
.length
:
916 self
.length
= len(values
)
918 for index
, value
in enumerate(values
):
919 if value
is not None:
920 self
[index
].value
= value
922 value
= property(fset
=_set_value
)
925 _TYPE_ID_TO_CONST_OBJ
= {
926 native_bt
.FIELD_CLASS_TYPE_BOOL
: _BoolFieldConst
,
927 native_bt
.FIELD_CLASS_TYPE_BIT_ARRAY
: _BitArrayFieldConst
,
928 native_bt
.FIELD_CLASS_TYPE_UNSIGNED_INTEGER
: _UnsignedIntegerFieldConst
,
929 native_bt
.FIELD_CLASS_TYPE_SIGNED_INTEGER
: _SignedIntegerFieldConst
,
930 native_bt
.FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL
: _SinglePrecisionRealFieldConst
,
931 native_bt
.FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL
: _DoublePrecisionRealFieldConst
,
932 native_bt
.FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION
: _UnsignedEnumerationFieldConst
,
933 native_bt
.FIELD_CLASS_TYPE_SIGNED_ENUMERATION
: _SignedEnumerationFieldConst
,
934 native_bt
.FIELD_CLASS_TYPE_STRING
: _StringFieldConst
,
935 native_bt
.FIELD_CLASS_TYPE_STRUCTURE
: _StructureFieldConst
,
936 native_bt
.FIELD_CLASS_TYPE_STATIC_ARRAY
: _StaticArrayFieldConst
,
937 native_bt
.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD
: _DynamicArrayFieldConst
,
938 native_bt
.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD
: _DynamicArrayFieldConst
,
939 native_bt
.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR
: _OptionFieldConst
,
940 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR
: _OptionFieldConst
,
941 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR
: _OptionFieldConst
,
942 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR
: _OptionFieldConst
,
943 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR
: _VariantFieldConst
,
944 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR
: _VariantFieldConst
,
945 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR
: _VariantFieldConst
,
949 native_bt
.FIELD_CLASS_TYPE_BOOL
: _BoolField
,
950 native_bt
.FIELD_CLASS_TYPE_BIT_ARRAY
: _BitArrayField
,
951 native_bt
.FIELD_CLASS_TYPE_UNSIGNED_INTEGER
: _UnsignedIntegerField
,
952 native_bt
.FIELD_CLASS_TYPE_SIGNED_INTEGER
: _SignedIntegerField
,
953 native_bt
.FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL
: _SinglePrecisionRealField
,
954 native_bt
.FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL
: _DoublePrecisionRealField
,
955 native_bt
.FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION
: _UnsignedEnumerationField
,
956 native_bt
.FIELD_CLASS_TYPE_SIGNED_ENUMERATION
: _SignedEnumerationField
,
957 native_bt
.FIELD_CLASS_TYPE_STRING
: _StringField
,
958 native_bt
.FIELD_CLASS_TYPE_STRUCTURE
: _StructureField
,
959 native_bt
.FIELD_CLASS_TYPE_STATIC_ARRAY
: _StaticArrayField
,
960 native_bt
.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD
: _DynamicArrayField
,
961 native_bt
.FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD
: _DynamicArrayField
,
962 native_bt
.FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR
: _OptionField
,
963 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR
: _OptionField
,
964 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR
: _OptionField
,
965 native_bt
.FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR
: _OptionField
,
966 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR
: _VariantField
,
967 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR
: _VariantField
,
968 native_bt
.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR
: _VariantField
,