X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Ftrace-ir%2Ffield-path.c;h=23b65a75c7573455fedd751dcb5fb8b2845c1392;hb=68b66a256a54d32992dfefeaad11eea88b7df234;hp=48a03a86b5ec82472a1bf18a75f55a4738c1b75d;hpb=238b7404b66983c6ba15c3a44bfbf642f20bdabe;p=babeltrace.git diff --git a/lib/trace-ir/field-path.c b/lib/trace-ir/field-path.c index 48a03a86..23b65a75 100644 --- a/lib/trace-ir/field-path.c +++ b/lib/trace-ir/field-path.c @@ -1,6 +1,6 @@ /* + * Copyright 2016-2018 Philippe Proulx * Copyright 2013, 2014 Jérémie Galarneau - * Copyright 2016 Philippe Proulx * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -22,18 +22,17 @@ */ #define BT_LOG_TAG "FIELD-PATH" -#include - -#include -#include -#include -#include -#include -#include +#include + +#include +#include +#include +#include +#include #include #include #include -#include +#include #include static @@ -43,8 +42,8 @@ void destroy_field_path(struct bt_object *obj) BT_ASSERT(field_path); BT_LIB_LOGD("Destroying field path: %!+P", field_path); - g_array_free(field_path->indexes, TRUE); - field_path->indexes = NULL; + g_array_free(field_path->items, TRUE); + field_path->items = NULL; g_free(field_path); } @@ -62,8 +61,9 @@ struct bt_field_path *bt_field_path_create(void) } bt_object_init_shared(&field_path->base, destroy_field_path); - field_path->indexes = g_array_new(FALSE, FALSE, sizeof(uint64_t)); - if (!field_path->indexes) { + field_path->items = g_array_new(FALSE, FALSE, + sizeof(struct bt_field_path_item)); + if (!field_path->items) { BT_LOGE_STR("Failed to allocate a GArray."); goto error; } @@ -78,22 +78,51 @@ end: return field_path; } -enum bt_scope bt_field_path_get_root_scope(struct bt_field_path *field_path) +enum bt_scope bt_field_path_get_root_scope( + const struct bt_field_path *field_path) { BT_ASSERT_PRE_NON_NULL(field_path, "Field path"); return field_path->root; } -uint64_t bt_field_path_get_index_count(struct bt_field_path *field_path) +uint64_t bt_field_path_get_item_count(const struct bt_field_path *field_path) { BT_ASSERT_PRE_NON_NULL(field_path, "Field path"); - return (uint64_t) field_path->indexes->len; + return (uint64_t) field_path->items->len; } -uint64_t bt_field_path_get_index_by_index(struct bt_field_path *field_path, - uint64_t index) +const struct bt_field_path_item *bt_field_path_borrow_item_by_index_const( + const struct bt_field_path *field_path, uint64_t index) { BT_ASSERT_PRE_NON_NULL(field_path, "Field path"); - BT_ASSERT_PRE_VALID_INDEX(index, field_path->indexes->len); - return bt_field_path_get_index_by_index_inline(field_path, index); + BT_ASSERT_PRE_VALID_INDEX(index, field_path->items->len); + return bt_field_path_borrow_item_by_index_inline(field_path, index); +} + +enum bt_field_path_item_type bt_field_path_item_get_type( + const struct bt_field_path_item *field_path_item) +{ + BT_ASSERT_PRE_NON_NULL(field_path_item, "Field path item"); + return field_path_item->type; +} + +uint64_t bt_field_path_item_index_get_index( + const struct bt_field_path_item *field_path_item) +{ + BT_ASSERT_PRE_NON_NULL(field_path_item, "Field path item"); + BT_ASSERT_PRE(field_path_item->type == BT_FIELD_PATH_ITEM_TYPE_INDEX, + "Field path item is not an index field path item: " + "addr=%p, type=%s", field_path_item, + bt_field_path_item_type_string(field_path_item->type)); + return field_path_item->index; +} + +void bt_field_path_get_ref(const struct bt_field_path *field_path) +{ + bt_object_get_ref(field_path); +} + +void bt_field_path_put_ref(const struct bt_field_path *field_path) +{ + bt_object_put_ref(field_path); }