-class _TraceClassEnv(collections.abc.MutableMapping):
- def __init__(self, trace_class):
- self._trace_class = trace_class
-
- def __getitem__(self, key):
- utils._check_str(key)
-
- borrow_entry_fn = native_bt.trace_class_borrow_environment_entry_value_by_name_const
- value_ptr = borrow_entry_fn(self._trace_class._ptr, key)
-
- if value_ptr is None:
- raise KeyError(key)
-
- return bt2.value._create_from_ptr_and_get_ref(value_ptr)
-
- def __setitem__(self, key, value):
- if isinstance(value, str):
- set_env_entry_fn = native_bt.trace_class_set_environment_entry_string
- elif isinstance(value, int):
- set_env_entry_fn = native_bt.trace_class_set_environment_entry_integer
- else:
- raise TypeError('expected str or int, got {}'.format(type(value)))
-
- status = set_env_entry_fn(self._trace_class._ptr, key, value)
- utils._handle_func_status(status,
- "cannot set trace class object's environment entry")
-
- def __delitem__(self, key):
- raise NotImplementedError
-
- def __len__(self):
- count = native_bt.trace_class_get_environment_entry_count(self._trace_class._ptr)
- assert count >= 0
- return count
-
- def __iter__(self):
- trace_class_ptr = self._trace_class_env._trace_class._ptr
-
- for idx in range(len(self)):
- borrow_entry_fn = native_bt.trace_class_borrow_environment_entry_by_index_const
- entry_name, _ = borrow_entry_fn(trace_class_ptr, idx)
- assert entry_name is not None
- yield entry_name
-
-