Commit | Line | Data |
---|---|---|
81447b5b PP |
1 | # The MIT License (MIT) |
2 | # | |
811644b8 | 3 | # Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com> |
81447b5b PP |
4 | # |
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: | |
11 | # | |
12 | # The above copyright notice and this permission notice shall be included in | |
13 | # all copies or substantial portions of the Software. | |
14 | # | |
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 | |
21 | # THE SOFTWARE. | |
22 | ||
23 | from bt2 import native_bt, object, utils | |
24 | import collections.abc | |
3fb99a22 PP |
25 | from bt2 import field_path as bt2_field_path |
26 | from bt2 import integer_range_set as bt2_integer_range_set | |
5783664e | 27 | from bt2 import value as bt2_value |
81447b5b PP |
28 | import bt2 |
29 | ||
30 | ||
f0a42b33 | 31 | def _create_field_class_from_ptr_and_get_ref_template(type_map, ptr): |
3cdfbaea | 32 | typeid = native_bt.field_class_get_type(ptr) |
f0a42b33 FD |
33 | return type_map[typeid]._create_from_ptr_and_get_ref(ptr) |
34 | ||
35 | ||
36 | def _create_field_class_from_ptr_and_get_ref(ptr): | |
37 | return _create_field_class_from_ptr_and_get_ref_template( | |
38 | _FIELD_CLASS_TYPE_TO_OBJ, ptr | |
39 | ) | |
40 | ||
41 | ||
42 | def _create_field_class_from_const_ptr_and_get_ref(ptr): | |
43 | return _create_field_class_from_ptr_and_get_ref_template( | |
44 | _FIELD_CLASS_TYPE_TO_CONST_OBJ, ptr | |
45 | ) | |
81447b5b PP |
46 | |
47 | ||
d47b87ac SM |
48 | class IntegerDisplayBase: |
49 | BINARY = native_bt.FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_BINARY | |
50 | OCTAL = native_bt.FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_OCTAL | |
51 | DECIMAL = native_bt.FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL | |
52 | HEXADECIMAL = native_bt.FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_HEXADECIMAL | |
81447b5b | 53 | |
81447b5b | 54 | |
f0a42b33 | 55 | class _FieldClassConst(object._SharedObject): |
d47b87ac SM |
56 | _get_ref = staticmethod(native_bt.field_class_get_ref) |
57 | _put_ref = staticmethod(native_bt.field_class_put_ref) | |
f0a42b33 FD |
58 | _borrow_user_attributes_ptr = staticmethod( |
59 | native_bt.field_class_borrow_user_attributes_const | |
60 | ) | |
61 | _create_value_from_ptr_and_get_ref = staticmethod( | |
62 | bt2_value._create_from_const_ptr_and_get_ref | |
63 | ) | |
81447b5b PP |
64 | |
65 | def _check_create_status(self, ptr): | |
66 | if ptr is None: | |
694c792b | 67 | raise bt2._MemoryError( |
cfbd7cf3 FD |
68 | 'cannot create {} field class object'.format(self._NAME.lower()) |
69 | ) | |
81447b5b | 70 | |
5783664e PP |
71 | @property |
72 | def user_attributes(self): | |
f0a42b33 | 73 | ptr = self._borrow_user_attributes_ptr(self._ptr) |
5783664e | 74 | assert ptr is not None |
f0a42b33 FD |
75 | return self._create_value_from_ptr_and_get_ref(ptr) |
76 | ||
77 | ||
78 | class _FieldClass(_FieldClassConst): | |
79 | _borrow_user_attributes_ptr = staticmethod( | |
80 | native_bt.field_class_borrow_user_attributes | |
81 | ) | |
82 | _create_value_from_ptr_and_get_ref = staticmethod( | |
83 | bt2_value._create_from_ptr_and_get_ref | |
84 | ) | |
5783664e PP |
85 | |
86 | def _user_attributes(self, user_attributes): | |
87 | value = bt2_value.create_value(user_attributes) | |
88 | utils._check_type(value, bt2_value.MapValue) | |
89 | native_bt.field_class_set_user_attributes(self._ptr, value._ptr) | |
90 | ||
91 | _user_attributes = property(fset=_user_attributes) | |
92 | ||
81447b5b | 93 | |
f0a42b33 FD |
94 | class _BoolFieldClassConst(_FieldClassConst): |
95 | _NAME = 'Const Boolean' | |
96 | ||
97 | ||
98 | class _BoolFieldClass(_BoolFieldClassConst, _FieldClass): | |
aae30e61 PP |
99 | _NAME = 'Boolean' |
100 | ||
101 | ||
f0a42b33 FD |
102 | class _BitArrayFieldClassConst(_FieldClassConst): |
103 | _NAME = 'Const Bit array' | |
ead8c3d4 PP |
104 | |
105 | @property | |
106 | def length(self): | |
107 | length = native_bt.field_class_bit_array_get_length(self._ptr) | |
108 | assert length >= 1 | |
109 | return length | |
110 | ||
111 | ||
f0a42b33 FD |
112 | class _BitArrayFieldClass(_BitArrayFieldClassConst, _FieldClass): |
113 | _NAME = 'Bit array' | |
114 | ||
115 | ||
116 | class _IntegerFieldClassConst(_FieldClassConst): | |
81447b5b | 117 | @property |
d47b87ac SM |
118 | def field_value_range(self): |
119 | size = native_bt.field_class_integer_get_field_value_range(self._ptr) | |
cfbd7cf3 | 120 | assert size >= 1 |
81447b5b PP |
121 | return size |
122 | ||
f0a42b33 FD |
123 | @property |
124 | def preferred_display_base(self): | |
125 | base = native_bt.field_class_integer_get_preferred_display_base(self._ptr) | |
126 | assert base >= 0 | |
127 | return base | |
128 | ||
129 | ||
130 | class _IntegerFieldClass(_FieldClass, _IntegerFieldClassConst): | |
d47b87ac SM |
131 | def _field_value_range(self, size): |
132 | if size < 1 or size > 64: | |
133 | raise ValueError("Value is outside valid range [1, 64] ({})".format(size)) | |
134 | native_bt.field_class_integer_set_field_value_range(self._ptr, size) | |
81447b5b | 135 | |
d47b87ac | 136 | _field_value_range = property(fset=_field_value_range) |
81447b5b | 137 | |
d47b87ac SM |
138 | def _preferred_display_base(self, base): |
139 | utils._check_uint64(base) | |
81447b5b | 140 | |
cfbd7cf3 FD |
141 | if base not in ( |
142 | IntegerDisplayBase.BINARY, | |
143 | IntegerDisplayBase.OCTAL, | |
144 | IntegerDisplayBase.DECIMAL, | |
145 | IntegerDisplayBase.HEXADECIMAL, | |
146 | ): | |
d47b87ac | 147 | raise ValueError("Display base is not a valid IntegerDisplayBase value") |
81447b5b | 148 | |
cfbd7cf3 | 149 | native_bt.field_class_integer_set_preferred_display_base(self._ptr, base) |
81447b5b | 150 | |
d47b87ac | 151 | _preferred_display_base = property(fset=_preferred_display_base) |
81447b5b PP |
152 | |
153 | ||
f0a42b33 FD |
154 | class _UnsignedIntegerFieldClassConst(_IntegerFieldClassConst, _FieldClassConst): |
155 | _NAME = 'Const unsigned integer' | |
156 | ||
157 | ||
158 | class _UnsignedIntegerFieldClass( | |
159 | _UnsignedIntegerFieldClassConst, _IntegerFieldClass, _FieldClass | |
160 | ): | |
d47b87ac | 161 | _NAME = 'Unsigned integer' |
2ae9f48c SM |
162 | |
163 | ||
f0a42b33 FD |
164 | class _SignedIntegerFieldClassConst(_IntegerFieldClassConst, _FieldClassConst): |
165 | _NAME = 'Const signed integer' | |
166 | ||
167 | ||
168 | class _SignedIntegerFieldClass( | |
169 | _SignedIntegerFieldClassConst, _IntegerFieldClass, _FieldClass | |
170 | ): | |
d47b87ac | 171 | _NAME = 'Signed integer' |
2ae9f48c | 172 | |
af4bbfc7 | 173 | |
f0a42b33 FD |
174 | class _RealFieldClassConst(_FieldClassConst): |
175 | _NAME = 'Const real' | |
81447b5b | 176 | |
81447b5b | 177 | @property |
d47b87ac SM |
178 | def is_single_precision(self): |
179 | return native_bt.field_class_real_is_single_precision(self._ptr) | |
81447b5b | 180 | |
f0a42b33 FD |
181 | |
182 | class _RealFieldClass(_FieldClass, _RealFieldClassConst): | |
183 | _NAME = 'Real' | |
184 | ||
d47b87ac SM |
185 | def _is_single_precision(self, is_single_precision): |
186 | utils._check_bool(is_single_precision) | |
187 | native_bt.field_class_real_set_is_single_precision( | |
cfbd7cf3 FD |
188 | self._ptr, is_single_precision |
189 | ) | |
81447b5b | 190 | |
d47b87ac | 191 | _is_single_precision = property(fset=_is_single_precision) |
81447b5b PP |
192 | |
193 | ||
45c51519 PP |
194 | # an enumeration field class mapping does not have a reference count, so |
195 | # we copy the properties here to avoid eventual memory access errors. | |
196 | class _EnumerationFieldClassMapping: | |
d47b87ac | 197 | def __init__(self, mapping_ptr): |
45c51519 | 198 | base_mapping_ptr = self._as_enumeration_field_class_mapping_ptr(mapping_ptr) |
cfbd7cf3 FD |
199 | self._label = native_bt.field_class_enumeration_mapping_get_label( |
200 | base_mapping_ptr | |
201 | ) | |
45c51519 PP |
202 | assert self._label is not None |
203 | ranges_ptr = self._mapping_borrow_ranges_ptr(mapping_ptr) | |
204 | assert ranges_ptr is not None | |
205 | self._ranges = self._ranges_type._create_from_ptr_and_get_ref(ranges_ptr) | |
81447b5b PP |
206 | |
207 | @property | |
d47b87ac | 208 | def label(self): |
45c51519 | 209 | return self._label |
81447b5b | 210 | |
45c51519 PP |
211 | @property |
212 | def ranges(self): | |
213 | return self._ranges | |
81447b5b | 214 | |
81447b5b | 215 | |
f0a42b33 | 216 | class _UnsignedEnumerationFieldClassMappingConst(_EnumerationFieldClassMapping): |
3fb99a22 | 217 | _ranges_type = bt2_integer_range_set.UnsignedIntegerRangeSet |
cfbd7cf3 | 218 | _as_enumeration_field_class_mapping_ptr = staticmethod( |
9c08c816 | 219 | native_bt.field_class_enumeration_unsigned_mapping_as_mapping_const |
cfbd7cf3 FD |
220 | ) |
221 | _mapping_borrow_ranges_ptr = staticmethod( | |
9c08c816 | 222 | native_bt.field_class_enumeration_unsigned_mapping_borrow_ranges_const |
cfbd7cf3 | 223 | ) |
81447b5b | 224 | |
81447b5b | 225 | |
f0a42b33 | 226 | class _SignedEnumerationFieldClassMappingConst(_EnumerationFieldClassMapping): |
3fb99a22 | 227 | _ranges_type = bt2_integer_range_set.SignedIntegerRangeSet |
cfbd7cf3 | 228 | _as_enumeration_field_class_mapping_ptr = staticmethod( |
9c08c816 | 229 | native_bt.field_class_enumeration_signed_mapping_as_mapping_const |
cfbd7cf3 FD |
230 | ) |
231 | _mapping_borrow_ranges_ptr = staticmethod( | |
9c08c816 | 232 | native_bt.field_class_enumeration_signed_mapping_borrow_ranges_const |
cfbd7cf3 | 233 | ) |
81447b5b | 234 | |
81447b5b | 235 | |
f0a42b33 | 236 | class _EnumerationFieldClassConst(_IntegerFieldClassConst, collections.abc.Mapping): |
81447b5b | 237 | def __len__(self): |
b4f45851 | 238 | count = native_bt.field_class_enumeration_get_mapping_count(self._ptr) |
45c51519 | 239 | assert count >= 0 |
81447b5b PP |
240 | return count |
241 | ||
45c51519 | 242 | def mappings_for_value(self, value): |
f0a42b33 FD |
243 | self._check_int_type(value) |
244 | ||
185ecf64 | 245 | status, labels = self._get_mapping_labels_for_value(self._ptr, value) |
cfbd7cf3 FD |
246 | utils._handle_func_status( |
247 | status, 'cannot get mapping labels for value {}'.format(value) | |
248 | ) | |
45c51519 | 249 | return [self[label] for label in labels] |
81447b5b | 250 | |
d47b87ac SM |
251 | def __iter__(self): |
252 | for idx in range(len(self)): | |
f0a42b33 FD |
253 | mapping_ptr = self._borrow_mapping_ptr_by_index(self._ptr, idx) |
254 | yield self._mapping_pycls(mapping_ptr).label | |
81447b5b | 255 | |
45c51519 PP |
256 | def __getitem__(self, label): |
257 | utils._check_str(label) | |
f0a42b33 | 258 | mapping_ptr = self._borrow_mapping_ptr_by_label(self._ptr, label) |
81447b5b | 259 | |
f0a42b33 | 260 | if mapping_ptr is None: |
45c51519 PP |
261 | raise KeyError(label) |
262 | ||
f0a42b33 FD |
263 | return self._mapping_pycls(mapping_ptr) |
264 | ||
265 | ||
266 | class _EnumerationFieldClass(_EnumerationFieldClassConst, _IntegerFieldClass): | |
267 | def add_mapping(self, label, ranges): | |
268 | utils._check_str(label) | |
269 | utils._check_type(ranges, self._range_set_type) | |
270 | ||
271 | if label in self: | |
272 | raise ValueError("duplicate mapping label '{}'".format(label)) | |
273 | ||
274 | status = self._add_mapping(self._ptr, label, ranges._ptr) | |
275 | utils._handle_func_status( | |
276 | status, 'cannot add mapping to enumeration field class object' | |
277 | ) | |
81447b5b | 278 | |
d47b87ac | 279 | def __iadd__(self, mappings): |
45c51519 PP |
280 | for label, ranges in mappings: |
281 | self.add_mapping(label, ranges) | |
81447b5b | 282 | |
d47b87ac | 283 | return self |
81447b5b | 284 | |
81447b5b | 285 | |
f0a42b33 FD |
286 | class _UnsignedEnumerationFieldClassConst( |
287 | _EnumerationFieldClassConst, _UnsignedIntegerFieldClassConst | |
cfbd7cf3 | 288 | ): |
f0a42b33 | 289 | _NAME = 'Const nsigned enumeration' |
3fb99a22 | 290 | _range_set_type = bt2_integer_range_set.UnsignedIntegerRangeSet |
f0a42b33 FD |
291 | _borrow_mapping_ptr_by_label = staticmethod( |
292 | native_bt.field_class_enumeration_unsigned_borrow_mapping_by_label_const | |
293 | ) | |
294 | _borrow_mapping_ptr_by_index = staticmethod( | |
295 | native_bt.field_class_enumeration_unsigned_borrow_mapping_by_index_const | |
296 | ) | |
297 | _mapping_pycls = property(lambda _: _UnsignedEnumerationFieldClassMappingConst) | |
298 | _get_mapping_labels_for_value = staticmethod( | |
299 | native_bt.field_class_enumeration_unsigned_get_mapping_labels_for_value | |
300 | ) | |
301 | _check_int_type = staticmethod(utils._check_uint64) | |
81447b5b | 302 | |
45c51519 | 303 | |
f0a42b33 FD |
304 | class _UnsignedEnumerationFieldClass( |
305 | _UnsignedEnumerationFieldClassConst, | |
306 | _EnumerationFieldClass, | |
307 | _UnsignedIntegerFieldClass, | |
308 | ): | |
309 | _NAME = 'Unsigned enumeration' | |
310 | _add_mapping = staticmethod(native_bt.field_class_enumeration_unsigned_add_mapping) | |
45c51519 | 311 | |
81447b5b | 312 | |
f0a42b33 FD |
313 | class _SignedEnumerationFieldClassConst( |
314 | _EnumerationFieldClassConst, _SignedIntegerFieldClassConst | |
315 | ): | |
316 | _NAME = 'Const signed enumeration' | |
317 | _range_set_type = bt2_integer_range_set.SignedIntegerRangeSet | |
318 | _borrow_mapping_ptr_by_label = staticmethod( | |
319 | native_bt.field_class_enumeration_signed_borrow_mapping_by_label_const | |
320 | ) | |
321 | _borrow_mapping_ptr_by_index = staticmethod( | |
322 | native_bt.field_class_enumeration_signed_borrow_mapping_by_index_const | |
323 | ) | |
324 | _mapping_pycls = property(lambda _: _SignedEnumerationFieldClassMappingConst) | |
325 | _get_mapping_labels_for_value = staticmethod( | |
326 | native_bt.field_class_enumeration_signed_get_mapping_labels_for_value | |
327 | ) | |
328 | _check_int_type = staticmethod(utils._check_int64) | |
81447b5b PP |
329 | |
330 | ||
f0a42b33 FD |
331 | class _SignedEnumerationFieldClass( |
332 | _SignedEnumerationFieldClassConst, _EnumerationFieldClass, _SignedIntegerFieldClass | |
333 | ): | |
d47b87ac | 334 | _NAME = 'Signed enumeration' |
9c08c816 | 335 | _add_mapping = staticmethod(native_bt.field_class_enumeration_signed_add_mapping) |
81447b5b | 336 | |
81447b5b | 337 | |
f0a42b33 FD |
338 | class _StringFieldClassConst(_FieldClassConst): |
339 | _NAME = 'Const string' | |
81447b5b | 340 | |
d47b87ac | 341 | |
f0a42b33 | 342 | class _StringFieldClass(_StringFieldClassConst, _FieldClass): |
d47b87ac | 343 | _NAME = 'String' |
81447b5b PP |
344 | |
345 | ||
f0a42b33 FD |
346 | class _StructureFieldClassMemberConst: |
347 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
348 | _create_field_class_from_const_ptr_and_get_ref | |
349 | ) | |
350 | _borrow_field_class_ptr = staticmethod( | |
351 | native_bt.field_class_structure_member_borrow_field_class_const | |
352 | ) | |
353 | _borrow_user_attributes_ptr = staticmethod( | |
354 | native_bt.field_class_structure_member_borrow_user_attributes_const | |
355 | ) | |
356 | _create_value_from_ptr_and_get_ref = staticmethod( | |
357 | bt2_value._create_from_const_ptr_and_get_ref | |
358 | ) | |
359 | ||
5783664e PP |
360 | def __init__(self, owning_struct_fc, member_ptr): |
361 | # this field class owns the member; keeping it here maintains | |
362 | # the member alive as members are not shared objects | |
363 | self._owning_struct_fc = owning_struct_fc | |
364 | self._ptr = member_ptr | |
45c51519 PP |
365 | |
366 | @property | |
367 | def name(self): | |
5783664e PP |
368 | name = native_bt.field_class_structure_member_get_name(self._ptr) |
369 | assert name is not None | |
370 | return name | |
45c51519 PP |
371 | |
372 | @property | |
373 | def field_class(self): | |
f0a42b33 | 374 | fc_ptr = self._borrow_field_class_ptr(self._ptr) |
5783664e | 375 | assert fc_ptr is not None |
f0a42b33 | 376 | return self._create_field_class_from_ptr_and_get_ref(fc_ptr) |
5783664e PP |
377 | |
378 | @property | |
379 | def user_attributes(self): | |
f0a42b33 | 380 | ptr = self._borrow_user_attributes_ptr(self._ptr) |
5783664e | 381 | assert ptr is not None |
f0a42b33 FD |
382 | return self._create_value_from_ptr_and_get_ref(ptr) |
383 | ||
384 | ||
385 | class _StructureFieldClassMember(_StructureFieldClassMemberConst): | |
386 | _borrow_field_class_ptr = staticmethod( | |
387 | native_bt.field_class_structure_member_borrow_field_class | |
388 | ) | |
389 | _borrow_user_attributes_ptr = staticmethod( | |
390 | native_bt.field_class_structure_member_borrow_user_attributes | |
391 | ) | |
392 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
393 | _create_field_class_from_ptr_and_get_ref | |
394 | ) | |
395 | _create_value_from_ptr_and_get_ref = staticmethod( | |
396 | bt2_value._create_from_ptr_and_get_ref | |
397 | ) | |
5783664e PP |
398 | |
399 | def _user_attributes(self, user_attributes): | |
400 | value = bt2_value.create_value(user_attributes) | |
401 | utils._check_type(value, bt2_value.MapValue) | |
402 | native_bt.field_class_structure_member_set_user_attributes( | |
403 | self._ptr, value._ptr | |
404 | ) | |
405 | ||
406 | _user_attributes = property(fset=_user_attributes) | |
45c51519 PP |
407 | |
408 | ||
f0a42b33 FD |
409 | class _StructureFieldClassConst(_FieldClassConst, collections.abc.Mapping): |
410 | _NAME = 'Const structure' | |
411 | _borrow_member_ptr_by_index = staticmethod( | |
412 | native_bt.field_class_structure_borrow_member_by_index_const | |
413 | ) | |
414 | _borrow_member_ptr_by_name = staticmethod( | |
415 | native_bt.field_class_structure_borrow_member_by_name_const | |
416 | ) | |
417 | _structure_member_field_class_pycls = property( | |
418 | lambda _: _StructureFieldClassMemberConst | |
419 | ) | |
420 | ||
421 | def __len__(self): | |
422 | count = native_bt.field_class_structure_get_member_count(self._ptr) | |
423 | assert count >= 0 | |
424 | return count | |
425 | ||
426 | def __getitem__(self, key): | |
427 | if not isinstance(key, str): | |
428 | raise TypeError( | |
429 | "key must be a 'str' object, got '{}'".format(key.__class__.__name__) | |
430 | ) | |
431 | ||
432 | member_ptr = self._borrow_member_ptr_by_name(self._ptr, key) | |
433 | ||
434 | if member_ptr is None: | |
435 | raise KeyError(key) | |
436 | ||
437 | return self._structure_member_field_class_pycls(self, member_ptr) | |
438 | ||
439 | def __iter__(self): | |
440 | for idx in range(len(self)): | |
441 | member_ptr = self._borrow_member_ptr_by_index(self._ptr, idx) | |
442 | assert member_ptr is not None | |
443 | yield native_bt.field_class_structure_member_get_name(member_ptr) | |
444 | ||
445 | def member_at_index(self, index): | |
446 | utils._check_uint64(index) | |
447 | ||
448 | if index >= len(self): | |
449 | raise IndexError | |
450 | ||
451 | member_ptr = self._borrow_member_ptr_by_index(self._ptr, index) | |
452 | assert member_ptr is not None | |
453 | return self._structure_member_field_class_pycls(self, member_ptr) | |
454 | ||
455 | ||
456 | class _StructureFieldClass(_StructureFieldClassConst, _FieldClass): | |
45c51519 | 457 | _NAME = 'Structure' |
f0a42b33 FD |
458 | _borrow_member_by_index = staticmethod( |
459 | native_bt.field_class_structure_borrow_member_by_index | |
460 | ) | |
461 | _borrow_member_ptr_by_name = staticmethod( | |
462 | native_bt.field_class_structure_borrow_member_by_name | |
463 | ) | |
464 | _structure_member_field_class_pycls = property(lambda _: _StructureFieldClassMember) | |
45c51519 | 465 | |
5783664e | 466 | def append_member(self, name, field_class, user_attributes=None): |
45c51519 PP |
467 | utils._check_str(name) |
468 | utils._check_type(field_class, _FieldClass) | |
469 | ||
470 | if name in self: | |
ce4923b0 | 471 | raise ValueError("duplicate member name '{}'".format(name)) |
45c51519 | 472 | |
5783664e PP |
473 | user_attributes_value = None |
474 | ||
475 | if user_attributes is not None: | |
476 | # check now that user attributes are valid | |
477 | user_attributes_value = bt2.create_value(user_attributes) | |
478 | ||
cfbd7cf3 FD |
479 | status = native_bt.field_class_structure_append_member( |
480 | self._ptr, name, field_class._ptr | |
481 | ) | |
482 | utils._handle_func_status( | |
483 | status, 'cannot append member to structure field class object' | |
484 | ) | |
45c51519 | 485 | |
5783664e PP |
486 | if user_attributes is not None: |
487 | self[name]._user_attributes = user_attributes_value | |
488 | ||
45c51519 PP |
489 | def __iadd__(self, members): |
490 | for name, field_class in members: | |
491 | self.append_member(name, field_class) | |
81447b5b PP |
492 | |
493 | return self | |
494 | ||
45c51519 | 495 | |
f0a42b33 FD |
496 | class _OptionFieldClassConst(_FieldClassConst): |
497 | _NAME = 'Const Option' | |
498 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
499 | _create_field_class_from_const_ptr_and_get_ref | |
500 | ) | |
501 | _borrow_field_class_ptr = staticmethod( | |
502 | native_bt.field_class_option_borrow_field_class_const | |
503 | ) | |
504 | _borrow_selector_field_path = staticmethod( | |
505 | native_bt.field_class_option_borrow_selector_field_path_const | |
506 | ) | |
81447b5b | 507 | |
cec0261d PP |
508 | @property |
509 | def field_class(self): | |
f0a42b33 FD |
510 | elem_fc_ptr = self._borrow_field_class_ptr(self._ptr) |
511 | return self._create_field_class_from_ptr_and_get_ref(elem_fc_ptr) | |
cec0261d PP |
512 | |
513 | @property | |
514 | def selector_field_path(self): | |
f0a42b33 | 515 | ptr = self._borrow_selector_field_path(self._ptr) |
cec0261d PP |
516 | if ptr is None: |
517 | return | |
518 | ||
519 | return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr) | |
520 | ||
521 | ||
f0a42b33 FD |
522 | class _OptionFieldClass(_OptionFieldClassConst, _FieldClass): |
523 | _NAME = 'Option' | |
524 | _borrow_field_class_ptr = staticmethod( | |
525 | native_bt.field_class_option_borrow_field_class | |
526 | ) | |
527 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
528 | _create_field_class_from_ptr_and_get_ref | |
529 | ) | |
530 | ||
531 | ||
532 | class _VariantFieldClassOptionConst: | |
533 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
534 | _create_field_class_from_const_ptr_and_get_ref | |
535 | ) | |
536 | _borrow_field_class_ptr = staticmethod( | |
537 | native_bt.field_class_variant_option_borrow_field_class_const | |
538 | ) | |
539 | _borrow_user_attributes_ptr = staticmethod( | |
540 | native_bt.field_class_variant_option_borrow_user_attributes_const | |
541 | ) | |
542 | _create_value_from_ptr_and_get_ref = staticmethod( | |
543 | bt2_value._create_from_const_ptr_and_get_ref | |
544 | ) | |
545 | ||
5783664e PP |
546 | def __init__(self, owning_var_fc, option_ptr): |
547 | # this field class owns the option; keeping it here maintains | |
548 | # the option alive as options are not shared objects | |
549 | self._owning_var_fc = owning_var_fc | |
550 | self._ptr = option_ptr | |
81447b5b | 551 | |
45c51519 PP |
552 | @property |
553 | def name(self): | |
5783664e PP |
554 | name = native_bt.field_class_variant_option_get_name(self._ptr) |
555 | assert name is not None | |
556 | return name | |
81447b5b | 557 | |
45c51519 PP |
558 | @property |
559 | def field_class(self): | |
f0a42b33 | 560 | fc_ptr = self._borrow_field_class_ptr(self._ptr) |
5783664e | 561 | assert fc_ptr is not None |
f0a42b33 | 562 | return self._create_field_class_from_ptr_and_get_ref(fc_ptr) |
81447b5b | 563 | |
5783664e PP |
564 | @property |
565 | def user_attributes(self): | |
f0a42b33 | 566 | ptr = self._borrow_user_attributes_ptr(self._ptr) |
5783664e | 567 | assert ptr is not None |
f0a42b33 FD |
568 | return self._create_value_from_ptr_and_get_ref(ptr) |
569 | ||
570 | ||
571 | class _VariantFieldClassOption(_VariantFieldClassOptionConst): | |
572 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
573 | _create_field_class_from_ptr_and_get_ref | |
574 | ) | |
575 | _borrow_field_class_ptr = staticmethod( | |
576 | native_bt.field_class_variant_option_borrow_field_class | |
577 | ) | |
578 | _borrow_user_attributes_ptr = staticmethod( | |
579 | native_bt.field_class_variant_option_borrow_user_attributes_const | |
580 | ) | |
581 | _create_value_from_ptr_and_get_ref = staticmethod( | |
582 | bt2_value._create_from_ptr_and_get_ref | |
583 | ) | |
81447b5b | 584 | |
5783664e PP |
585 | def _user_attributes(self, user_attributes): |
586 | value = bt2_value.create_value(user_attributes) | |
587 | utils._check_type(value, bt2_value.MapValue) | |
588 | native_bt.field_class_variant_option_set_user_attributes(self._ptr, value._ptr) | |
81447b5b | 589 | |
5783664e | 590 | _user_attributes = property(fset=_user_attributes) |
81447b5b PP |
591 | |
592 | ||
f0a42b33 FD |
593 | class _VariantFieldClassWithSelectorOptionConst(_VariantFieldClassOptionConst): |
594 | def __init__(self, owning_var_fc, spec_opt_ptr): | |
595 | self._spec_ptr = spec_opt_ptr | |
596 | super().__init__(owning_var_fc, self._as_option_ptr(spec_opt_ptr)) | |
597 | ||
598 | @property | |
599 | def ranges(self): | |
600 | range_set_ptr = self._borrow_ranges_ptr(self._spec_ptr) | |
601 | assert range_set_ptr is not None | |
602 | return self._range_set_type._create_from_ptr_and_get_ref(range_set_ptr) | |
603 | ||
604 | ||
605 | class _VariantFieldClassWithSelectorOption( | |
606 | _VariantFieldClassWithSelectorOptionConst, _VariantFieldClassOption | |
607 | ): | |
608 | pass | |
609 | ||
610 | ||
611 | class _VariantFieldClassWithSignedSelectorOptionConst( | |
612 | _VariantFieldClassWithSelectorOptionConst | |
613 | ): | |
614 | _as_option_ptr = staticmethod( | |
615 | native_bt.field_class_variant_with_selector_signed_option_as_option_const | |
616 | ) | |
617 | _borrow_ranges_ptr = staticmethod( | |
618 | native_bt.field_class_variant_with_selector_signed_option_borrow_ranges_const | |
619 | ) | |
620 | _range_set_type = bt2_integer_range_set.SignedIntegerRangeSet | |
621 | ||
622 | ||
623 | class _VariantFieldClassWithSignedSelectorOption( | |
624 | _VariantFieldClassWithSignedSelectorOptionConst, | |
625 | _VariantFieldClassWithSelectorOption, | |
626 | ): | |
627 | pass | |
628 | ||
629 | ||
630 | class _VariantFieldClassWithUnsignedSelectorOptionConst( | |
631 | _VariantFieldClassWithSelectorOptionConst | |
632 | ): | |
633 | _as_option_ptr = staticmethod( | |
634 | native_bt.field_class_variant_with_selector_unsigned_option_as_option_const | |
635 | ) | |
636 | _borrow_ranges_ptr = staticmethod( | |
637 | native_bt.field_class_variant_with_selector_unsigned_option_borrow_ranges_const | |
638 | ) | |
639 | _range_set_type = bt2_integer_range_set.UnsignedIntegerRangeSet | |
640 | ||
641 | ||
642 | class _VariantFieldClassWithUnsignedSelectorOption( | |
643 | _VariantFieldClassWithUnsignedSelectorOptionConst, | |
644 | _VariantFieldClassWithSelectorOption, | |
645 | ): | |
646 | pass | |
647 | ||
648 | ||
649 | class _VariantFieldClassConst(_FieldClassConst, collections.abc.Mapping): | |
650 | _NAME = 'Const Variant' | |
651 | _borrow_option_ptr_by_name = staticmethod( | |
cfbd7cf3 FD |
652 | native_bt.field_class_variant_borrow_option_by_name_const |
653 | ) | |
f0a42b33 | 654 | _borrow_option_ptr_by_index = staticmethod( |
cfbd7cf3 FD |
655 | native_bt.field_class_variant_borrow_option_by_index_const |
656 | ) | |
f0a42b33 | 657 | _variant_option_pycls = _VariantFieldClassOptionConst |
811644b8 | 658 | |
45c51519 PP |
659 | @staticmethod |
660 | def _as_option_ptr(opt_ptr): | |
661 | return opt_ptr | |
662 | ||
663 | def _create_option_from_ptr(self, opt_ptr): | |
f0a42b33 | 664 | return self._variant_option_pycls(self, opt_ptr) |
45c51519 PP |
665 | |
666 | def __len__(self): | |
667 | count = native_bt.field_class_variant_get_option_count(self._ptr) | |
668 | assert count >= 0 | |
669 | return count | |
670 | ||
671 | def __getitem__(self, key): | |
672 | if not isinstance(key, str): | |
cfbd7cf3 FD |
673 | raise TypeError( |
674 | "key must be a 'str' object, got '{}'".format(key.__class__.__name__) | |
675 | ) | |
45c51519 | 676 | |
f0a42b33 | 677 | opt_ptr = self._borrow_option_ptr_by_name(self._ptr, key) |
45c51519 PP |
678 | |
679 | if opt_ptr is None: | |
680 | raise KeyError(key) | |
681 | ||
682 | return self._create_option_from_ptr(opt_ptr) | |
683 | ||
684 | def __iter__(self): | |
685 | for idx in range(len(self)): | |
f0a42b33 | 686 | opt_ptr = self._borrow_option_ptr_by_index(self._ptr, idx) |
45c51519 PP |
687 | assert opt_ptr is not None |
688 | base_opt_ptr = self._as_option_ptr(opt_ptr) | |
689 | yield native_bt.field_class_variant_option_get_name(base_opt_ptr) | |
811644b8 | 690 | |
d47b87ac | 691 | def option_at_index(self, index): |
45c51519 PP |
692 | utils._check_uint64(index) |
693 | ||
694 | if index >= len(self): | |
695 | raise IndexError | |
696 | ||
f0a42b33 | 697 | opt_ptr = self._borrow_option_ptr_by_index(self._ptr, index) |
45c51519 PP |
698 | assert opt_ptr is not None |
699 | return self._create_option_from_ptr(opt_ptr) | |
700 | ||
701 | ||
f0a42b33 FD |
702 | class _VariantFieldClass(_VariantFieldClassConst, _FieldClass, collections.abc.Mapping): |
703 | _NAME = 'Variant' | |
704 | _borrow_option_ptr_by_name = staticmethod( | |
705 | native_bt.field_class_variant_borrow_option_by_name | |
706 | ) | |
707 | _borrow_option_ptr_by_index = staticmethod( | |
708 | native_bt.field_class_variant_borrow_option_by_index | |
709 | ) | |
710 | _variant_option_pycls = _VariantFieldClassOption | |
711 | ||
712 | ||
713 | class _VariantFieldClassWithoutSelectorConst(_VariantFieldClassConst): | |
714 | _NAME = 'Const Variant (without selector)' | |
715 | ||
716 | ||
717 | class _VariantFieldClassWithoutSelector( | |
718 | _VariantFieldClassWithoutSelectorConst, _VariantFieldClass | |
719 | ): | |
45c51519 PP |
720 | _NAME = 'Variant (without selector)' |
721 | ||
5783664e | 722 | def append_option(self, name, field_class, user_attributes=None): |
45c51519 PP |
723 | utils._check_str(name) |
724 | utils._check_type(field_class, _FieldClass) | |
725 | ||
726 | if name in self: | |
ce4923b0 | 727 | raise ValueError("duplicate option name '{}'".format(name)) |
45c51519 | 728 | |
5783664e PP |
729 | user_attributes_value = None |
730 | ||
731 | if user_attributes is not None: | |
732 | # check now that user attributes are valid | |
733 | user_attributes_value = bt2.create_value(user_attributes) | |
734 | ||
cfbd7cf3 FD |
735 | status = native_bt.field_class_variant_without_selector_append_option( |
736 | self._ptr, name, field_class._ptr | |
737 | ) | |
738 | utils._handle_func_status( | |
739 | status, 'cannot append option to variant field class object' | |
740 | ) | |
45c51519 | 741 | |
5783664e PP |
742 | if user_attributes is not None: |
743 | self[name]._user_attributes = user_attributes_value | |
744 | ||
45c51519 PP |
745 | def __iadd__(self, options): |
746 | for name, field_class in options: | |
747 | self.append_option(name, field_class) | |
748 | ||
749 | return self | |
750 | ||
751 | ||
f0a42b33 FD |
752 | class _VariantFieldClassWithSelectorConst(_VariantFieldClassConst): |
753 | _NAME = 'Const Variant (with selector)' | |
81447b5b PP |
754 | |
755 | @property | |
d47b87ac | 756 | def selector_field_path(self): |
cfbd7cf3 FD |
757 | ptr = native_bt.field_class_variant_with_selector_borrow_selector_field_path_const( |
758 | self._ptr | |
759 | ) | |
45c51519 | 760 | |
d47b87ac | 761 | if ptr is None: |
811644b8 PP |
762 | return |
763 | ||
3fb99a22 | 764 | return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr) |
81447b5b | 765 | |
f0a42b33 FD |
766 | |
767 | class _VariantFieldClassWithSelector( | |
768 | _VariantFieldClassWithSelectorConst, _VariantFieldClass | |
769 | ): | |
770 | _NAME = 'Variant (with selector)' | |
771 | ||
5783664e | 772 | def append_option(self, name, field_class, ranges, user_attributes=None): |
45c51519 PP |
773 | utils._check_str(name) |
774 | utils._check_type(field_class, _FieldClass) | |
f0a42b33 | 775 | utils._check_type(ranges, self._variant_option_pycls._range_set_type) |
45c51519 PP |
776 | |
777 | if name in self: | |
ce4923b0 | 778 | raise ValueError("duplicate option name '{}'".format(name)) |
45c51519 PP |
779 | |
780 | if len(ranges) == 0: | |
781 | raise ValueError('range set is empty') | |
782 | ||
5783664e PP |
783 | user_attributes_value = None |
784 | ||
785 | if user_attributes is not None: | |
786 | # check now that user attributes are valid | |
787 | user_attributes_value = bt2.create_value(user_attributes) | |
788 | ||
45c51519 PP |
789 | # TODO: check overlaps (precondition of self._append_option()) |
790 | ||
791 | status = self._append_option(self._ptr, name, field_class._ptr, ranges._ptr) | |
cfbd7cf3 FD |
792 | utils._handle_func_status( |
793 | status, 'cannot append option to variant field class object' | |
794 | ) | |
45c51519 | 795 | |
5783664e PP |
796 | if user_attributes is not None: |
797 | self[name]._user_attributes = user_attributes_value | |
798 | ||
45c51519 PP |
799 | def __iadd__(self, options): |
800 | for name, field_class, ranges in options: | |
801 | self.append_option(name, field_class, ranges) | |
802 | ||
803 | return self | |
804 | ||
805 | ||
f0a42b33 FD |
806 | class _VariantFieldClassWithUnsignedSelectorConst(_VariantFieldClassWithSelectorConst): |
807 | _NAME = 'Const Variant (with unsigned selector)' | |
808 | _borrow_option_ptr_by_name = staticmethod( | |
9c08c816 | 809 | native_bt.field_class_variant_with_selector_unsigned_borrow_option_by_name_const |
cfbd7cf3 | 810 | ) |
f0a42b33 | 811 | _borrow_option_ptr_by_index = staticmethod( |
9c08c816 | 812 | native_bt.field_class_variant_with_selector_unsigned_borrow_option_by_index_const |
cfbd7cf3 | 813 | ) |
cfbd7cf3 | 814 | _append_option = staticmethod( |
9c08c816 | 815 | native_bt.field_class_variant_with_selector_unsigned_append_option |
cfbd7cf3 | 816 | ) |
f0a42b33 FD |
817 | _variant_option_pycls = _VariantFieldClassWithUnsignedSelectorOptionConst |
818 | _as_option_ptr = staticmethod(_variant_option_pycls._as_option_ptr) | |
45c51519 | 819 | |
81447b5b | 820 | |
f0a42b33 FD |
821 | class _VariantFieldClassWithUnsignedSelector( |
822 | _VariantFieldClassWithUnsignedSelectorConst, _VariantFieldClassWithSelector | |
823 | ): | |
824 | _NAME = 'Variant (with unsigned selector)' | |
825 | _variant_option_pycls = _VariantFieldClassWithUnsignedSelectorOption | |
826 | _as_option_ptr = staticmethod(_variant_option_pycls._as_option_ptr) | |
827 | ||
828 | ||
829 | class _VariantFieldClassWithSignedSelectorConst(_VariantFieldClassWithSelectorConst): | |
830 | _NAME = 'Const Variant (with signed selector)' | |
831 | _borrow_option_ptr_by_name = staticmethod( | |
9c08c816 | 832 | native_bt.field_class_variant_with_selector_signed_borrow_option_by_name_const |
cfbd7cf3 | 833 | ) |
f0a42b33 | 834 | _borrow_option_ptr_by_index = staticmethod( |
9c08c816 | 835 | native_bt.field_class_variant_with_selector_signed_borrow_option_by_index_const |
cfbd7cf3 | 836 | ) |
cfbd7cf3 | 837 | _append_option = staticmethod( |
9c08c816 | 838 | native_bt.field_class_variant_with_selector_signed_append_option |
cfbd7cf3 | 839 | ) |
f0a42b33 FD |
840 | _variant_option_pycls = _VariantFieldClassWithSignedSelectorOptionConst |
841 | _as_option_ptr = staticmethod(_variant_option_pycls._as_option_ptr) | |
842 | ||
843 | ||
844 | class _VariantFieldClassWithSignedSelector( | |
845 | _VariantFieldClassWithSignedSelectorConst, _VariantFieldClassWithSelector | |
846 | ): | |
847 | _NAME = 'Variant (with signed selector)' | |
848 | _variant_option_pycls = _VariantFieldClassWithSignedSelectorOption | |
849 | _as_option_ptr = staticmethod(_variant_option_pycls._as_option_ptr) | |
811644b8 | 850 | |
81447b5b | 851 | |
f0a42b33 FD |
852 | class _ArrayFieldClassConst(_FieldClassConst): |
853 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
854 | _create_field_class_from_const_ptr_and_get_ref | |
855 | ) | |
856 | _borrow_element_field_class = staticmethod( | |
857 | native_bt.field_class_array_borrow_element_field_class_const | |
858 | ) | |
859 | ||
d47b87ac SM |
860 | @property |
861 | def element_field_class(self): | |
f0a42b33 FD |
862 | elem_fc_ptr = self._borrow_element_field_class(self._ptr) |
863 | return self._create_field_class_from_ptr_and_get_ref(elem_fc_ptr) | |
864 | ||
865 | ||
866 | class _ArrayFieldClass(_ArrayFieldClassConst, _FieldClass): | |
867 | _create_field_class_from_ptr_and_get_ref = staticmethod( | |
868 | _create_field_class_from_ptr_and_get_ref | |
869 | ) | |
870 | _borrow_element_field_class = staticmethod( | |
871 | native_bt.field_class_array_borrow_element_field_class | |
872 | ) | |
81447b5b | 873 | |
81447b5b | 874 | |
f0a42b33 FD |
875 | class _StaticArrayFieldClassConst(_ArrayFieldClassConst): |
876 | _NAME = 'Const static array' | |
877 | ||
81447b5b PP |
878 | @property |
879 | def length(self): | |
9c08c816 | 880 | return native_bt.field_class_array_static_get_length(self._ptr) |
81447b5b PP |
881 | |
882 | ||
f0a42b33 FD |
883 | class _StaticArrayFieldClass(_StaticArrayFieldClassConst, _ArrayFieldClass): |
884 | _NAME = 'Static array' | |
885 | ||
886 | ||
887 | class _DynamicArrayFieldClassConst(_ArrayFieldClassConst): | |
888 | _NAME = 'Const dynamic array' | |
889 | ||
d47b87ac SM |
890 | @property |
891 | def length_field_path(self): | |
9c08c816 | 892 | ptr = native_bt.field_class_array_dynamic_borrow_length_field_path_const( |
cfbd7cf3 FD |
893 | self._ptr |
894 | ) | |
d47b87ac SM |
895 | if ptr is None: |
896 | return | |
81447b5b | 897 | |
3fb99a22 | 898 | return bt2_field_path._FieldPath._create_from_ptr_and_get_ref(ptr) |
81447b5b | 899 | |
81447b5b | 900 | |
f0a42b33 FD |
901 | class _DynamicArrayFieldClass(_DynamicArrayFieldClassConst, _ArrayFieldClass): |
902 | _NAME = 'Dynamic Array' | |
903 | ||
904 | ||
905 | _FIELD_CLASS_TYPE_TO_CONST_OBJ = { | |
906 | native_bt.FIELD_CLASS_TYPE_BOOL: _BoolFieldClassConst, | |
907 | native_bt.FIELD_CLASS_TYPE_BIT_ARRAY: _BitArrayFieldClassConst, | |
908 | native_bt.FIELD_CLASS_TYPE_UNSIGNED_INTEGER: _UnsignedIntegerFieldClassConst, | |
909 | native_bt.FIELD_CLASS_TYPE_SIGNED_INTEGER: _SignedIntegerFieldClassConst, | |
910 | native_bt.FIELD_CLASS_TYPE_REAL: _RealFieldClassConst, | |
911 | native_bt.FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION: _UnsignedEnumerationFieldClassConst, | |
912 | native_bt.FIELD_CLASS_TYPE_SIGNED_ENUMERATION: _SignedEnumerationFieldClassConst, | |
913 | native_bt.FIELD_CLASS_TYPE_STRING: _StringFieldClassConst, | |
914 | native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureFieldClassConst, | |
915 | native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayFieldClassConst, | |
916 | native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayFieldClassConst, | |
917 | native_bt.FIELD_CLASS_TYPE_OPTION: _OptionFieldClassConst, | |
918 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantFieldClassWithoutSelectorConst, | |
919 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantFieldClassWithUnsignedSelectorConst, | |
920 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantFieldClassWithSignedSelectorConst, | |
921 | } | |
922 | ||
3cdfbaea | 923 | _FIELD_CLASS_TYPE_TO_OBJ = { |
aae30e61 | 924 | native_bt.FIELD_CLASS_TYPE_BOOL: _BoolFieldClass, |
ead8c3d4 | 925 | native_bt.FIELD_CLASS_TYPE_BIT_ARRAY: _BitArrayFieldClass, |
d47b87ac SM |
926 | native_bt.FIELD_CLASS_TYPE_UNSIGNED_INTEGER: _UnsignedIntegerFieldClass, |
927 | native_bt.FIELD_CLASS_TYPE_SIGNED_INTEGER: _SignedIntegerFieldClass, | |
928 | native_bt.FIELD_CLASS_TYPE_REAL: _RealFieldClass, | |
929 | native_bt.FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION: _UnsignedEnumerationFieldClass, | |
930 | native_bt.FIELD_CLASS_TYPE_SIGNED_ENUMERATION: _SignedEnumerationFieldClass, | |
931 | native_bt.FIELD_CLASS_TYPE_STRING: _StringFieldClass, | |
3cdfbaea | 932 | native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureFieldClass, |
d47b87ac SM |
933 | native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayFieldClass, |
934 | native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayFieldClass, | |
cec0261d | 935 | native_bt.FIELD_CLASS_TYPE_OPTION: _OptionFieldClass, |
45c51519 PP |
936 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantFieldClassWithoutSelector, |
937 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantFieldClassWithUnsignedSelector, | |
938 | native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantFieldClassWithSignedSelector, | |
81447b5b | 939 | } |