2 * SPDX-License-Identifier: MIT
4 * Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
7 #ifndef BABELTRACE_BINDINGS_PYTHON_BT2_BT2_NATIVE_BT_MESSAGE_ITERATOR_I_H
8 #define BABELTRACE_BINDINGS_PYTHON_BT2_BT2_NATIVE_BT_MESSAGE_ITERATOR_I_H
11 bt_message_iterator_create_from_message_iterator_status
12 bt_bt2_message_iterator_create_from_message_iterator(
13 bt_self_message_iterator
*self_msg_iter
,
14 bt_self_component_port_input
*input_port
,
15 bt_message_iterator
**message_iterator
)
17 bt_message_iterator_create_from_message_iterator_status
20 status
= bt_message_iterator_create_from_message_iterator(
21 self_msg_iter
, input_port
, message_iterator
);
23 if (status
!= BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK
) {
24 *message_iterator
= NULL
;
31 bt_message_iterator_create_from_sink_component_status
32 bt_bt2_message_iterator_create_from_sink_component(
33 bt_self_component_sink
*self_comp
,
34 bt_self_component_port_input
*input_port
,
35 bt_message_iterator
**message_iterator
)
37 bt_message_iterator_create_from_sink_component_status
40 status
= bt_message_iterator_create_from_sink_component(
41 self_comp
, input_port
, message_iterator
);
43 if (status
!= BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK
) {
44 *message_iterator
= NULL
;
50 static PyObject
*bt_bt2_get_user_component_from_user_msg_iter(
51 bt_self_message_iterator
*self_message_iterator
)
53 bt_self_component
*self_component
= bt_self_message_iterator_borrow_component(self_message_iterator
);
56 BT_ASSERT_DBG(self_component
);
57 py_comp
= bt_self_component_get_data(self_component
);
58 BT_ASSERT_DBG(py_comp
);
60 /* Return new reference */
66 PyObject
*create_pylist_from_messages(bt_message_array_const messages
,
67 uint64_t message_count
)
70 PyObject
*py_msg_list
= PyList_New(message_count
);
72 BT_ASSERT(py_msg_list
);
74 for (i
= 0; i
< message_count
; i
++) {
75 PyList_SET_ITEM(py_msg_list
, i
,
76 SWIG_NewPointerObj(SWIG_as_voidptr(messages
[i
]),
77 SWIGTYPE_p_bt_message
, 0));
84 PyObject
*get_msg_range_common(bt_message_iterator_next_status status
,
85 bt_message_array_const messages
, uint64_t message_count
)
88 PyObject
*py_return_tuple
;
89 PyObject
*py_msg_list
;
91 py_return_tuple
= PyTuple_New(2);
92 BT_ASSERT(py_return_tuple
);
94 /* Set tuple[0], status. */
95 py_status
= SWIG_From_long_SS_long(status
);
96 PyTuple_SET_ITEM(py_return_tuple
, 0, py_status
);
98 /* Set tuple[1], message list on success, None otherwise. */
99 if (status
== __BT_FUNC_STATUS_OK
) {
100 py_msg_list
= create_pylist_from_messages(messages
, message_count
);
102 py_msg_list
= Py_None
;
103 Py_INCREF(py_msg_list
);
106 PyTuple_SET_ITEM(py_return_tuple
, 1, py_msg_list
);
108 return py_return_tuple
;
111 static PyObject
*bt_bt2_self_component_port_input_get_msg_range(
112 bt_message_iterator
*iter
)
114 bt_message_array_const messages
;
115 uint64_t message_count
= 0;
116 bt_message_iterator_next_status status
;
118 status
= bt_message_iterator_next(iter
,
119 &messages
, &message_count
);
120 return get_msg_range_common(status
, messages
, message_count
);
123 #endif /* BABELTRACE_BINDINGS_PYTHON_BT2_BT2_NATIVE_BT_MESSAGE_ITERATOR_I_H */