X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fctf-ir%2Ffield-path.c;h=ceb54bf5dc2e2db09d9cc71745bc377b401a66e1;hp=d9893059e4bb8001e3e2ae14269dd71191542f9f;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c800eb3790218d2f33df01e77ec38cbd43cc02a1 diff --git a/lib/ctf-ir/field-path.c b/lib/ctf-ir/field-path.c index d9893059..ceb54bf5 100644 --- a/lib/ctf-ir/field-path.c +++ b/lib/ctf-ir/field-path.c @@ -28,6 +28,7 @@ #define BT_LOG_TAG "FIELD-PATH" #include +#include #include #include #include @@ -39,19 +40,13 @@ #include static -void field_path_destroy(struct bt_object *obj) +void destroy_field_path(struct bt_object *obj) { struct bt_field_path *field_path = (struct bt_field_path *) obj; - BT_LOGD("Destroying field path: addr=%p", obj); - - if (!field_path) { - return; - } - - if (field_path->indexes) { - g_array_free(field_path->indexes, TRUE); - } + BT_ASSERT(field_path); + BT_LIB_LOGD("Destroying field path: %!+P", field_path); + g_array_free(field_path->indexes, TRUE); g_free(field_path); } @@ -68,106 +63,39 @@ struct bt_field_path *bt_field_path_create(void) goto error; } - bt_object_init_shared(&field_path->base, field_path_destroy); - field_path->root = BT_SCOPE_UNKNOWN; - field_path->indexes = g_array_new(TRUE, FALSE, sizeof(int)); + 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) { BT_LOGE_STR("Failed to allocate a GArray."); goto error; } - BT_LOGD("Created empty field path object: addr=%p", field_path); - return field_path; + BT_LIB_LOGD("Created empty field path object: %!+P", field_path); + goto end; error: BT_PUT(field_path); - return NULL; -} -BT_HIDDEN -void bt_field_path_clear(struct bt_field_path *field_path) -{ - if (field_path->indexes->len > 0) { - g_array_remove_range(field_path->indexes, 0, - field_path->indexes->len); - } -} - -BT_HIDDEN -struct bt_field_path *bt_field_path_copy( - struct bt_field_path *path) -{ - struct bt_field_path *new_path; - - BT_ASSERT(path); - BT_LOGD("Copying field path: addr=%p, index-count=%u", - path, path->indexes->len); - new_path = bt_field_path_create(); - if (!new_path) { - BT_LOGE_STR("Cannot create empty field path."); - goto end; - } - - new_path->root = path->root; - g_array_insert_vals(new_path->indexes, 0, - path->indexes->data, path->indexes->len); - BT_LOGD("Copied field path: original-addr=%p, copy-addr=%p", - path, new_path); end: - return new_path; + return field_path; } -enum bt_scope bt_field_path_get_root_scope( - const struct bt_field_path *field_path) +enum bt_scope bt_field_path_get_root_scope(struct bt_field_path *field_path) { - enum bt_scope scope = BT_SCOPE_UNKNOWN; - - if (!field_path) { - BT_LOGW_STR("Invalid parameter: field path is NULL."); - goto end; - } - - scope = field_path->root; - -end: - return scope; + BT_ASSERT_PRE_NON_NULL(field_path, "Field path"); + return field_path->root; } -int64_t bt_field_path_get_index_count( - const struct bt_field_path *field_path) +uint64_t bt_field_path_get_index_count(struct bt_field_path *field_path) { - int64_t count = (int64_t) -1; - - if (!field_path) { - BT_LOGW_STR("Invalid parameter: field path is NULL."); - goto end; - } - - count = (int64_t) field_path->indexes->len; - -end: - return count; + BT_ASSERT_PRE_NON_NULL(field_path, "Field path"); + return (uint64_t) field_path->indexes->len; } -int bt_field_path_get_index(const struct bt_field_path *field_path, +uint64_t bt_field_path_get_index_by_index(struct bt_field_path *field_path, uint64_t index) { - int ret = INT_MIN; - - if (!field_path) { - BT_LOGW_STR("Invalid parameter: field path is NULL."); - goto end; - } - - if (index >= field_path->indexes->len) { - BT_LOGW("Invalid parameter: index is out of bounds: " - "addr=%p, index=%" PRIu64 ", count=%u", - field_path, index, field_path->indexes->len); - goto end; - } - - ret = g_array_index(field_path->indexes, int, index); - -end: - return ret; + 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); }