Add `-internal` suffix to all internal header files
[babeltrace.git] / lib / component / filter.c
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-internal.h>
30 #include <babeltrace/values.h>
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>
36
37 BT_HIDDEN
38 void bt_component_filter_destroy(struct bt_component *component)
39 {
40 }
41
42 BT_HIDDEN
43 struct bt_component *bt_component_filter_create(
44 struct bt_component_class *class, struct bt_value *params)
45 {
46 struct bt_component_filter *filter = NULL;
47
48 filter = g_new0(struct bt_component_filter, 1);
49 if (!filter) {
50 goto end;
51 }
52
53 end:
54 return filter ? &filter->parent : NULL;
55 }
56
57 BT_HIDDEN
58 enum bt_component_status bt_component_filter_validate(
59 struct bt_component *component)
60 {
61 enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
62
63 if (!component) {
64 ret = BT_COMPONENT_STATUS_INVALID;
65 goto end;
66 }
67
68 if (!component->class) {
69 ret = BT_COMPONENT_STATUS_INVALID;
70 goto end;
71 }
72
73 if (component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
74 ret = BT_COMPONENT_STATUS_INVALID;
75 goto end;
76 }
77
78 /* Enforce iterator limits. */
79 end:
80 return ret;
81 }
82
83 enum bt_component_status bt_component_filter_get_input_port_count(
84 struct bt_component *component, uint64_t *count)
85 {
86 enum bt_component_status status = BT_COMPONENT_STATUS_OK;
87
88 if (!component || !count ||
89 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
90 status = BT_COMPONENT_STATUS_INVALID;
91 goto end;
92 }
93
94 *count = bt_component_get_input_port_count(component);
95 end:
96 return status;
97 }
98
99 struct bt_port *bt_component_filter_get_input_port(
100 struct bt_component *component, const char *name)
101 {
102 struct bt_port *port = NULL;
103
104 if (!component || !name ||
105 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
106 goto end;
107 }
108
109 port = bt_component_get_input_port(component, name);
110 end:
111 return port;
112 }
113
114 struct bt_port *bt_component_filter_get_input_port_at_index(
115 struct bt_component *component, int index)
116 {
117 struct bt_port *port = NULL;
118
119 if (!component ||
120 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
121 goto end;
122 }
123
124 port = bt_component_get_input_port_at_index(component, index);
125 end:
126 return port;
127 }
128
129 struct bt_port *bt_component_filter_get_default_input_port(
130 struct bt_component *component)
131 {
132 return bt_component_filter_get_input_port(component,
133 DEFAULT_INPUT_PORT_NAME);
134 }
135
136 enum bt_component_status bt_component_filter_get_output_port_count(
137 struct bt_component *component, uint64_t *count)
138 {
139 enum bt_component_status status = BT_COMPONENT_STATUS_OK;
140
141 if (!component || !count ||
142 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
143 status = BT_COMPONENT_STATUS_INVALID;
144 goto end;
145 }
146
147 *count = bt_component_get_output_port_count(component);
148 end:
149 return status;
150 }
151
152 struct bt_port *bt_component_filter_get_output_port(
153 struct bt_component *component, const char *name)
154 {
155 struct bt_port *port = NULL;
156
157 if (!component || !name ||
158 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
159 goto end;
160 }
161
162 port = bt_component_get_output_port(component, name);
163 end:
164 return port;
165 }
166
167 struct bt_port *bt_component_filter_get_output_port_at_index(
168 struct bt_component *component, int index)
169 {
170 struct bt_port *port = NULL;
171
172 if (!component ||
173 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
174 goto end;
175 }
176
177 port = bt_component_get_output_port_at_index(component, index);
178 end:
179 return port;
180 }
181
182 struct 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
189 struct bt_private_port *
190 bt_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
198 struct bt_private_port *
199 bt_private_component_filter_get_default_input_private_port(
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
207 struct 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);
221 end:
222 return bt_private_port_from_port(port);
223 }
224
225 struct bt_private_port *
226 bt_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
234 struct bt_private_port *
235 bt_private_component_filter_get_default_output_private_port(
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
243 struct bt_private_port *bt_private_component_filter_add_output_private_port(
244 struct bt_private_component *private_component,
245 const char *name)
246 {
247 struct bt_port *port = NULL;
248 struct bt_component *component =
249 bt_component_from_private(private_component);
250
251 if (!component ||
252 component->class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
253 goto end;
254 }
255
256 port = bt_component_add_output_port(component, name);
257 end:
258 return bt_private_port_from_port(port);
259 }
This page took 0.035502 seconds and 4 git commands to generate.