Replace add_iterator methods by a single new_connection method
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 21 Feb 2017 01:29:00 +0000 (20:29 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:38 +0000 (12:57 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/component/component-class-filter.h
include/babeltrace/component/component-class-internal.h
include/babeltrace/component/component-class-sink.h
include/babeltrace/component/component-class.h
include/babeltrace/component/component-internal.h
include/babeltrace/plugin/plugin-dev.h
lib/component/component-class.c
lib/plugin/plugin-so.c

index 78d3df8d56abbc7c515f0c700cc0bdc3337892aa..b0024dc28be1bb993785b4a686a8e07fad6f8b26 100644 (file)
@@ -33,18 +33,11 @@ extern "C" {
 
 struct bt_component_class;
 
-typedef enum bt_component_status (*bt_component_class_filter_add_iterator_method)(
-               struct bt_component *, struct bt_notification_iterator *);
-
 extern
 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);
 
-extern int bt_component_class_filter_set_add_iterator_method(
-               struct bt_component_class *component_class,
-               bt_component_class_filter_add_iterator_method add_iterator_method);
-
 extern
 int bt_component_class_filter_set_notification_iterator_init_method(
                struct bt_component_class *component_class,
index d03ded1577909c87edc13af89f0af493abc80ff1..3994edbdea6541bab3d9c00f55bc4f957fcd7880 100644 (file)
@@ -58,6 +58,7 @@ struct bt_component_class {
                bt_component_class_init_method init;
                bt_component_class_destroy_method destroy;
                bt_component_class_query_method query;
+               bt_component_class_new_connection_method new_connection_method;
        } methods;
        /* Array of struct bt_component_class_destroy_listener */
        GArray *destroy_listeners;
@@ -83,7 +84,6 @@ struct bt_component_class_sink {
        struct bt_component_class parent;
        struct {
                bt_component_class_sink_consume_method consume;
-               bt_component_class_sink_add_iterator_method add_iterator;
        } methods;
 };
 
@@ -91,7 +91,6 @@ struct bt_component_class_filter {
        struct bt_component_class parent;
        struct {
                struct bt_component_class_iterator_methods iterator;
-               bt_component_class_filter_add_iterator_method add_iterator;
        } methods;
 };
 
index 5f89bc81f3b889069469834ee7713eb6108de5d4..8b3ed62daa525e0927c8f31bd8481eac3567dcd1 100644 (file)
@@ -36,17 +36,10 @@ struct bt_component_class;
 typedef enum bt_component_status (*bt_component_class_sink_consume_method)(
         struct bt_component *);
 
-typedef enum bt_component_status (*bt_component_class_sink_add_iterator_method)(
-        struct bt_component *, struct bt_notification_iterator *);
-
 extern
 struct bt_component_class *bt_component_class_sink_create(const char *name,
                bt_component_class_sink_consume_method consume_method);
 
-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);
-
 #ifdef __cplusplus
 }
 #endif
index 6135343ec3505b54fff9ad9e15bc277c4f7bb5c5..9ca1f0461c68bbe6bfc3fbbe2b1695b2f462a67c 100644 (file)
@@ -77,6 +77,9 @@ typedef struct bt_value *(*bt_component_class_query_method)(
                struct bt_component_class *component_class,
                const char *object, struct bt_value *params);
 
+typedef enum bt_component_status (*bt_component_class_new_connection_method)(
+               struct bt_port *own_port, struct bt_connection *connection);
+
 extern int bt_component_class_set_init_method(
                struct bt_component_class *component_class,
                bt_component_class_init_method init_method);
@@ -85,6 +88,10 @@ extern int bt_component_class_set_destroy_method(
                struct bt_component_class *component_class,
                bt_component_class_destroy_method destroy_method);
 
+extern int bt_component_class_set_new_connection_method(
+               struct bt_component_class *component_class,
+               bt_component_class_new_connection_method new_connection_method);
+
 extern int bt_component_class_set_description(
                struct bt_component_class *component_class,
                const char *description);
@@ -124,6 +131,10 @@ extern int bt_component_class_set_query_method(
                struct bt_component_class *component_class,
                bt_component_class_query_method query_method);
 
+extern int bt_component_class_set_new_connection_method(
+               struct bt_component_class *component_class,
+               bt_component_class_new_connection_method new_connection_method);
+
 extern struct bt_value *bt_component_class_query(
                struct bt_component_class *component_class,
                const char *object, struct bt_value *params);
index 3915cd836545b3a65205226a71574eb51e1c0ff2..b6dfc880182f507a09e0b73e814e27edff4ba2ab 100644 (file)
@@ -67,6 +67,11 @@ BT_HIDDEN
 struct bt_notification_iterator *bt_component_create_iterator(
                struct bt_component *component, void *init_method_data);
 
+BT_HIDDEN
+enum bt_component_status bt_component_new_connection(
+               struct bt_component *component, struct bt_port *own_port,
+               struct bt_connection *connection);
+
 BT_HIDDEN
 void bt_component_set_graph(struct bt_component *component,
                struct bt_graph *graph);
index bf04da73ac5440f2b9c4f04ca8ff6931816c78d8..145c9018269e95acebebd522a61eb6245f73aed6 100644 (file)
@@ -169,11 +169,10 @@ enum __bt_plugin_component_class_descriptor_attribute_type {
        BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_INIT_METHOD                 = 2,
        BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_DESTROY_METHOD              = 3,
        BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD                = 4,
-       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD  = 5,
-       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD    = 6,
-       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD      = 7,
-       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD   = 8,
-       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 9,
+       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD       = 5,
+       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD      = 6,
+       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_DESTROY_METHOD   = 7,
+       BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_SEEK_TIME_METHOD = 8,
 };
 
 /* Component class attribute (internal use) */
@@ -207,11 +206,8 @@ struct __bt_plugin_component_class_descriptor_attribute {
                /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD */
                bt_component_class_query_method query_method;
 
-               /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD */
-               bt_component_class_filter_add_iterator_method filter_add_iterator_method;
-
-               /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD */
-               bt_component_class_sink_add_iterator_method sink_add_iterator_method;
+               /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD */
+               bt_component_class_new_connection_method new_connection_method;
 
                /* BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD */
                bt_component_class_notification_iterator_init_method notif_iter_init_method;
@@ -624,28 +620,40 @@ struct __bt_plugin_component_class_descriptor_attribute {
        __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(query_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_QUERY_METHOD, _id, _comp_class_id, sink, _x)
 
 /*
- * Defines an add iterator method attribute attached to a specific
+ * Defines a new connection method attribute attached to a specific
+ * source component class descriptor.
+ *
+ * _id:            Plugin descriptor ID (C identifier).
+ * _comp_class_id: Component class descriptor ID (C identifier).
+ * _x:             New connection method
+ *                 (bt_component_class_new_connection_method).
+ */
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+       __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, source, _x)
+
+/*
+ * Defines a new connection method attribute attached to a specific
  * filter component class descriptor.
  *
  * _id:            Plugin descriptor ID (C identifier).
  * _comp_class_id: Component class descriptor ID (C identifier).
- * _x:             Add iterator method
- *                 (bt_component_class_filter_add_iterator_method).
+ * _x:             New connection method
+ *                 (bt_component_class_new_connection_method).
  */
-#define BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(_id, _comp_class_id, _x) \
-       __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(filter_add_iterator_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD, _id, _comp_class_id, filter, _x)
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+       __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, filter, _x)
 
 /*
- * Defines an add iterator method attribute attached to a specific
+ * Defines a new connection method attribute attached to a specific
  * sink component class descriptor.
  *
  * _id:            Plugin descriptor ID (C identifier).
  * _comp_class_id: Component class descriptor ID (C identifier).
- * _x:             Add iterator method
- *                 (bt_component_class_sink_add_iterator_method).
+ * _x:             New connection method
+ *                 (bt_component_class_new_connection_method).
  */
-#define BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(_id, _comp_class_id, _x) \
-       __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(sink_add_iterator_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD, _id, _comp_class_id, sink, _x)
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(_id, _comp_class_id, _x) \
+       __BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE(new_connection_method, BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD, _id, _comp_class_id, sink, _x)
 
 /*
  * Defines an iterator initialization method attribute attached to a
@@ -976,26 +984,34 @@ struct __bt_plugin_component_class_descriptor_attribute {
        BT_PLUGIN_SINK_COMPONENT_CLASS_QUERY_METHOD_WITH_ID(auto, _name, _x)
 
 /*
- * Defines an add iterator method attribute attached to a filter
- * component class descriptor which is attached to the automatic plugin
- * descriptor.
+ * Defines a new connection method attribute attached to a source component
+ * class descriptor which is attached to the automatic plugin descriptor.
  *
  * _name: Component class name (C identifier).
- * _x:    Add iterator method (bt_component_class_filter_add_iterator_method).
+ * _x:    New connections method (bt_component_class_new_connection_method).
  */
-#define BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD(_name, _x) \
-       BT_PLUGIN_FILTER_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(auto, _name, _x)
+#define BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+       BT_PLUGIN_SOURCE_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
 
 /*
- * Defines an add iterator method attribute attached to a sink
- * component class descriptor which is attached to the automatic plugin
- * descriptor.
+ * Defines a new connection method attribute attached to a filter component
+ * class descriptor which is attached to the automatic plugin descriptor.
+ *
+ * _name: Component class name (C identifier).
+ * _x:    New connections method (bt_component_class_new_connection_method).
+ */
+#define BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+       BT_PLUGIN_FILTER_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
+
+/*
+ * Defines a new connection method attribute attached to a sink component
+ * class descriptor which is attached to the automatic plugin descriptor.
  *
  * _name: Component class name (C identifier).
- * _x:    Add iterator method (bt_component_class_sink_add_iterator_method).
+ * _x:    New connections method (bt_component_class_new_connection_method).
  */
-#define BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD(_name, _x) \
-       BT_PLUGIN_SINK_COMPONENT_CLASS_ADD_ITERATOR_METHOD_WITH_ID(auto, _name, _x)
+#define BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD(_name, _x) \
+       BT_PLUGIN_SINK_COMPONENT_CLASS_NEW_CONNECTION_METHOD_WITH_ID(auto, _name, _x)
 
 /*
  * Defines an iterator initialization method attribute attached to a
index fa71bc94bc71439a47e1e615f982eafbe11fe15f..0843e0c25d71030ff327fefb6bf4ccaf79bbd59f 100644 (file)
@@ -245,6 +245,24 @@ end:
        return ret;
 }
 
+int bt_component_class_set_new_connection_method(
+               struct bt_component_class *component_class,
+               bt_component_class_new_connection_method new_connection_method)
+{
+       int ret = 0;
+
+       if (!component_class || component_class->frozen ||
+                       !new_connection_method) {
+               ret = -1;
+               goto end;
+       }
+
+       component_class->methods.new_connection_method = new_connection_method;
+
+end:
+       return ret;
+}
+
 int bt_component_class_set_destroy_method(
                struct bt_component_class *component_class,
                bt_component_class_destroy_method destroy_method)
@@ -481,51 +499,6 @@ end:
        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)
-{
-       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) {
-               ret = -1;
-               goto end;
-       }
-
-       sink_class = container_of(component_class,
-               struct bt_component_class_sink, parent);
-       sink_class->methods.add_iterator = add_iterator_method;
-
-end:
-       return ret;
-}
-
-extern int bt_component_class_filter_set_add_iterator_method(
-               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)
 {
index 83c5e10ef02af4de54e95703596c6265205dece3..24478f1fc761ab9f02ae8c4b0e9c12d0f7f36665 100644 (file)
@@ -253,8 +253,7 @@ enum bt_plugin_status bt_plugin_so_init(
                bt_component_class_init_method init_method;
                bt_component_class_destroy_method destroy_method;
                bt_component_class_query_method query_method;
-               bt_component_class_filter_add_iterator_method filter_add_iterator_method;
-               bt_component_class_sink_add_iterator_method sink_add_iterator_method;
+               bt_component_class_new_connection_method new_connection_method;
                struct bt_component_class_iterator_methods iterator_methods;
        };
 
@@ -383,13 +382,9 @@ enum bt_plugin_status bt_plugin_so_init(
                                        cc_full_descr->query_method =
                                                cur_cc_descr_attr->value.query_method;
                                        break;
-                               case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_FILTER_ADD_ITERATOR_METHOD:
-                                       cc_full_descr->filter_add_iterator_method =
-                                               cur_cc_descr_attr->value.filter_add_iterator_method;
-                                       break;
-                               case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_SINK_ADD_ITERATOR_METHOD:
-                                       cc_full_descr->sink_add_iterator_method =
-                                               cur_cc_descr_attr->value.sink_add_iterator_method;
+                               case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NEW_CONNECTION_METHOD:
+                                       cc_full_descr->new_connection_method =
+                                               cur_cc_descr_attr->value.new_connection_method;
                                        break;
                                case BT_PLUGIN_COMPONENT_CLASS_DESCRIPTOR_ATTRIBUTE_TYPE_NOTIF_ITER_INIT_METHOD:
                                        cc_full_descr->iterator_methods.init =
@@ -516,6 +511,16 @@ enum bt_plugin_status bt_plugin_so_init(
                        }
                }
 
+               if (cc_full_descr->new_connection_method) {
+                       ret = bt_component_class_set_new_connection_method(
+                               comp_class, cc_full_descr->new_connection_method);
+                       if (ret) {
+                               status = BT_PLUGIN_STATUS_ERROR;
+                               BT_PUT(comp_class);
+                               goto end;
+                       }
+               }
+
                switch (cc_full_descr->descriptor->type) {
                case BT_COMPONENT_CLASS_TYPE_SOURCE:
                        if (cc_full_descr->iterator_methods.init) {
@@ -552,17 +557,6 @@ enum bt_plugin_status bt_plugin_so_init(
                        }
                        break;
                case BT_COMPONENT_CLASS_TYPE_FILTER:
-                       if (cc_full_descr->filter_add_iterator_method) {
-                               ret = bt_component_class_filter_set_add_iterator_method(
-                                       comp_class,
-                                       cc_full_descr->filter_add_iterator_method);
-                               if (ret) {
-                                       status = BT_PLUGIN_STATUS_ERROR;
-                                       BT_PUT(comp_class);
-                                       goto end;
-                               }
-                       }
-
                        if (cc_full_descr->iterator_methods.init) {
                                ret = bt_component_class_filter_set_notification_iterator_init_method(
                                        comp_class,
@@ -597,16 +591,6 @@ enum bt_plugin_status bt_plugin_so_init(
                        }
                        break;
                case BT_COMPONENT_CLASS_TYPE_SINK:
-                       if (cc_full_descr->sink_add_iterator_method) {
-                               ret = bt_component_class_sink_set_add_iterator_method(
-                                       comp_class,
-                                       cc_full_descr->sink_add_iterator_method);
-                               if (ret) {
-                                       status = BT_PLUGIN_STATUS_ERROR;
-                                       BT_PUT(comp_class);
-                                       goto end;
-                               }
-                       }
                        break;
                default:
                        assert(false);
This page took 0.032324 seconds and 4 git commands to generate.