Move to kernel style SPDX license identifiers
[babeltrace.git] / src / bindings / python / bt2 / bt2 / native_bt_message_iterator.i.h
... / ...
CommitLineData
1/*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 */
6
7static
8bt_message_iterator_create_from_message_iterator_status
9bt_bt2_message_iterator_create_from_message_iterator(
10 bt_self_message_iterator *self_msg_iter,
11 bt_self_component_port_input *input_port,
12 bt_message_iterator **message_iterator)
13{
14 bt_message_iterator_create_from_message_iterator_status
15 status;
16
17 status = bt_message_iterator_create_from_message_iterator(
18 self_msg_iter, input_port, message_iterator);
19
20 if (status != BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) {
21 *message_iterator = NULL;
22 }
23
24 return status;
25}
26
27static
28bt_message_iterator_create_from_sink_component_status
29bt_bt2_message_iterator_create_from_sink_component(
30 bt_self_component_sink *self_comp,
31 bt_self_component_port_input *input_port,
32 bt_message_iterator **message_iterator)
33{
34 bt_message_iterator_create_from_sink_component_status
35 status;
36
37 status = bt_message_iterator_create_from_sink_component(
38 self_comp, input_port, message_iterator);
39
40 if (status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) {
41 *message_iterator = NULL;
42 }
43
44 return status;
45}
46
47static PyObject *bt_bt2_get_user_component_from_user_msg_iter(
48 bt_self_message_iterator *self_message_iterator)
49{
50 bt_self_component *self_component = bt_self_message_iterator_borrow_component(self_message_iterator);
51 PyObject *py_comp;
52
53 BT_ASSERT_DBG(self_component);
54 py_comp = bt_self_component_get_data(self_component);
55 BT_ASSERT_DBG(py_comp);
56
57 /* Return new reference */
58 Py_INCREF(py_comp);
59 return py_comp;
60}
61
62static inline
63PyObject *create_pylist_from_messages(bt_message_array_const messages,
64 uint64_t message_count)
65{
66 uint64_t i;
67 PyObject *py_msg_list = PyList_New(message_count);
68
69 BT_ASSERT(py_msg_list);
70
71 for (i = 0; i < message_count; i++) {
72 PyList_SET_ITEM(py_msg_list, i,
73 SWIG_NewPointerObj(SWIG_as_voidptr(messages[i]),
74 SWIGTYPE_p_bt_message, 0));
75 }
76
77 return py_msg_list;
78}
79
80static
81PyObject *get_msg_range_common(bt_message_iterator_next_status status,
82 bt_message_array_const messages, uint64_t message_count)
83{
84 PyObject *py_status;
85 PyObject *py_return_tuple;
86 PyObject *py_msg_list;
87
88 py_return_tuple = PyTuple_New(2);
89 BT_ASSERT(py_return_tuple);
90
91 /* Set tuple[0], status. */
92 py_status = SWIG_From_long_SS_long(status);
93 PyTuple_SET_ITEM(py_return_tuple, 0, py_status);
94
95 /* Set tuple[1], message list on success, None otherwise. */
96 if (status == __BT_FUNC_STATUS_OK) {
97 py_msg_list = create_pylist_from_messages(messages, message_count);
98 } else {
99 py_msg_list = Py_None;
100 Py_INCREF(py_msg_list);
101 }
102
103 PyTuple_SET_ITEM(py_return_tuple, 1, py_msg_list);
104
105 return py_return_tuple;
106}
107
108static PyObject *bt_bt2_self_component_port_input_get_msg_range(
109 bt_message_iterator *iter)
110{
111 bt_message_array_const messages;
112 uint64_t message_count = 0;
113 bt_message_iterator_next_status status;
114
115 status = bt_message_iterator_next(iter,
116 &messages, &message_count);
117 return get_msg_range_common(status, messages, message_count);
118}
This page took 0.022565 seconds and 4 git commands to generate.