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