import bt2
from bt2 import native_bt, utils, object
import bt2.stream_class
+import bt2.field_class
import collections.abc
import functools
default_clock_class=None,
assigns_automatic_event_class_id=True,
assigns_automatic_stream_id=True,
+ supports_packets=False,
packets_have_beginning_default_clock_snapshot=False,
packets_have_end_default_clock_snapshot=False,
supports_discarded_events=False,
if name is not None:
sc._name = name
- if packet_context_field_class is not None:
- sc._packet_context_field_class = packet_context_field_class
-
if event_common_context_field_class is not None:
sc._event_common_context_field_class = event_common_context_field_class
if default_clock_class is not None:
sc._default_clock_class = default_clock_class
+ # call after `sc._default_clock_class` because, if
+ # `packets_have_beginning_default_clock_snapshot` or
+ # `packets_have_end_default_clock_snapshot` is true, then this
+ # stream class needs a default clock class already.
+ sc._set_supports_packets(supports_packets,
+ packets_have_beginning_default_clock_snapshot,
+ packets_have_end_default_clock_snapshot)
+
+ # call after sc._set_supports_packets() because, if
+ # `packet_context_field_class` is not `None`, then this stream
+ # class needs to support packets already.
+ if packet_context_field_class is not None:
+ sc._packet_context_field_class = packet_context_field_class
+
sc._assigns_automatic_event_class_id = assigns_automatic_event_class_id
sc._assigns_automatic_stream_id = assigns_automatic_stream_id
- sc._packets_have_beginning_default_clock_snapshot = packets_have_beginning_default_clock_snapshot
- sc._packets_have_end_default_clock_snapshot = packets_have_end_default_clock_snapshot
sc._set_supports_discarded_events(supports_discarded_events,
discarded_events_have_default_clock_snapshots)
sc._set_supports_discarded_packets(supports_discarded_packets,
def create_dynamic_array_field_class(self, elem_fc, length_fc=None):
utils._check_type(elem_fc, bt2.field_class._FieldClass)
- ptr = native_bt.field_class_dynamic_array_create(self._ptr, elem_fc._ptr)
- self._check_create_status(ptr, 'dynamic array')
- obj = bt2.field_class._DynamicArrayFieldClass._create_from_ptr(ptr)
+ length_fc_ptr = None
if length_fc is not None:
- obj._length_field_class = length_fc
+ utils._check_type(length_fc, bt2.field_class._UnsignedIntegerFieldClass)
+ length_fc_ptr = length_fc._ptr
- return obj
+ ptr = native_bt.field_class_dynamic_array_create(self._ptr, elem_fc._ptr, length_fc_ptr)
+ self._check_create_status(ptr, 'dynamic array')
+ return bt2.field_class._DynamicArrayFieldClass._create_from_ptr(ptr)
def create_variant_field_class(self, selector_fc=None):
- ptr = native_bt.field_class_variant_create(self._ptr)
- self._check_create_status(ptr, 'variant')
- obj = bt2.field_class._VariantFieldClass._create_from_ptr(ptr)
+ selector_fc_ptr = None
if selector_fc is not None:
- obj._selector_field_class = selector_fc
+ utils._check_type(selector_fc, bt2.field_class._IntegerFieldClass)
+ selector_fc_ptr = selector_fc._ptr
- return obj
+ ptr = native_bt.field_class_variant_create(self._ptr, selector_fc_ptr)
+ self._check_create_status(ptr, 'variant')
+ return bt2.field_class._create_field_class_from_ptr_and_get_ref(ptr)
# Add a listener to be called when the trace class is destroyed.