g_free(component);
}
+BT_EXPORT
enum bt_component_class_type bt_component_get_class_type(
const struct bt_component *component)
{
return component->class->type;
}
+static
+bool port_name_is_unique(GPtrArray *ports, const char *name)
+{
+ guint i;
+ bool unique;
+
+ for (i = 0; i < ports->len; i++) {
+ struct bt_port *port = g_ptr_array_index(ports, i);
+
+ if (strcmp(port->name->str, name) == 0) {
+ unique = false;
+ goto end;
+ }
+ }
+
+ unique = true;
+
+end:
+ return unique;
+}
+
static
enum bt_self_component_add_port_status add_port(
struct bt_component *component, GPtrArray *ports,
enum bt_port_type port_type, const char *name, void *user_data,
- struct bt_port **port, const char *api_func)
+ struct bt_port **port, const char *api_func, bool input)
{
struct bt_port *new_port = NULL;
struct bt_graph *graph = NULL;
enum bt_self_component_add_port_status status;
- BT_ASSERT(component);
- BT_ASSERT(name);
+ BT_ASSERT_PRE_NO_ERROR_FROM_FUNC(api_func);
+ BT_ASSERT_PRE_COMP_NON_NULL_FROM_FUNC(api_func, component);
+ BT_ASSERT_PRE_NAME_NON_NULL_FROM_FUNC(api_func, name);
+ BT_ASSERT_PRE_FROM_FUNC(api_func,
+ input ? "input" : "output" "-port-name-is-unique",
+ port_name_is_unique(component->output_ports, name),
+ input ? "Input" : "Output"
+ " port name is not unique: name=\"%s\", %![comp-]c",
+ name, component);
BT_ASSERT_PRE_FROM_FUNC(api_func, "name-is-not-empty",
strlen(name) > 0, "Name is empty");
graph = bt_component_borrow_graph(component);
"Component's graph is already configured: "
"%![comp-]+c, %![graph-]+g", component, graph);
- // TODO: Validate that the name is not already used.
-
BT_LIB_LOGI("Adding port to component: %![comp-]+c, "
"port-type=%s, port-name=\"%s\"", component,
bt_port_type_string(port_type), name);
return status;
}
-BT_HIDDEN
uint64_t bt_component_get_input_port_count(const struct bt_component *comp,
const char *api_func)
{
return (uint64_t) comp->input_ports->len;
}
-BT_HIDDEN
uint64_t bt_component_get_output_port_count(const struct bt_component *comp,
const char *api_func)
{
return (uint64_t) comp->output_ports->len;
}
-BT_HIDDEN
int bt_component_create(struct bt_component_class *component_class,
const char *name, bt_logging_level log_level,
struct bt_component **user_component)
return ret;
}
+BT_EXPORT
const char *bt_component_get_name(const struct bt_component *component)
{
BT_ASSERT_PRE_DEV_COMP_NON_NULL(component);
return component->name->str;
}
+BT_EXPORT
const struct bt_component_class *bt_component_borrow_class_const(
const struct bt_component *component)
{
return component->class;
}
+BT_EXPORT
void *bt_self_component_get_data(const struct bt_self_component *self_comp)
{
struct bt_component *component = (void *) self_comp;
return component->user_data;
}
+BT_EXPORT
void bt_self_component_set_data(struct bt_self_component *self_comp,
void *data)
{
BT_LIB_LOGD("Set component's user data: %!+c", component);
}
-BT_HIDDEN
void bt_component_set_graph(struct bt_component *component,
struct bt_graph *graph)
{
return ret_port;
}
-BT_HIDDEN
struct bt_port_input *bt_component_borrow_input_port_by_name(
struct bt_component *comp, const char *name,
const char *api_func)
return (void *) borrow_port_by_name(comp->input_ports, name, api_func);
}
-BT_HIDDEN
struct bt_port_output *bt_component_borrow_output_port_by_name(
struct bt_component *comp, const char *name,
const char *api_func)
return g_ptr_array_index(ports, index);
}
-BT_HIDDEN
struct bt_port_input *bt_component_borrow_input_port_by_index(
struct bt_component *comp, uint64_t index,
const char *api_func)
borrow_port_by_index(comp->input_ports, index, api_func);
}
-BT_HIDDEN
struct bt_port_output *bt_component_borrow_output_port_by_index(
struct bt_component *comp, uint64_t index,
const char *api_func)
borrow_port_by_index(comp->output_ports, index, api_func);
}
-BT_HIDDEN
enum bt_self_component_add_port_status bt_component_add_input_port(
struct bt_component *component, const char *name,
void *user_data, struct bt_port **port, const char *api_func)
{
- BT_ASSERT_PRE_COMP_NON_NULL_FROM_FUNC(api_func, component);
- BT_ASSERT_PRE_NAME_NON_NULL_FROM_FUNC(api_func, name);
- BT_ASSERT_PRE_FROM_FUNC(api_func, "input-port-name-is-unique",
- bt_component_port_name_is_unique(component->input_ports, name),
- "Input port name is not unique: name=\"%s\", %![comp-]c",
- name, component);
-
/* add_port() logs details and checks preconditions */
return add_port(component, component->input_ports,
- BT_PORT_TYPE_INPUT, name, user_data, port, api_func);
+ BT_PORT_TYPE_INPUT, name, user_data, port, api_func, true);
}
-BT_HIDDEN
enum bt_self_component_add_port_status bt_component_add_output_port(
struct bt_component *component, const char *name,
void *user_data, struct bt_port **port,
const char *api_func)
{
- BT_ASSERT_PRE_COMP_NON_NULL_FROM_FUNC(api_func, component);
- BT_ASSERT_PRE_NAME_NON_NULL_FROM_FUNC(api_func, name);
- BT_ASSERT_PRE_FROM_FUNC(api_func, "output-port-name-is-unique",
- bt_component_port_name_is_unique(component->output_ports, name),
- "Output port name is not unique: name=\"%s\", %![comp-]c",
- name, component);
-
/* add_port() logs details and checks preconditions */
return add_port(component, component->output_ports,
- BT_PORT_TYPE_OUTPUT, name, user_data, port, api_func);
-}
-
-BT_HIDDEN
-bool bt_component_port_name_is_unique(GPtrArray *ports, const char *name)
-{
- guint i;
- bool unique;
-
- for (i = 0; i < ports->len; i++) {
- struct bt_port *port = g_ptr_array_index(ports, i);
-
- if (strcmp(port->name->str, name) == 0) {
- unique = false;
- goto end;
- }
- }
-
- unique = true;
-
-end:
- return unique;
+ BT_PORT_TYPE_OUTPUT, name, user_data, port, api_func, false);
}
-BT_HIDDEN
enum bt_component_class_port_connected_method_status
bt_component_port_connected(
struct bt_component *comp, struct bt_port *self_port,
return status;
}
-BT_HIDDEN
void bt_component_add_destroy_listener(struct bt_component *component,
bt_component_destroy_listener_func func, void *data)
{
component, func, data);
}
-BT_HIDDEN
void bt_component_remove_destroy_listener(struct bt_component *component,
bt_component_destroy_listener_func func, void *data)
{
}
}
+BT_EXPORT
bt_logging_level bt_component_get_logging_level(
const struct bt_component *component)
{
return component->log_level;
}
+BT_EXPORT
uint64_t bt_self_component_get_graph_mip_version(
bt_self_component *self_component)
{
return bt_component_borrow_graph(comp)->mip_version;
}
+BT_EXPORT
void bt_component_get_ref(const struct bt_component *component)
{
bt_object_get_ref(component);
}
+BT_EXPORT
void bt_component_put_ref(const struct bt_component *component)
{
bt_object_put_ref(component);