1 # SPDX-License-Identifier: MIT
3 # Copyright (c) 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
6 from bt2
import native_bt
7 from bt2
import object as bt2_object
11 PACKET_CONTEXT
= native_bt
.FIELD_PATH_SCOPE_PACKET_CONTEXT
12 EVENT_COMMON_CONTEXT
= native_bt
.FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT
13 EVENT_SPECIFIC_CONTEXT
= native_bt
.FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT
14 EVENT_PAYLOAD
= native_bt
.FIELD_PATH_SCOPE_EVENT_PAYLOAD
21 class _IndexFieldPathItem(_FieldPathItem
):
22 def __init__(self
, index
):
30 class _CurrentArrayElementFieldPathItem(_FieldPathItem
):
34 class _CurrentOptionContentFieldPathItem(_FieldPathItem
):
38 class _FieldPathConst(bt2_object
._SharedObject
, collections
.abc
.Iterable
):
41 native_bt
.field_path_get_ref(ptr
)
45 native_bt
.field_path_put_ref(ptr
)
49 scope
= native_bt
.field_path_get_root_scope(self
._ptr
)
50 return _SCOPE_TO_OBJ
[scope
]
53 return native_bt
.field_path_get_item_count(self
._ptr
)
56 for idx
in range(len(self
)):
57 item_ptr
= native_bt
.field_path_borrow_item_by_index_const(self
._ptr
, idx
)
58 assert item_ptr
is not None
59 item_type
= native_bt
.field_path_item_get_type(item_ptr
)
60 if item_type
== native_bt
.FIELD_PATH_ITEM_TYPE_INDEX
:
61 idx
= native_bt
.field_path_item_index_get_index(item_ptr
)
62 yield _IndexFieldPathItem(idx
)
63 elif item_type
== native_bt
.FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT
:
64 yield _CurrentArrayElementFieldPathItem()
65 elif item_type
== native_bt
.FIELD_PATH_ITEM_TYPE_CURRENT_OPTION_CONTENT
:
66 yield _CurrentOptionContentFieldPathItem()
72 native_bt
.FIELD_PATH_SCOPE_PACKET_CONTEXT
: FieldPathScope
.PACKET_CONTEXT
,
73 native_bt
.FIELD_PATH_SCOPE_EVENT_COMMON_CONTEXT
: FieldPathScope
.EVENT_COMMON_CONTEXT
,
74 native_bt
.FIELD_PATH_SCOPE_EVENT_SPECIFIC_CONTEXT
: FieldPathScope
.EVENT_SPECIFIC_CONTEXT
,
75 native_bt
.FIELD_PATH_SCOPE_EVENT_PAYLOAD
: FieldPathScope
.EVENT_PAYLOAD
,