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
27 #ifndef __BT_IN_BABELTRACE_H
28 # error "Please include <babeltrace2/babeltrace.h> instead."
32 * For bt_bool, bt_component, bt_component_class,
33 * bt_component_class_filter, bt_component_class_sink,
34 * bt_component_class_source, bt_component_filter, bt_component_sink,
35 * bt_component_source, bt_connection, bt_graph, bt_port_input,
36 * bt_port_output, bt_value
38 #include <babeltrace2/types.h>
40 /* For bt_logging_level */
41 #include <babeltrace2/logging.h>
47 typedef enum bt_graph_listener_func_status
{
48 BT_GRAPH_LISTENER_FUNC_STATUS_OK
= __BT_FUNC_STATUS_OK
,
49 BT_GRAPH_LISTENER_FUNC_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
50 BT_GRAPH_LISTENER_FUNC_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
51 } bt_graph_listener_func_status
;
53 typedef bt_graph_listener_func_status
54 (*bt_graph_filter_component_input_port_added_listener_func
)(
55 const bt_component_filter
*component
,
56 const bt_port_input
*port
, void *data
);
58 typedef bt_graph_listener_func_status
59 (*bt_graph_sink_component_input_port_added_listener_func
)(
60 const bt_component_sink
*component
,
61 const bt_port_input
*port
, void *data
);
63 typedef bt_graph_listener_func_status
64 (*bt_graph_source_component_output_port_added_listener_func
)(
65 const bt_component_source
*component
,
66 const bt_port_output
*port
, void *data
);
68 typedef bt_graph_listener_func_status
69 (*bt_graph_filter_component_output_port_added_listener_func
)(
70 const bt_component_filter
*component
,
71 const bt_port_output
*port
, void *data
);
73 typedef bt_graph_listener_func_status
74 (*bt_graph_source_filter_component_ports_connected_listener_func
)(
75 const bt_component_source
*source_component
,
76 const bt_component_filter
*filter_component
,
77 const bt_port_output
*upstream_port
,
78 const bt_port_input
*downstream_port
, void *data
);
80 typedef bt_graph_listener_func_status
81 (*bt_graph_source_sink_component_ports_connected_listener_func
)(
82 const bt_component_source
*source_component
,
83 const bt_component_sink
*sink_component
,
84 const bt_port_output
*upstream_port
,
85 const bt_port_input
*downstream_port
, void *data
);
87 typedef bt_graph_listener_func_status
88 (*bt_graph_filter_filter_component_ports_connected_listener_func
)(
89 const bt_component_filter
*filter_component_upstream
,
90 const bt_component_filter
*filter_component_downstream
,
91 const bt_port_output
*upstream_port
,
92 const bt_port_input
*downstream_port
,
95 typedef bt_graph_listener_func_status
96 (*bt_graph_filter_sink_component_ports_connected_listener_func
)(
97 const bt_component_filter
*filter_component
,
98 const bt_component_sink
*sink_component
,
99 const bt_port_output
*upstream_port
,
100 const bt_port_input
*downstream_port
, void *data
);
102 typedef void (* bt_graph_listener_removed_func
)(void *data
);
104 extern bt_graph
*bt_graph_create(void);
106 typedef enum bt_graph_add_component_status
{
107 BT_GRAPH_ADD_COMPONENT_STATUS_OK
= __BT_FUNC_STATUS_OK
,
108 BT_GRAPH_ADD_COMPONENT_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
109 BT_GRAPH_ADD_COMPONENT_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
110 } bt_graph_add_component_status
;
112 extern bt_graph_add_component_status
113 bt_graph_add_source_component(bt_graph
*graph
,
114 const bt_component_class_source
*component_class
,
115 const char *name
, const bt_value
*params
,
116 bt_logging_level log_level
, const bt_component_source
**component
);
118 extern bt_graph_add_component_status
119 bt_graph_add_source_component_with_init_method_data(
121 const bt_component_class_source
*component_class
,
122 const char *name
, const bt_value
*params
,
123 void *init_method_data
, bt_logging_level log_level
,
124 const bt_component_source
**component
);
126 extern bt_graph_add_component_status
127 bt_graph_add_filter_component(bt_graph
*graph
,
128 const bt_component_class_filter
*component_class
,
129 const char *name
, const bt_value
*params
,
130 bt_logging_level log_level
,
131 const bt_component_filter
**component
);
133 extern bt_graph_add_component_status
134 bt_graph_add_filter_component_with_init_method_data(
136 const bt_component_class_filter
*component_class
,
137 const char *name
, const bt_value
*params
,
138 void *init_method_data
, bt_logging_level log_level
,
139 const bt_component_filter
**component
);
141 extern bt_graph_add_component_status
142 bt_graph_add_sink_component(
143 bt_graph
*graph
, const bt_component_class_sink
*component_class
,
144 const char *name
, const bt_value
*params
,
145 bt_logging_level log_level
,
146 const bt_component_sink
**component
);
148 extern bt_graph_add_component_status
149 bt_graph_add_sink_component_with_init_method_data(
150 bt_graph
*graph
, const bt_component_class_sink
*component_class
,
151 const char *name
, const bt_value
*params
,
152 void *init_method_data
, bt_logging_level log_level
,
153 const bt_component_sink
**component
);
155 typedef enum bt_graph_connect_ports_status
{
156 BT_GRAPH_CONNECT_PORTS_STATUS_OK
= __BT_FUNC_STATUS_OK
,
157 BT_GRAPH_CONNECT_PORTS_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
158 BT_GRAPH_CONNECT_PORTS_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
159 BT_GRAPH_CONNECT_PORTS_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
160 } bt_graph_connect_ports_status
;
162 extern bt_graph_connect_ports_status
bt_graph_connect_ports(bt_graph
*graph
,
163 const bt_port_output
*upstream
,
164 const bt_port_input
*downstream
,
165 const bt_connection
**connection
);
167 typedef enum bt_graph_run_status
{
168 BT_GRAPH_RUN_STATUS_OK
= __BT_FUNC_STATUS_OK
,
169 BT_GRAPH_RUN_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
170 BT_GRAPH_RUN_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
171 BT_GRAPH_RUN_STATUS_AGAIN
= __BT_FUNC_STATUS_AGAIN
,
172 BT_GRAPH_RUN_STATUS_END
= __BT_FUNC_STATUS_END
,
173 BT_GRAPH_RUN_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
174 } bt_graph_run_status
;
176 extern bt_graph_run_status
bt_graph_run(bt_graph
*graph
);
178 typedef enum bt_graph_consume_status
{
179 BT_GRAPH_CONSUME_STATUS_OK
= __BT_FUNC_STATUS_OK
,
180 BT_GRAPH_CONSUME_STATUS_ERROR
= __BT_FUNC_STATUS_ERROR
,
181 BT_GRAPH_CONSUME_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
182 BT_GRAPH_CONSUME_STATUS_AGAIN
= __BT_FUNC_STATUS_AGAIN
,
183 BT_GRAPH_CONSUME_STATUS_END
= __BT_FUNC_STATUS_END
,
184 BT_GRAPH_CONSUME_STATUS_CANCELED
= __BT_FUNC_STATUS_CANCELED
,
185 } bt_graph_consume_status
;
187 extern bt_graph_consume_status
bt_graph_consume(bt_graph
*graph
);
189 typedef enum bt_graph_add_listener_status
{
190 BT_GRAPH_ADD_LISTENER_STATUS_OK
= __BT_FUNC_STATUS_OK
,
191 BT_GRAPH_ADD_LISTENER_STATUS_MEMORY_ERROR
= __BT_FUNC_STATUS_MEMORY_ERROR
,
192 } bt_graph_add_listener_status
;
194 extern bt_graph_add_listener_status
195 bt_graph_add_filter_component_input_port_added_listener(
197 bt_graph_filter_component_input_port_added_listener_func listener
,
198 bt_graph_listener_removed_func listener_removed
, void *data
,
201 extern bt_graph_add_listener_status
202 bt_graph_add_sink_component_input_port_added_listener(
204 bt_graph_sink_component_input_port_added_listener_func listener
,
205 bt_graph_listener_removed_func listener_removed
, void *data
,
208 extern bt_graph_add_listener_status
209 bt_graph_add_source_component_output_port_added_listener(
211 bt_graph_source_component_output_port_added_listener_func listener
,
212 bt_graph_listener_removed_func listener_removed
, void *data
,
215 extern bt_graph_add_listener_status
216 bt_graph_add_filter_component_output_port_added_listener(
218 bt_graph_filter_component_output_port_added_listener_func listener
,
219 bt_graph_listener_removed_func listener_removed
, void *data
,
222 extern bt_graph_add_listener_status
223 bt_graph_add_source_filter_component_ports_connected_listener(
225 bt_graph_source_filter_component_ports_connected_listener_func listener
,
226 bt_graph_listener_removed_func listener_removed
, void *data
,
229 extern bt_graph_add_listener_status
230 bt_graph_add_filter_filter_component_ports_connected_listener(
232 bt_graph_filter_filter_component_ports_connected_listener_func listener
,
233 bt_graph_listener_removed_func listener_removed
, void *data
,
236 extern bt_graph_add_listener_status
237 bt_graph_add_source_sink_component_ports_connected_listener(
239 bt_graph_source_sink_component_ports_connected_listener_func listener
,
240 bt_graph_listener_removed_func listener_removed
, void *data
,
243 extern bt_graph_add_listener_status
244 bt_graph_add_filter_sink_component_ports_connected_listener(
246 bt_graph_filter_sink_component_ports_connected_listener_func listener
,
247 bt_graph_listener_removed_func listener_removed
, void *data
,
250 typedef enum bt_graph_cancel_status
{
251 BT_GRAPH_CANCEL_STATUS_OK
= __BT_FUNC_STATUS_OK
,
252 } bt_graph_cancel_status
;
254 extern bt_graph_cancel_status
bt_graph_cancel(bt_graph
*graph
);
260 #endif /* BABELTRACE2_GRAPH_GRAPH_H */