}
struct bt_component_class *bt_component_class_source_create(const char *name,
- bt_component_class_notification_iterator_get_method notification_iterator_get_method,
bt_component_class_notification_iterator_next_method notification_iterator_next_method)
{
struct bt_component_class_source *source_class = NULL;
int ret;
- if (!name || !notification_iterator_get_method ||
- !notification_iterator_next_method) {
+ if (!name || !notification_iterator_next_method) {
goto end;
}
goto end;
}
- source_class->methods.iterator.get = notification_iterator_get_method;
source_class->methods.iterator.next = notification_iterator_next_method;
end:
}
struct bt_component_class *bt_component_class_filter_create(const char *name,
- bt_component_class_notification_iterator_get_method notification_iterator_get_method,
bt_component_class_notification_iterator_next_method notification_iterator_next_method)
{
struct bt_component_class_filter *filter_class = NULL;
int ret;
- if (!name || !notification_iterator_get_method ||
- !notification_iterator_next_method) {
+ if (!name || !notification_iterator_next_method) {
goto end;
}
goto end;
}
- filter_class->methods.iterator.get = notification_iterator_get_method;
filter_class->methods.iterator.next = notification_iterator_next_method;
end:
return ret;
}
-int bt_component_class_set_destroy_method(
+int bt_component_class_set_query_method(
struct bt_component_class *component_class,
- bt_component_class_destroy_method destroy_method)
+ bt_component_class_query_method query_method)
{
int ret = 0;
- if (!component_class || component_class->frozen || !destroy_method) {
+ if (!component_class || component_class->frozen || !query_method) {
ret = -1;
goto end;
}
- component_class->methods.destroy = destroy_method;
+ component_class->methods.query = query_method;
+
+end:
+ return ret;
+}
+
+int bt_component_class_set_accept_port_connection_method(
+ struct bt_component_class *component_class,
+ bt_component_class_accept_port_connection_method method)
+{
+ int ret = 0;
+
+ if (!component_class || component_class->frozen || !method) {
+ ret = -1;
+ goto end;
+ }
+
+ component_class->methods.accept_port_connection = method;
+
+end:
+ return ret;
+}
+
+int bt_component_class_set_port_disconnected_method(
+ struct bt_component_class *component_class,
+ bt_component_class_port_disconnected_method method)
+{
+ int ret = 0;
+
+ if (!component_class || component_class->frozen || !method) {
+ ret = -1;
+ goto end;
+ }
+
+ component_class->methods.port_disconnected = method;
+
+end:
+ return ret;
+}
+
+int bt_component_class_set_finalize_method(
+ struct bt_component_class *component_class,
+ bt_component_class_finalize_method finalize_method)
+{
+ int ret = 0;
+
+ if (!component_class || component_class->frozen || !finalize_method) {
+ ret = -1;
+ goto end;
+ }
+
+ component_class->methods.finalize = finalize_method;
end:
return ret;
return ret;
}
-int bt_component_class_source_set_notification_iterator_destroy_method(
+int bt_component_class_source_set_notification_iterator_finalize_method(
struct bt_component_class *component_class,
- bt_component_class_notification_iterator_destroy_method notification_iterator_destroy_method)
+ bt_component_class_notification_iterator_finalize_method notification_iterator_finalize_method)
{
struct bt_component_class_source *source_class;
int ret = 0;
if (!component_class || component_class->frozen ||
- !notification_iterator_destroy_method ||
+ !notification_iterator_finalize_method ||
component_class->type != BT_COMPONENT_CLASS_TYPE_SOURCE) {
ret = -1;
goto end;
source_class = container_of(component_class,
struct bt_component_class_source, parent);
- source_class->methods.iterator.destroy =
- notification_iterator_destroy_method;
+ source_class->methods.iterator.finalize =
+ notification_iterator_finalize_method;
end:
return ret;
return ret;
}
-int bt_component_class_filter_set_notification_iterator_destroy_method(
+int bt_component_class_filter_set_notification_iterator_finalize_method(
struct bt_component_class *component_class,
- bt_component_class_notification_iterator_destroy_method notification_iterator_destroy_method)
+ bt_component_class_notification_iterator_finalize_method notification_iterator_finalize_method)
{
struct bt_component_class_filter *filter_class;
int ret = 0;
if (!component_class || component_class->frozen ||
- !notification_iterator_destroy_method ||
+ !notification_iterator_finalize_method ||
component_class->type != BT_COMPONENT_CLASS_TYPE_FILTER) {
ret = -1;
goto end;
filter_class = container_of(component_class,
struct bt_component_class_filter, parent);
- filter_class->methods.iterator.destroy =
- notification_iterator_destroy_method;
+ filter_class->methods.iterator.finalize =
+ notification_iterator_finalize_method;
end:
return ret;
return ret;
}
-extern int bt_component_class_sink_set_add_iterator_method(
- struct bt_component_class *component_class,
- bt_component_class_sink_add_iterator_method add_iterator_method)
+int bt_component_class_freeze(
+ struct bt_component_class *component_class)
{
- struct bt_component_class_sink *sink_class;
int ret = 0;
- if (!component_class || component_class->frozen ||
- !add_iterator_method ||
- component_class->type != BT_COMPONENT_CLASS_TYPE_SINK) {
+ if (!component_class) {
ret = -1;
goto end;
}
- sink_class = container_of(component_class,
- struct bt_component_class_sink, parent);
- sink_class->methods.add_iterator = add_iterator_method;
+ component_class->frozen = true;
end:
return ret;
}
-extern int bt_component_class_filter_set_add_iterator_method(
+struct bt_value *bt_component_class_query(
struct bt_component_class *component_class,
- bt_component_class_filter_add_iterator_method add_iterator_method)
-{
- struct bt_component_class_filter *filter_class;
- int ret = 0;
-
- if (!component_class || component_class->frozen ||
- !add_iterator_method ||
- component_class->type !=
- BT_COMPONENT_CLASS_TYPE_FILTER) {
- ret = -1;
- goto end;
- }
-
- filter_class = container_of(component_class,
- struct bt_component_class_filter, parent);
- filter_class->methods.add_iterator = add_iterator_method;
-
-end:
- return ret;
-}
-
-int bt_component_class_freeze(
- struct bt_component_class *component_class)
+ const char *object, struct bt_value *params)
{
- int ret = 0;
+ struct bt_value *results = NULL;
- if (!component_class) {
- ret = -1;
+ if (!component_class || !object || !params ||
+ !component_class->methods.query) {
goto end;
}
- component_class->frozen = true;
+ results = component_class->methods.query(component_class,
+ object, params);
end:
- return ret;
+ return results;
}