Normalize C/C++ include guards
[babeltrace.git] / src / bindings / python / bt2 / bt2 / native_bt_message_iterator.i.h
1 /*
2 * SPDX-License-Identifier: MIT
3 *
4 * Copyright (c) 2017 Philippe Proulx <pproulx@efficios.com>
5 */
6
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
9
10 static
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)
16 {
17 bt_message_iterator_create_from_message_iterator_status
18 status;
19
20 status = bt_message_iterator_create_from_message_iterator(
21 self_msg_iter, input_port, message_iterator);
22
23 if (status != BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) {
24 *message_iterator = NULL;
25 }
26
27 return status;
28 }
29
30 static
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)
36 {
37 bt_message_iterator_create_from_sink_component_status
38 status;
39
40 status = bt_message_iterator_create_from_sink_component(
41 self_comp, input_port, message_iterator);
42
43 if (status != BT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) {
44 *message_iterator = NULL;
45 }
46
47 return status;
48 }
49
50 static PyObject *bt_bt2_get_user_component_from_user_msg_iter(
51 bt_self_message_iterator *self_message_iterator)
52 {
53 bt_self_component *self_component = bt_self_message_iterator_borrow_component(self_message_iterator);
54 PyObject *py_comp;
55
56 BT_ASSERT_DBG(self_component);
57 py_comp = bt_self_component_get_data(self_component);
58 BT_ASSERT_DBG(py_comp);
59
60 /* Return new reference */
61 Py_INCREF(py_comp);
62 return py_comp;
63 }
64
65 static inline
66 PyObject *create_pylist_from_messages(bt_message_array_const messages,
67 uint64_t message_count)
68 {
69 uint64_t i;
70 PyObject *py_msg_list = PyList_New(message_count);
71
72 BT_ASSERT(py_msg_list);
73
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));
78 }
79
80 return py_msg_list;
81 }
82
83 static
84 PyObject *get_msg_range_common(bt_message_iterator_next_status status,
85 bt_message_array_const messages, uint64_t message_count)
86 {
87 PyObject *py_status;
88 PyObject *py_return_tuple;
89 PyObject *py_msg_list;
90
91 py_return_tuple = PyTuple_New(2);
92 BT_ASSERT(py_return_tuple);
93
94 /* Set tuple[0], status. */
95 py_status = SWIG_From_long_SS_long(status);
96 PyTuple_SET_ITEM(py_return_tuple, 0, py_status);
97
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);
101 } else {
102 py_msg_list = Py_None;
103 Py_INCREF(py_msg_list);
104 }
105
106 PyTuple_SET_ITEM(py_return_tuple, 1, py_msg_list);
107
108 return py_return_tuple;
109 }
110
111 static PyObject *bt_bt2_self_component_port_input_get_msg_range(
112 bt_message_iterator *iter)
113 {
114 bt_message_array_const messages;
115 uint64_t message_count = 0;
116 bt_message_iterator_next_status status;
117
118 status = bt_message_iterator_next(iter,
119 &messages, &message_count);
120 return get_msg_range_common(status, messages, message_count);
121 }
122
123 #endif /* BABELTRACE_BINDINGS_PYTHON_BT2_BT2_NATIVE_BT_MESSAGE_ITERATOR_I_H */
This page took 0.033344 seconds and 5 git commands to generate.