-class _TraceEnv(collections.abc.MutableMapping):
- def __init__(self, trace):
- self._trace = trace
-
- def __getitem__(self, key):
- utils._check_str(key)
- value_ptr = native_bt.trace_get_environment_field_value_by_name(self._trace._ptr,
- key)
-
- if value_ptr is None:
- raise KeyError(key)
-
- return bt2.value._create_from_ptr(value_ptr)
-
- def __setitem__(self, key, value):
- utils._check_str(key)
- value = bt2.create_value(value)
- ret = native_bt.trace_set_environment_field(self._trace._ptr,
- key, value._ptr)
- utils._handle_ret(ret, "cannot set trace class object's environment entry")
-
- def __delitem__(self, key):
- raise NotImplementedError
-
- def __len__(self):
- count = native_bt.trace_get_environment_field_count(self._trace._ptr)
- assert(count >= 0)
- return count
-
- def __iter__(self):
- return _TraceEnvIterator(self)
-
-
-class Trace(object._SharedObject, collections.abc.Mapping):
- def __init__(self, name=None, native_byte_order=None, env=None,
- packet_header_field_class=None, clock_classes=None,
- stream_classes=None):
- ptr = native_bt.trace_create()
-
- if ptr is None:
- raise bt2.CreationError('cannot create trace class object')
-
- super().__init__(ptr)
-
- if name is not None:
- self.name = name
-
- if native_byte_order is not None:
- self.native_byte_order = native_byte_order
-
- if packet_header_field_class is not None:
- self.packet_header_field_class = packet_header_field_class
-
- if env is not None:
- for key, value in env.items():
- self.env[key] = value
-
- if clock_classes is not None:
- for clock_class in clock_classes:
- self.add_clock_class(clock_class)
-
- if stream_classes is not None:
- for stream_class in stream_classes:
- self.add_stream_class(stream_class)
-
- def __getitem__(self, key):
- utils._check_int64(key)
- sc_ptr = native_bt.trace_get_stream_class_by_id(self._ptr, key)
-
- if sc_ptr is None:
- raise KeyError(key)
-
- return bt2.StreamClass._create_from_ptr(sc_ptr)
-
- def __len__(self):
- count = native_bt.trace_get_stream_class_count(self._ptr)
- assert(count >= 0)
- return count
-
- def __iter__(self):
- return _StreamClassIterator(self)
-
- def add_stream_class(self, stream_class):
- utils._check_type(stream_class, bt2.StreamClass)
- ret = native_bt.trace_add_stream_class(self._ptr, stream_class._ptr)
- utils._handle_ret(ret, "cannot add stream class object to trace class object")