1 #ifndef BABELTRACE2_GRAPH_GRAPH_H
2 #define BABELTRACE2_GRAPH_GRAPH_H
5 * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
6 * Copyright 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 * Permission is hereby granted, free of charge, to any person obtaining a copy
9 * of this software and associated documentation files (the "Software"), to deal
10 * in the Software without restriction, including without limitation the rights
11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 * copies of the Software, and to permit persons to whom the Software is
13 * furnished to do so, subject to the following conditions:
15 * The above copyright notice and this permission notice shall be included in
16 * all copies or substantial portions of the Software.
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28 * For bt_bool, bt_component, bt_component_class,
29 * bt_component_class_filter, bt_component_class_sink,
30 * bt_component_class_source, bt_component_filter, bt_component_sink,
31 * bt_component_source, bt_connection, bt_graph, bt_port_input,
32 * bt_port_output, bt_value
34 #include <babeltrace2/types.h>
36 /* For bt_logging_level */
37 #include <babeltrace2/logging.h>
39 /* For __BT_FUNC_STATUS_* */
40 #define __BT_FUNC_STATUS_ENABLE
41 #include <babeltrace2/func-status.h>
42 #undef __BT_FUNC_STATUS_ENABLE
48 typedef enum bt_graph_listener_func_status
{
49 BT_GRAPH_LISTENER_FUNC_STATUS_OK
= __BT_FUNC_STATUS_OK
,
50 BT_GRAPH_LISTENER_FUNC_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
51 BT_GRAPH_LISTENER_FUNC_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
52 } bt_graph_listener_func_status
;
54 typedef bt_graph_listener_func_status
55 (*bt_graph_filter_component_input_port_added_listener_func
)(
56 const bt_component_filter
*component
,
57 const bt_port_input
*port
, void *data
);
59 typedef bt_graph_listener_func_status
60 (*bt_graph_sink_component_input_port_added_listener_func
)(
61 const bt_component_sink
*component
,
62 const bt_port_input
*port
, void *data
);
64 typedef bt_graph_listener_func_status
65 (*bt_graph_source_component_output_port_added_listener_func
)(
66 const bt_component_source
*component
,
67 const bt_port_output
*port
, void *data
);
69 typedef bt_graph_listener_func_status
70 (*bt_graph_filter_component_output_port_added_listener_func
)(
71 const bt_component_filter
*component
,
72 const bt_port_output
*port
, void *data
);
74 typedef bt_graph_listener_func_status
75 (*bt_graph_source_filter_component_ports_connected_listener_func
)(
76 const bt_component_source
*source_component
,
77 const bt_component_filter
*filter_component
,
78 const bt_port_output
*upstream_port
,
79 const bt_port_input
*downstream_port
, void *data
);
81 typedef bt_graph_listener_func_status
82 (*bt_graph_source_sink_component_ports_connected_listener_func
)(
83 const bt_component_source
*source_component
,
84 const bt_component_sink
*sink_component
,
85 const bt_port_output
*upstream_port
,
86 const bt_port_input
*downstream_port
, void *data
);
88 typedef bt_graph_listener_func_status
89 (*bt_graph_filter_filter_component_ports_connected_listener_func
)(
90 const bt_component_filter
*filter_component_upstream
,
91 const bt_component_filter
*filter_component_downstream
,
92 const bt_port_output
*upstream_port
,
93 const bt_port_input
*downstream_port
,
96 typedef bt_graph_listener_func_status
97 (*bt_graph_filter_sink_component_ports_connected_listener_func
)(
98 const bt_component_filter
*filter_component
,
99 const bt_component_sink
*sink_component
,
100 const bt_port_output
*upstream_port
,
101 const bt_port_input
*downstream_port
, void *data
);
103 typedef void (* bt_graph_listener_removed_func
)(void *data
);
105 extern bt_graph
*bt_graph_create(void);
107 typedef enum bt_graph_add_component_status
{
108 BT_GRAPH_ADD_COMPONENT_STATUS_OK
= __BT_FUNC_STATUS_OK
,
109 BT_GRAPH_ADD_COMPONENT_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
110 BT_GRAPH_ADD_COMPONENT_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
111 } bt_graph_add_component_status
;
113 extern bt_graph_add_component_status
114 bt_graph_add_source_component(bt_graph
*graph
,
115 const bt_component_class_source
*component_class
,
116 const char *name
, const bt_value
*params
,
117 bt_logging_level log_level
, const bt_component_source
**component
);
119 extern bt_graph_add_component_status
120 bt_graph_add_source_component_with_init_method_data(
122 const bt_component_class_source
*component_class
,
123 const char *name
, const bt_value
*params
,
124 void *init_method_data
, bt_logging_level log_level
,
125 const bt_component_source
**component
);
127 extern bt_graph_add_component_status
128 bt_graph_add_filter_component(bt_graph
*graph
,
129 const bt_component_class_filter
*component_class
,
130 const char *name
, const bt_value
*params
,
131 bt_logging_level log_level
,
132 const bt_component_filter
**component
);
134 extern bt_graph_add_component_status
135 bt_graph_add_filter_component_with_init_method_data(
137 const bt_component_class_filter
*component_class
,
138 const char *name
, const bt_value
*params
,
139 void *init_method_data
, bt_logging_level log_level
,
140 const bt_component_filter
**component
);
142 extern bt_graph_add_component_status
143 bt_graph_add_sink_component(
144 bt_graph
*graph
, const bt_component_class_sink
*component_class
,
145 const char *name
, const bt_value
*params
,
146 bt_logging_level log_level
,
147 const bt_component_sink
**component
);
149 extern bt_graph_add_component_status
150 bt_graph_add_sink_component_with_init_method_data(
151 bt_graph
*graph
, const bt_component_class_sink
*component_class
,
152 const char *name
, const bt_value
*params
,
153 void *init_method_data
, bt_logging_level log_level
,
154 const bt_component_sink
**component
);
156 typedef enum bt_graph_connect_ports_status
{
157 BT_GRAPH_CONNECT_PORTS_STATUS_OK
= __BT_FUNC_STATUS_OK
,
158 BT_GRAPH_CONNECT_PORTS_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
159 BT_GRAPH_CONNECT_PORTS_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
160 BT_GRAPH_CONNECT_PORTS_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
161 } bt_graph_connect_ports_status
;
163 extern bt_graph_connect_ports_status
bt_graph_connect_ports(bt_graph
*graph
,
164 const bt_port_output
*upstream
,
165 const bt_port_input
*downstream
,
166 const bt_connection
**connection
);
168 typedef enum bt_graph_run_status
{
169 BT_GRAPH_RUN_STATUS_OK
= __BT_FUNC_STATUS_OK
,
170 BT_GRAPH_RUN_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
171 BT_GRAPH_RUN_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
172 BT_GRAPH_RUN_STATUS_AGAIN
= __BT_FUNC_STATUS_AGAIN
,
173 BT_GRAPH_RUN_STATUS_END
= __BT_FUNC_STATUS_END
,
174 BT_GRAPH_RUN_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
175 } bt_graph_run_status
;
177 extern bt_graph_run_status
bt_graph_run(bt_graph
*graph
);
179 typedef enum bt_graph_consume_status
{
180 BT_GRAPH_CONSUME_STATUS_OK
= __BT_FUNC_STATUS_OK
,
181 BT_GRAPH_CONSUME_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
182 BT_GRAPH_CONSUME_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
183 BT_GRAPH_CONSUME_STATUS_AGAIN
= __BT_FUNC_STATUS_AGAIN
,
184 BT_GRAPH_CONSUME_STATUS_END
= __BT_FUNC_STATUS_END
,
185 BT_GRAPH_CONSUME_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
186 } bt_graph_consume_status
;
188 extern bt_graph_consume_status
bt_graph_consume(bt_graph
*graph
);
190 typedef enum bt_graph_add_listener_status
{
191 BT_GRAPH_ADD_LISTENER_STATUS_OK
= __BT_FUNC_STATUS_OK
,
192 BT_GRAPH_ADD_LISTENER_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
193 } bt_graph_add_listener_status
;
195 extern bt_graph_add_listener_status
196 bt_graph_add_filter_component_input_port_added_listener(
198 bt_graph_filter_component_input_port_added_listener_func listener
,
199 bt_graph_listener_removed_func listener_removed
, void *data
,
202 extern bt_graph_add_listener_status
203 bt_graph_add_sink_component_input_port_added_listener(
205 bt_graph_sink_component_input_port_added_listener_func listener
,
206 bt_graph_listener_removed_func listener_removed
, void *data
,
209 extern bt_graph_add_listener_status
210 bt_graph_add_source_component_output_port_added_listener(
212 bt_graph_source_component_output_port_added_listener_func listener
,
213 bt_graph_listener_removed_func listener_removed
, void *data
,
216 extern bt_graph_add_listener_status
217 bt_graph_add_filter_component_output_port_added_listener(
219 bt_graph_filter_component_output_port_added_listener_func listener
,
220 bt_graph_listener_removed_func listener_removed
, void *data
,
223 extern bt_graph_add_listener_status
224 bt_graph_add_source_filter_component_ports_connected_listener(
226 bt_graph_source_filter_component_ports_connected_listener_func listener
,
227 bt_graph_listener_removed_func listener_removed
, void *data
,
230 extern bt_graph_add_listener_status
231 bt_graph_add_filter_filter_component_ports_connected_listener(
233 bt_graph_filter_filter_component_ports_connected_listener_func listener
,
234 bt_graph_listener_removed_func listener_removed
, void *data
,
237 extern bt_graph_add_listener_status
238 bt_graph_add_source_sink_component_ports_connected_listener(
240 bt_graph_source_sink_component_ports_connected_listener_func listener
,
241 bt_graph_listener_removed_func listener_removed
, void *data
,
244 extern bt_graph_add_listener_status
245 bt_graph_add_filter_sink_component_ports_connected_listener(
247 bt_graph_filter_sink_component_ports_connected_listener_func listener
,
248 bt_graph_listener_removed_func listener_removed
, void *data
,
251 typedef enum bt_graph_cancel_status
{
252 BT_GRAPH_CANCEL_STATUS_OK
= __BT_FUNC_STATUS_OK
,
253 } bt_graph_cancel_status
;
255 extern bt_graph_cancel_status
bt_graph_cancel(bt_graph
*graph
);
261 #include <babeltrace2/undef-func-status.h>
263 #endif /* BABELTRACE2_GRAPH_GRAPH_H */