sink.ctf.fs: write bit array field classes and fields
[babeltrace.git] / src / bindings / python / bt2 / bt2 / field.py
CommitLineData
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
23from bt2 import native_bt, object, utils
3fb99a22 24from bt2 import field_class as bt2_field_class
81447b5b
PP
25import collections.abc
26import functools
27import numbers
28import math
81447b5b
PP
29
30
2ae9f48c
SM
31def _create_field_from_ptr(ptr, owner_ptr, owner_get_ref, owner_put_ref):
32 field_class_ptr = native_bt.field_borrow_class_const(ptr)
2ae9f48c
SM
33 typeid = native_bt.field_class_get_type(field_class_ptr)
34 field = _TYPE_ID_TO_OBJ[typeid]._create_from_ptr_and_get_ref(
cfbd7cf3
FD
35 ptr, owner_ptr, owner_get_ref, owner_put_ref
36 )
81447b5b
PP
37 return field
38
39
cec0261d
PP
40# Get the "effective" field of `field`. If `field` is a variant, return
41# the currently selected field. If `field` is an option, return the
42# content field. If `field` is of any other type, return `field`
1eccc498 43# directly.
81447b5b 44
cfbd7cf3 45
1eccc498 46def _get_leaf_field(field):
cec0261d
PP
47 if isinstance(field, _VariantField):
48 return _get_leaf_field(field.selected_option)
1eccc498 49
cec0261d
PP
50 if isinstance(field, _OptionField):
51 return _get_leaf_field(field.field)
52
53 return field
81447b5b 54
e1c6bebd 55
1eccc498
SM
56class _Field(object._UniqueObject):
57 def __eq__(self, other):
e1c6bebd
JG
58 other = _get_leaf_field(other)
59 return self._spec_eq(other)
60
81447b5b 61 @property
b4f45851 62 def field_class(self):
838a5a52
SM
63 field_class_ptr = native_bt.field_borrow_class_const(self._ptr)
64 assert field_class_ptr is not None
3fb99a22 65 return bt2_field_class._create_field_class_from_ptr_and_get_ref(field_class_ptr)
81447b5b 66
12bf0d88
JG
67 def _repr(self):
68 raise NotImplementedError
69
70 def __repr__(self):
1eccc498 71 return self._repr()
12bf0d88 72
81447b5b
PP
73
74@functools.total_ordering
75class _NumericField(_Field):
76 @staticmethod
77 def _extract_value(other):
aae30e61
PP
78 if isinstance(other, _BoolField) or isinstance(other, bool):
79 return bool(other)
81447b5b
PP
80
81 if isinstance(other, numbers.Integral):
82 return int(other)
83
84 if isinstance(other, numbers.Real):
85 return float(other)
86
87 if isinstance(other, numbers.Complex):
88 return complex(other)
89
cfbd7cf3
FD
90 raise TypeError(
91 "'{}' object is not a number object".format(other.__class__.__name__)
92 )
81447b5b
PP
93
94 def __int__(self):
e1c6bebd 95 return int(self._value)
81447b5b
PP
96
97 def __float__(self):
e1c6bebd 98 return float(self._value)
81447b5b 99
12bf0d88 100 def _repr(self):
5abb9e33 101 return repr(self._value)
81447b5b
PP
102
103 def __lt__(self, other):
104 if not isinstance(other, numbers.Number):
cfbd7cf3
FD
105 raise TypeError(
106 'unorderable types: {}() < {}()'.format(
107 self.__class__.__name__, other.__class__.__name__
108 )
109 )
81447b5b 110
09a926c1 111 return self._value < self._extract_value(other)
81447b5b 112
e1c6bebd 113 def _spec_eq(self, other):
f11ed062
PP
114 try:
115 return self._value == self._extract_value(other)
116 except:
117 return False
81447b5b
PP
118
119 def __rmod__(self, other):
e1c6bebd 120 return self._extract_value(other) % self._value
81447b5b
PP
121
122 def __mod__(self, other):
e1c6bebd 123 return self._value % self._extract_value(other)
81447b5b
PP
124
125 def __rfloordiv__(self, other):
e1c6bebd 126 return self._extract_value(other) // self._value
81447b5b
PP
127
128 def __floordiv__(self, other):
e1c6bebd 129 return self._value // self._extract_value(other)
81447b5b
PP
130
131 def __round__(self, ndigits=None):
132 if ndigits is None:
e1c6bebd 133 return round(self._value)
81447b5b 134 else:
e1c6bebd 135 return round(self._value, ndigits)
81447b5b
PP
136
137 def __ceil__(self):
e1c6bebd 138 return math.ceil(self._value)
81447b5b
PP
139
140 def __floor__(self):
e1c6bebd 141 return math.floor(self._value)
81447b5b
PP
142
143 def __trunc__(self):
e1c6bebd 144 return int(self._value)
81447b5b
PP
145
146 def __abs__(self):
e1c6bebd 147 return abs(self._value)
81447b5b
PP
148
149 def __add__(self, other):
e1c6bebd 150 return self._value + self._extract_value(other)
81447b5b
PP
151
152 def __radd__(self, other):
153 return self.__add__(other)
154
155 def __neg__(self):
e1c6bebd 156 return -self._value
81447b5b
PP
157
158 def __pos__(self):
e1c6bebd 159 return +self._value
81447b5b
PP
160
161 def __mul__(self, other):
e1c6bebd 162 return self._value * self._extract_value(other)
81447b5b
PP
163
164 def __rmul__(self, other):
165 return self.__mul__(other)
166
167 def __truediv__(self, other):
e1c6bebd 168 return self._value / self._extract_value(other)
81447b5b
PP
169
170 def __rtruediv__(self, other):
e1c6bebd 171 return self._extract_value(other) / self._value
81447b5b
PP
172
173 def __pow__(self, exponent):
e1c6bebd 174 return self._value ** self._extract_value(exponent)
81447b5b
PP
175
176 def __rpow__(self, base):
e1c6bebd 177 return self._extract_value(base) ** self._value
81447b5b 178
81447b5b
PP
179
180class _IntegralField(_NumericField, numbers.Integral):
181 def __lshift__(self, other):
e1c6bebd 182 return self._value << self._extract_value(other)
81447b5b
PP
183
184 def __rlshift__(self, other):
e1c6bebd 185 return self._extract_value(other) << self._value
81447b5b
PP
186
187 def __rshift__(self, other):
e1c6bebd 188 return self._value >> self._extract_value(other)
81447b5b
PP
189
190 def __rrshift__(self, other):
e1c6bebd 191 return self._extract_value(other) >> self._value
81447b5b
PP
192
193 def __and__(self, other):
e1c6bebd 194 return self._value & self._extract_value(other)
81447b5b
PP
195
196 def __rand__(self, other):
e1c6bebd 197 return self._extract_value(other) & self._value
81447b5b
PP
198
199 def __xor__(self, other):
e1c6bebd 200 return self._value ^ self._extract_value(other)
81447b5b
PP
201
202 def __rxor__(self, other):
e1c6bebd 203 return self._extract_value(other) ^ self._value
81447b5b
PP
204
205 def __or__(self, other):
e1c6bebd 206 return self._value | self._extract_value(other)
81447b5b
PP
207
208 def __ror__(self, other):
e1c6bebd 209 return self._extract_value(other) | self._value
81447b5b
PP
210
211 def __invert__(self):
e1c6bebd 212 return ~self._value
81447b5b 213
81447b5b 214
aae30e61
PP
215class _BoolField(_IntegralField, _Field):
216 _NAME = 'Boolean'
217
218 def __bool__(self):
219 return self._value
220
221 def _value_to_bool(self, value):
222 if isinstance(value, _BoolField):
223 value = value._value
224
225 if not isinstance(value, bool):
226 raise TypeError(
227 "'{}' object is not a 'bool' or '_BoolField' object".format(
228 value.__class__
229 )
230 )
231
232 return value
233
234 @property
235 def _value(self):
236 return bool(native_bt.field_bool_get_value(self._ptr))
237
238 def _set_value(self, value):
239 value = self._value_to_bool(value)
240 native_bt.field_bool_set_value(self._ptr, value)
241
242 value = property(fset=_set_value)
243
244
2ae9f48c 245class _IntegerField(_IntegralField, _Field):
81447b5b
PP
246 pass
247
248
2ae9f48c
SM
249class _UnsignedIntegerField(_IntegerField, _Field):
250 _NAME = 'Unsigned integer'
1eccc498 251
81447b5b 252 def _value_to_int(self, value):
25bb9bab
PP
253 if not isinstance(value, numbers.Integral):
254 raise TypeError('expecting an integral number object')
81447b5b
PP
255
256 value = int(value)
2ae9f48c 257 utils._check_uint64(value)
81447b5b
PP
258
259 return value
260
261 @property
e1c6bebd 262 def _value(self):
9c08c816 263 return native_bt.field_integer_unsigned_get_value(self._ptr)
81447b5b 264
2ae9f48c
SM
265 def _set_value(self, value):
266 value = self._value_to_int(value)
9c08c816 267 native_bt.field_integer_unsigned_set_value(self._ptr, value)
2ae9f48c
SM
268
269 value = property(fset=_set_value)
270
271
272class _SignedIntegerField(_IntegerField, _Field):
273 _NAME = 'Signed integer'
1eccc498 274
2ae9f48c 275 def _value_to_int(self, value):
25bb9bab
PP
276 if not isinstance(value, numbers.Integral):
277 raise TypeError('expecting an integral number object')
e1c6bebd 278
2ae9f48c
SM
279 value = int(value)
280 utils._check_int64(value)
811644b8 281
81447b5b
PP
282 return value
283
2ae9f48c
SM
284 @property
285 def _value(self):
9c08c816 286 return native_bt.field_integer_signed_get_value(self._ptr)
2ae9f48c 287
e1c6bebd 288 def _set_value(self, value):
81447b5b 289 value = self._value_to_int(value)
9c08c816 290 native_bt.field_integer_signed_set_value(self._ptr, value)
81447b5b 291
e1c6bebd 292 value = property(fset=_set_value)
81447b5b 293
0b03f63e 294
2ae9f48c
SM
295class _RealField(_NumericField, numbers.Real):
296 _NAME = 'Real'
81447b5b
PP
297
298 def _value_to_float(self, value):
299 if not isinstance(value, numbers.Real):
300 raise TypeError("expecting a real number object")
301
302 return float(value)
303
304 @property
e1c6bebd 305 def _value(self):
2ae9f48c 306 return native_bt.field_real_get_value(self._ptr)
81447b5b 307
e1c6bebd 308 def _set_value(self, value):
81447b5b 309 value = self._value_to_float(value)
2ae9f48c 310 native_bt.field_real_set_value(self._ptr, value)
81447b5b 311
e1c6bebd 312 value = property(fset=_set_value)
81447b5b 313
0b03f63e 314
81447b5b 315class _EnumerationField(_IntegerField):
1eccc498
SM
316 def _repr(self):
317 return '{} ({})'.format(self._value, ', '.join(self.labels))
81447b5b
PP
318
319 @property
1eccc498 320 def labels(self):
d24d5663 321 status, labels = self._get_mapping_labels(self._ptr)
cfbd7cf3 322 utils._handle_func_status(status, "cannot get label for enumeration field")
81447b5b 323
1eccc498
SM
324 assert labels is not None
325 return labels
81447b5b 326
4addd228 327
1eccc498
SM
328class _UnsignedEnumerationField(_EnumerationField, _UnsignedIntegerField):
329 _NAME = 'Unsigned Enumeration'
cfbd7cf3 330 _get_mapping_labels = staticmethod(
9c08c816 331 native_bt.field_enumeration_unsigned_get_mapping_labels
cfbd7cf3 332 )
e1c6bebd 333
e1c6bebd 334
1eccc498
SM
335class _SignedEnumerationField(_EnumerationField, _SignedIntegerField):
336 _NAME = 'Signed Enumeration'
cfbd7cf3 337 _get_mapping_labels = staticmethod(
9c08c816 338 native_bt.field_enumeration_signed_get_mapping_labels
cfbd7cf3 339 )
81447b5b
PP
340
341
342@functools.total_ordering
1eccc498 343class _StringField(_Field):
81447b5b
PP
344 _NAME = 'String'
345
346 def _value_to_str(self, value):
347 if isinstance(value, self.__class__):
e1c6bebd 348 value = value._value
81447b5b
PP
349
350 if not isinstance(value, str):
351 raise TypeError("expecting a 'str' object")
352
353 return value
354
355 @property
e1c6bebd 356 def _value(self):
1eccc498 357 return native_bt.field_string_get_value(self._ptr)
81447b5b 358
e1c6bebd 359 def _set_value(self, value):
81447b5b 360 value = self._value_to_str(value)
1eccc498 361 native_bt.field_string_set_value(self._ptr, value)
81447b5b 362
e1c6bebd
JG
363 value = property(fset=_set_value)
364
365 def _spec_eq(self, other):
81447b5b 366 try:
f11ed062
PP
367 return self._value == self._value_to_str(other)
368 except:
81447b5b
PP
369 return False
370
81447b5b 371 def __lt__(self, other):
e1c6bebd 372 return self._value < self._value_to_str(other)
81447b5b
PP
373
374 def __bool__(self):
e1c6bebd 375 return bool(self._value)
81447b5b 376
12bf0d88 377 def _repr(self):
d623d2e9
JG
378 return repr(self._value)
379
81447b5b 380 def __str__(self):
1eccc498 381 return str(self._value)
81447b5b
PP
382
383 def __getitem__(self, index):
e1c6bebd 384 return self._value[index]
81447b5b
PP
385
386 def __len__(self):
1eccc498 387 return native_bt.field_string_get_length(self._ptr)
81447b5b
PP
388
389 def __iadd__(self, value):
390 value = self._value_to_str(value)
d24d5663 391 status = native_bt.field_string_append(self._ptr, value)
cfbd7cf3
FD
392 utils._handle_func_status(
393 status, "cannot append to string field object's value"
394 )
81447b5b
PP
395 return self
396
397
398class _ContainerField(_Field):
399 def __bool__(self):
400 return len(self) != 0
401
402 def __len__(self):
403 count = self._count()
1eccc498 404 assert count >= 0
81447b5b
PP
405 return count
406
407 def __delitem__(self, index):
408 raise NotImplementedError
409
410
411class _StructureField(_ContainerField, collections.abc.MutableMapping):
412 _NAME = 'Structure'
413
414 def _count(self):
b4f45851 415 return len(self.field_class)
81447b5b 416
81447b5b 417 def __setitem__(self, key, value):
236355c2 418 # raises if key is somehow invalid
81447b5b
PP
419 field = self[key]
420
81447b5b
PP
421 # the field's property does the appropriate conversion or raises
422 # the appropriate exception
423 field.value = value
424
81447b5b
PP
425 def __iter__(self):
426 # same name iterator
b4f45851 427 return iter(self.field_class)
81447b5b 428
e1c6bebd 429 def _spec_eq(self, other):
f11ed062
PP
430 if not isinstance(other, collections.abc.Mapping):
431 return False
81447b5b 432
f11ed062
PP
433 if len(self) != len(other):
434 # early mismatch
435 return False
81447b5b 436
f11ed062
PP
437 for self_key in self:
438 if self_key not in other:
439 return False
81447b5b 440
f11ed062
PP
441 if self[self_key] != other[self_key]:
442 return False
e1c6bebd 443
f11ed062 444 return True
81447b5b 445
e1c6bebd 446 def _set_value(self, values):
e1c6bebd
JG
447 try:
448 for key, value in values.items():
449 self[key].value = value
1eccc498 450 except Exception:
e1c6bebd 451 raise
7c54e2e7 452
e1c6bebd 453 value = property(fset=_set_value)
81447b5b 454
12bf0d88 455 def _repr(self):
ac7e2dc6
JG
456 items = ['{}: {}'.format(repr(k), repr(v)) for k, v in self.items()]
457 return '{{{}}}'.format(', '.join(items))
458
1eccc498
SM
459 def __getitem__(self, key):
460 utils._check_str(key)
cfbd7cf3
FD
461 field_ptr = native_bt.field_structure_borrow_member_field_by_name(
462 self._ptr, key
463 )
0b03f63e 464
1eccc498
SM
465 if field_ptr is None:
466 raise KeyError(key)
81447b5b 467
cfbd7cf3
FD
468 return _create_field_from_ptr(
469 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
470 )
811644b8 471
1eccc498
SM
472 def member_at_index(self, index):
473 utils._check_uint64(index)
811644b8 474
1eccc498
SM
475 if index >= len(self):
476 raise IndexError
477
cfbd7cf3
FD
478 field_ptr = native_bt.field_structure_borrow_member_field_by_index(
479 self._ptr, index
480 )
1eccc498 481 assert field_ptr is not None
cfbd7cf3
FD
482 return _create_field_from_ptr(
483 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
484 )
1eccc498
SM
485
486
cec0261d
PP
487class _OptionField(_Field):
488 _NAME = 'Option'
489
490 @property
491 def field(self):
492 field_ptr = native_bt.field_option_borrow_field_const(self._ptr)
493
494 if field_ptr is None:
495 return
496
497 return _create_field_from_ptr(
498 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
499 )
500
501 @property
502 def has_field(self):
503 return self.field is not None
504
505 @has_field.setter
506 def has_field(self, value):
507 utils._check_bool(value)
508 native_bt.field_option_set_has_field(self._ptr, value)
509
510 def _spec_eq(self, other):
511 return _get_leaf_field(self) == other
512
513 def __bool__(self):
514 return self.has_field
515
516 def __str__(self):
517 return str(self.field)
518
519 def _repr(self):
520 return repr(self.field)
521
522 def _set_value(self, value):
523 self.has_field = True
524 field = self.field
525 assert field is not None
526 field.value = value
527
528 value = property(fset=_set_value)
529
530
1eccc498
SM
531class _VariantField(_ContainerField, _Field):
532 _NAME = 'Variant'
81447b5b
PP
533
534 @property
1eccc498
SM
535 def selected_option_index(self):
536 return native_bt.field_variant_get_selected_option_field_index(self._ptr)
81447b5b 537
1eccc498
SM
538 @selected_option_index.setter
539 def selected_option_index(self, index):
45c51519 540 native_bt.field_variant_select_option_field_by_index(self._ptr, index)
811644b8 541
1eccc498
SM
542 @property
543 def selected_option(self):
5ae9f1bf
SM
544 # TODO: Is there a way to check if the variant field has a selected_option,
545 # so we can raise an exception instead of hitting a pre-condition check?
546 # If there is something, that check should be added to selected_option_index too.
1eccc498 547 field_ptr = native_bt.field_variant_borrow_selected_option_field(self._ptr)
81447b5b 548
cfbd7cf3
FD
549 return _create_field_from_ptr(
550 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
551 )
81447b5b 552
e1c6bebd 553 def _spec_eq(self, other):
f11ed062 554 return _get_leaf_field(self) == other
811644b8
PP
555
556 def __bool__(self):
1eccc498 557 raise NotImplementedError
81447b5b 558
12bf0d88 559 def __str__(self):
1eccc498 560 return str(self.selected_option)
12bf0d88
JG
561
562 def _repr(self):
1eccc498 563 return repr(self.selected_option)
e1c6bebd
JG
564
565 def _set_value(self, value):
1eccc498 566 self.selected_option.value = value
e1c6bebd
JG
567
568 value = property(fset=_set_value)
81447b5b 569
0b03f63e 570
c2ea62f5 571class _ArrayField(_ContainerField, _Field, collections.abc.MutableSequence):
1eccc498
SM
572 def _get_length(self):
573 return native_bt.field_array_get_length(self._ptr)
574
575 length = property(fget=_get_length)
576
81447b5b
PP
577 def __getitem__(self, index):
578 if not isinstance(index, numbers.Integral):
cfbd7cf3
FD
579 raise TypeError(
580 "'{}' is not an integral number object: invalid index".format(
581 index.__class__.__name__
582 )
583 )
81447b5b
PP
584
585 index = int(index)
586
587 if index < 0 or index >= len(self):
588 raise IndexError('{} field object index is out of range'.format(self._NAME))
589
cfbd7cf3
FD
590 field_ptr = native_bt.field_array_borrow_element_field_by_index(
591 self._ptr, index
592 )
593 assert field_ptr
594 return _create_field_from_ptr(
595 field_ptr, self._owner_ptr, self._owner_get_ref, self._owner_put_ref
596 )
81447b5b
PP
597
598 def __setitem__(self, index, value):
81447b5b
PP
599 # raises if index is somehow invalid
600 field = self[index]
601
602 if not isinstance(field, (_NumericField, _StringField)):
603 raise TypeError('can only set the value of a number or string field')
604
605 # the field's property does the appropriate conversion or raises
606 # the appropriate exception
607 field.value = value
608
609 def insert(self, index, value):
610 raise NotImplementedError
611
e1c6bebd 612 def _spec_eq(self, other):
f11ed062
PP
613 if not isinstance(other, collections.abc.Sequence):
614 return False
7c54e2e7 615
f11ed062
PP
616 if len(self) != len(other):
617 # early mismatch
e1c6bebd 618 return False
7c54e2e7 619
f11ed062
PP
620 for self_elem, other_elem in zip(self, other):
621 if self_elem != other_elem:
622 return False
623
624 return True
625
12bf0d88 626 def _repr(self):
2bc21382
JG
627 return '[{}]'.format(', '.join([repr(v) for v in self]))
628
81447b5b 629
1eccc498
SM
630class _StaticArrayField(_ArrayField, _Field):
631 _NAME = 'Static array'
81447b5b
PP
632
633 def _count(self):
1eccc498 634 return native_bt.field_array_get_length(self._ptr)
81447b5b 635
e1c6bebd
JG
636 def _set_value(self, values):
637 if len(self) != len(values):
cfbd7cf3 638 raise ValueError('expected length of value and array field to match')
e1c6bebd 639
1eccc498
SM
640 for index, value in enumerate(values):
641 if value is not None:
642 self[index].value = value
e1c6bebd
JG
643
644 value = property(fset=_set_value)
645
81447b5b 646
1eccc498
SM
647class _DynamicArrayField(_ArrayField, _Field):
648 _NAME = 'Dynamic array'
81447b5b
PP
649
650 def _count(self):
1eccc498 651 return self.length
81447b5b 652
1eccc498
SM
653 def _set_length(self, length):
654 utils._check_uint64(length)
9c08c816 655 status = native_bt.field_array_dynamic_set_length(self._ptr, length)
d24d5663 656 utils._handle_func_status(status, "cannot set dynamic array length")
81447b5b 657
1eccc498 658 length = property(fget=_ArrayField._get_length, fset=_set_length)
81447b5b 659
e1c6bebd 660 def _set_value(self, values):
1eccc498
SM
661 if len(values) != self.length:
662 self.length = len(values)
e1c6bebd 663
1eccc498
SM
664 for index, value in enumerate(values):
665 if value is not None:
666 self[index].value = value
e1c6bebd
JG
667
668 value = property(fset=_set_value)
81447b5b 669
0b03f63e 670
81447b5b 671_TYPE_ID_TO_OBJ = {
aae30e61 672 native_bt.FIELD_CLASS_TYPE_BOOL: _BoolField,
2ae9f48c
SM
673 native_bt.FIELD_CLASS_TYPE_UNSIGNED_INTEGER: _UnsignedIntegerField,
674 native_bt.FIELD_CLASS_TYPE_SIGNED_INTEGER: _SignedIntegerField,
675 native_bt.FIELD_CLASS_TYPE_REAL: _RealField,
1eccc498
SM
676 native_bt.FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION: _UnsignedEnumerationField,
677 native_bt.FIELD_CLASS_TYPE_SIGNED_ENUMERATION: _SignedEnumerationField,
2ae9f48c
SM
678 native_bt.FIELD_CLASS_TYPE_STRING: _StringField,
679 native_bt.FIELD_CLASS_TYPE_STRUCTURE: _StructureField,
1eccc498
SM
680 native_bt.FIELD_CLASS_TYPE_STATIC_ARRAY: _StaticArrayField,
681 native_bt.FIELD_CLASS_TYPE_DYNAMIC_ARRAY: _DynamicArrayField,
cec0261d 682 native_bt.FIELD_CLASS_TYPE_OPTION: _OptionField,
45c51519
PP
683 native_bt.FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: _VariantField,
684 native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: _VariantField,
685 native_bt.FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: _VariantField,
81447b5b 686}
This page took 0.082373 seconds and 4 git commands to generate.