X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Fnative_bt_graph.i.h;fp=src%2Fbindings%2Fpython%2Fbt2%2Fbt2%2Fnative_bt_graph.i.h;h=e45fea610df5a886b186c67bb90ab799eedd7704;hb=2945edfe752782d2528af21bdbd3bbfef4cd51ca;hp=e310e53bf245f9c6b5fd106b310c351125a8575d;hpb=25cdf28b4a9d3e21c54cb6b18bf9a90528d89229;p=babeltrace.git diff --git a/src/bindings/python/bt2/bt2/native_bt_graph.i.h b/src/bindings/python/bt2/bt2/native_bt_graph.i.h index e310e53b..e45fea61 100644 --- a/src/bindings/python/bt2/bt2/native_bt_graph.i.h +++ b/src/bindings/python/bt2/bt2/native_bt_graph.i.h @@ -247,271 +247,6 @@ end: return py_listener_ids; } -static -bt_graph_listener_func_status ports_connected_listener( - const void *upstream_component, - swig_type_info *upstream_component_swig_type, - bt_component_class_type upstream_component_class_type, - const bt_port_output *upstream_port, - const void *downstream_component, - swig_type_info *downstream_component_swig_type, - bt_component_class_type downstream_component_class_type, - const bt_port_input *downstream_port, - void *py_callable) -{ - PyObject *py_upstream_component_ptr = NULL; - PyObject *py_upstream_port_ptr = NULL; - PyObject *py_downstream_component_ptr = NULL; - PyObject *py_downstream_port_ptr = NULL; - PyObject *py_res = NULL; - bt_graph_listener_func_status status; - - py_upstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(upstream_component), - upstream_component_swig_type, 0); - if (!py_upstream_component_ptr) { - BT_LOGF_STR("Failed to create upstream component SWIG pointer object."); - status = __BT_FUNC_STATUS_MEMORY_ERROR; - goto end; - } - - py_upstream_port_ptr = SWIG_NewPointerObj( - SWIG_as_voidptr(upstream_port), SWIGTYPE_p_bt_port_output, 0); - if (!py_upstream_port_ptr) { - BT_LOGF_STR("Failed to create upstream port SWIG pointer object."); - status = __BT_FUNC_STATUS_MEMORY_ERROR; - goto end; - } - - py_downstream_component_ptr = SWIG_NewPointerObj(SWIG_as_voidptr(downstream_component), - downstream_component_swig_type, 0); - if (!py_downstream_component_ptr) { - BT_LOGF_STR("Failed to create downstream component SWIG pointer object."); - status = __BT_FUNC_STATUS_MEMORY_ERROR; - goto end; - } - - py_downstream_port_ptr = SWIG_NewPointerObj( - SWIG_as_voidptr(downstream_port), SWIGTYPE_p_bt_port_input, 0); - if (!py_downstream_port_ptr) { - BT_LOGF_STR("Failed to create downstream port SWIG pointer object."); - status = __BT_FUNC_STATUS_MEMORY_ERROR; - goto end; - } - - py_res = PyObject_CallFunction(py_callable, "(OiOOiO)", - py_upstream_component_ptr, upstream_component_class_type, - py_upstream_port_ptr, - py_downstream_component_ptr, downstream_component_class_type, - py_downstream_port_ptr); - if (!py_res) { - loge_exception_append_cause_clear( - "Graph's port connected listener (Python)", - BT_LOG_OUTPUT_LEVEL); - status = __BT_FUNC_STATUS_ERROR; - goto end; - } - - BT_ASSERT(py_res == Py_None); - status = __BT_FUNC_STATUS_OK; - -end: - Py_XDECREF(py_upstream_component_ptr); - Py_XDECREF(py_upstream_port_ptr); - Py_XDECREF(py_downstream_component_ptr); - Py_XDECREF(py_downstream_port_ptr); - Py_XDECREF(py_res); - return status; -} - -static -bt_graph_listener_func_status source_filter_component_ports_connected_listener( - const bt_component_source *source_component, - const bt_component_filter *filter_component, - const bt_port_output *upstream_port, - const bt_port_input *downstream_port, void *py_callable) -{ - return ports_connected_listener( - source_component, SWIGTYPE_p_bt_component_source, BT_COMPONENT_CLASS_TYPE_SOURCE, - upstream_port, - filter_component, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER, - downstream_port, - py_callable); -} - -static -bt_graph_listener_func_status source_sink_component_ports_connected_listener( - const bt_component_source *source_component, - const bt_component_sink *sink_component, - const bt_port_output *upstream_port, - const bt_port_input *downstream_port, void *py_callable) -{ - return ports_connected_listener( - source_component, SWIGTYPE_p_bt_component_source, BT_COMPONENT_CLASS_TYPE_SOURCE, - upstream_port, - sink_component, SWIGTYPE_p_bt_component_sink, BT_COMPONENT_CLASS_TYPE_SINK, - downstream_port, - py_callable); -} - -static -bt_graph_listener_func_status filter_filter_component_ports_connected_listener( - const bt_component_filter *filter_component_left, - const bt_component_filter *filter_component_right, - const bt_port_output *upstream_port, - const bt_port_input *downstream_port, void *py_callable) -{ - return ports_connected_listener( - filter_component_left, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER, - upstream_port, - filter_component_right, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER, - downstream_port, - py_callable); -} - -static -bt_graph_listener_func_status filter_sink_component_ports_connected_listener( - const bt_component_filter *filter_component, - const bt_component_sink *sink_component, - const bt_port_output *upstream_port, - const bt_port_input *downstream_port, void *py_callable) -{ - return ports_connected_listener( - filter_component, SWIGTYPE_p_bt_component_filter, BT_COMPONENT_CLASS_TYPE_FILTER, - upstream_port, - sink_component, SWIGTYPE_p_bt_component_sink, BT_COMPONENT_CLASS_TYPE_SINK, - downstream_port, - py_callable); -} - -static -PyObject *bt_bt2_graph_add_ports_connected_listener(struct bt_graph *graph, - PyObject *py_callable) -{ - PyObject *py_listener_ids = NULL; - PyObject *py_listener_id = NULL; - bt_listener_id listener_id; - bt_graph_add_listener_status status; - const char * const module_name = - "graph_add_ports_connected_listener() (Python)"; - - BT_ASSERT(graph); - BT_ASSERT(py_callable); - - /* Behind the scene, we will be registering 4 different listeners and - * return all of their ids. */ - py_listener_ids = PyTuple_New(4); - if (!py_listener_ids) { - BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name, - "Failed to allocate one PyTuple."); - goto error; - } - - /* source -> filter connection */ - status = bt_graph_add_source_filter_component_ports_connected_listener( - graph, source_filter_component_ports_connected_listener, - graph_listener_removed, py_callable, &listener_id); - if (status != __BT_FUNC_STATUS_OK) { - /* - * bt_graph_add_source_filter_component_ports_connected_listener - * has already logged/appended an error cause. - */ - goto error; - } - - py_listener_id = PyLong_FromUnsignedLongLong(listener_id); - if (!py_listener_id) { - BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name, - "Failed to allocate one PyLong."); - goto error; - } - - PyTuple_SET_ITEM(py_listener_ids, 0, py_listener_id); - py_listener_id = NULL; - - /* source -> sink connection */ - status = bt_graph_add_source_sink_component_ports_connected_listener( - graph, source_sink_component_ports_connected_listener, - graph_listener_removed, py_callable, &listener_id); - if (status != __BT_FUNC_STATUS_OK) { - /* - * bt_graph_add_source_sink_component_ports_connected_listener - * has already logged/appended an error cause. - */ - goto error; - } - - py_listener_id = PyLong_FromUnsignedLongLong(listener_id); - if (!py_listener_id) { - BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name, - "Failed to allocate one PyLong."); - goto error; - } - - PyTuple_SET_ITEM(py_listener_ids, 1, py_listener_id); - py_listener_id = NULL; - - /* filter -> filter connection */ - status = bt_graph_add_filter_filter_component_ports_connected_listener( - graph, filter_filter_component_ports_connected_listener, - graph_listener_removed, py_callable, &listener_id); - if (status != __BT_FUNC_STATUS_OK) { - /* - * bt_graph_add_filter_filter_component_ports_connected_listener - * has already logged/appended an error cause. - */ - goto error; - } - - py_listener_id = PyLong_FromUnsignedLongLong(listener_id); - if (!py_listener_id) { - BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name, - "Failed to allocate one PyLong."); - goto error; - } - - PyTuple_SET_ITEM(py_listener_ids, 2, py_listener_id); - py_listener_id = NULL; - - /* filter -> sink connection */ - status = bt_graph_add_filter_sink_component_ports_connected_listener( - graph, filter_sink_component_ports_connected_listener, - graph_listener_removed, py_callable, &listener_id); - if (status != __BT_FUNC_STATUS_OK) { - /* - * bt_graph_add_filter_sink_component_ports_connected_listener - * has already logged/appended an error cause. - */ - goto error; - } - - py_listener_id = PyLong_FromUnsignedLongLong(listener_id); - if (!py_listener_id) { - BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN(module_name, - "Failed to allocate one PyLong."); - goto error; - } - - PyTuple_SET_ITEM(py_listener_ids, 3, py_listener_id); - py_listener_id = NULL; - - Py_INCREF(py_callable); - Py_INCREF(py_callable); - Py_INCREF(py_callable); - Py_INCREF(py_callable); - - goto end; - -error: - Py_XDECREF(py_listener_ids); - py_listener_ids = Py_None; - Py_INCREF(py_listener_ids); - -end: - - Py_XDECREF(py_listener_id); - return py_listener_ids; -} - static bt_graph_add_component_status bt_bt2_graph_add_source_component(