Rename <babeltrace/component/...> -> <babeltrace/graph/...>
[babeltrace.git] / lib / component / filter.c
CommitLineData
34ac9eaf
JG
1/*
2 * filter.c
3 *
4 * Babeltrace Filter Component
5 *
6 * Copyright 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 *
8 * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
9 *
10 * Permission is hereby granted, free of charge, to any person obtaining a copy
11 * of this software and associated documentation files (the "Software"), to deal
12 * in the Software without restriction, including without limitation the rights
13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 * copies of the Software, and to permit persons to whom the Software is
15 * furnished to do so, subject to the following conditions:
16 *
17 * The above copyright notice and this permission notice shall be included in
18 * all copies or substantial portions of the Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 * SOFTWARE.
27 */
28
29#include <babeltrace/compiler.h>
30#include <babeltrace/values.h>
b2e0c907
PP
31#include <babeltrace/graph/component-filter-internal.h>
32#include <babeltrace/graph/component-internal.h>
33#include <babeltrace/graph/component-class-internal.h>
34#include <babeltrace/graph/notification.h>
35#include <babeltrace/graph/notification-iterator-internal.h>
34ac9eaf 36
72b913fb 37BT_HIDDEN
366e034f
JG
38void bt_component_filter_destroy(struct bt_component *component)
39{
34a9ed19
JG
40}
41
366e034f
JG
42BT_HIDDEN
43struct bt_component *bt_component_filter_create(
44 struct bt_component_class *class, struct bt_value *params)
34a9ed19 45{
366e034f 46 struct bt_component_filter *filter = NULL;
34a9ed19 47
366e034f
JG
48 filter = g_new0(struct bt_component_filter, 1);
49 if (!filter) {
34a9ed19
JG
50 goto end;
51 }
52
34a9ed19 53end:
366e034f 54 return filter ? &filter->parent : NULL;
34a9ed19
JG
55}
56
366e034f
JG
57BT_HIDDEN
58enum bt_component_status bt_component_filter_validate(
59 struct bt_component *component)
34a9ed19 60{
34a9ed19
JG
61 enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
62
366e034f 63 if (!component) {
34a9ed19
JG
64 ret = BT_COMPONENT_STATUS_INVALID;
65 goto end;
66 }
67
366e034f
JG
68 if (!component->class) {
69 ret = BT_COMPONENT_STATUS_INVALID;
34a9ed19
JG
70 goto end;
71 }
72
366e034f 73 if (component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
34a9ed19
JG
74 ret = BT_COMPONENT_STATUS_INVALID;
75 goto end;
76 }
77
366e034f 78 /* Enforce iterator limits. */
34a9ed19
JG
79end:
80 return ret;
81}
82
346df6cf
JG
83enum bt_component_status bt_component_filter_get_input_port_count(
84 struct bt_component *component, uint64_t *count)
34a9ed19 85{
346df6cf 86 enum bt_component_status status = BT_COMPONENT_STATUS_OK;
34a9ed19 87
72b913fb
PP
88 if (!component || !count ||
89 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
346df6cf 90 status = BT_COMPONENT_STATUS_INVALID;
34a9ed19
JG
91 goto end;
92 }
93
72b913fb 94 *count = bt_component_get_input_port_count(component);
366e034f 95end:
346df6cf 96 return status;
366e034f
JG
97}
98
99struct bt_port *bt_component_filter_get_input_port(
100 struct bt_component *component, const char *name)
101{
72b913fb 102 struct bt_port *port = NULL;
366e034f
JG
103
104 if (!component || !name ||
105 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
34a9ed19
JG
106 goto end;
107 }
108
72b913fb 109 port = bt_component_get_input_port(component, name);
366e034f 110end:
72b913fb 111 return port;
366e034f 112}
d3e4dcd8 113
366e034f
JG
114struct bt_port *bt_component_filter_get_input_port_at_index(
115 struct bt_component *component, int index)
116{
117 struct bt_port *port = NULL;
366e034f
JG
118
119 if (!component ||
120 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
121 goto end;
34a9ed19
JG
122 }
123
72b913fb 124 port = bt_component_get_input_port_at_index(component, index);
34a9ed19 125end:
366e034f 126 return port;
34a9ed19
JG
127}
128
366e034f 129struct bt_port *bt_component_filter_get_default_input_port(
34a9ed19
JG
130 struct bt_component *component)
131{
366e034f
JG
132 return bt_component_filter_get_input_port(component,
133 DEFAULT_INPUT_PORT_NAME);
8b0ce102
PP
134}
135
346df6cf
JG
136enum bt_component_status bt_component_filter_get_output_port_count(
137 struct bt_component *component, uint64_t *count)
526fc31a 138{
346df6cf 139 enum bt_component_status status = BT_COMPONENT_STATUS_OK;
526fc31a 140
72b913fb
PP
141 if (!component || !count ||
142 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
346df6cf 143 status = BT_COMPONENT_STATUS_INVALID;
526fc31a
JG
144 goto end;
145 }
146
72b913fb 147 *count = bt_component_get_output_port_count(component);
526fc31a 148end:
346df6cf 149 return status;
526fc31a
JG
150}
151
366e034f
JG
152struct bt_port *bt_component_filter_get_output_port(
153 struct bt_component *component, const char *name)
526fc31a 154{
72b913fb 155 struct bt_port *port = NULL;
526fc31a 156
366e034f
JG
157 if (!component || !name ||
158 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
526fc31a
JG
159 goto end;
160 }
161
72b913fb 162 port = bt_component_get_output_port(component, name);
366e034f 163end:
72b913fb 164 return port;
366e034f
JG
165}
166
167struct bt_port *bt_component_filter_get_output_port_at_index(
168 struct bt_component *component, int index)
169{
170 struct bt_port *port = NULL;
366e034f
JG
171
172 if (!component ||
173 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
526fc31a
JG
174 goto end;
175 }
176
72b913fb 177 port = bt_component_get_output_port_at_index(component, index);
366e034f
JG
178end:
179 return port;
180}
181
182struct bt_port *bt_component_filter_get_default_output_port(
183 struct bt_component *component)
184{
185 return bt_component_filter_get_output_port(component,
186 DEFAULT_OUTPUT_PORT_NAME);
187}
188
890882ef
PP
189struct bt_private_port *
190bt_private_component_filter_get_input_private_port_at_index(
191 struct bt_private_component *private_component, int index)
192{
193 return bt_private_port_from_port(
194 bt_component_filter_get_input_port_at_index(
195 bt_component_from_private(private_component), index));
196}
197
198struct bt_private_port *
91457551 199bt_private_component_filter_get_default_input_private_port(
890882ef
PP
200 struct bt_private_component *private_component)
201{
202 return bt_private_port_from_port(
203 bt_component_filter_get_default_input_port(
204 bt_component_from_private(private_component)));
205}
206
207struct bt_private_port *bt_private_component_filter_add_input_private_port(
208 struct bt_private_component *private_component,
209 const char *name)
210{
211 struct bt_port *port = NULL;
212 struct bt_component *component =
213 bt_component_from_private(private_component);
214
215 if (!component ||
216 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
217 goto end;
218 }
219
220 port = bt_component_add_input_port(component, name);
221end:
222 return bt_private_port_from_port(port);
223}
224
225struct bt_private_port *
226bt_private_component_filter_get_output_private_port_at_index(
227 struct bt_private_component *private_component, int index)
228{
229 return bt_private_port_from_port(
230 bt_component_filter_get_output_port_at_index(
231 bt_component_from_private(private_component), index));
232}
233
234struct bt_private_port *
91457551 235bt_private_component_filter_get_default_output_private_port(
890882ef
PP
236 struct bt_private_component *private_component)
237{
238 return bt_private_port_from_port(
239 bt_component_filter_get_default_output_port(
240 bt_component_from_private(private_component)));
241}
242
243struct bt_private_port *bt_private_component_filter_add_output_private_port(
244 struct bt_private_component *private_component,
245 const char *name)
366e034f 246{
72b913fb 247 struct bt_port *port = NULL;
890882ef
PP
248 struct bt_component *component =
249 bt_component_from_private(private_component);
366e034f
JG
250
251 if (!component ||
252 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
526fc31a
JG
253 goto end;
254 }
255
72b913fb 256 port = bt_component_add_output_port(component, name);
366e034f 257end:
890882ef 258 return bt_private_port_from_port(port);
366e034f 259}
This page took 0.037613 seconds and 4 git commands to generate.