2 * SPDX-License-Identifier: MIT
4 * Copyright 2016-2018 Philippe Proulx <pproulx@efficios.com>
6 * The Common Trace Format (CTF) Specification is available at
7 * http://www.efficios.com/ctf
10 #ifndef BABELTRACE_TRACE_IR_FIELD_PATH_INTERNAL
11 #define BABELTRACE_TRACE_IR_FIELD_PATH_INTERNAL
13 #include "lib/object.h"
14 #include <babeltrace2/trace-ir/field-path.h>
15 #include "common/assert.h"
16 #include "common/macros.h"
19 struct bt_field_path_item
{
20 enum bt_field_path_item_type type
;
24 struct bt_field_path
{
25 struct bt_object base
;
26 enum bt_field_path_scope root
;
28 /* Array of `struct bt_field_path_item` (items) */
33 struct bt_field_path
*bt_field_path_create(void);
36 struct bt_field_path_item
*bt_field_path_borrow_item_by_index_inline(
37 const struct bt_field_path
*field_path
, uint64_t index
)
39 BT_ASSERT_DBG(field_path
);
40 BT_ASSERT_DBG(index
< field_path
->items
->len
);
41 return &g_array_index(field_path
->items
, struct bt_field_path_item
,
46 void bt_field_path_append_item(struct bt_field_path
*field_path
,
47 struct bt_field_path_item
*item
)
49 BT_ASSERT(field_path
);
51 g_array_append_val(field_path
->items
, *item
);
55 void bt_field_path_remove_last_item(struct bt_field_path
*field_path
)
57 BT_ASSERT(field_path
);
58 BT_ASSERT(field_path
->items
->len
> 0);
59 g_array_set_size(field_path
->items
, field_path
->items
->len
- 1);
63 const char *bt_field_path_item_type_string(enum bt_field_path_item_type type
)
66 case BT_FIELD_PATH_ITEM_TYPE_INDEX
:
68 case BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT
:
69 return "CURRENT_ARRAY_ELEMENT";
75 #endif /* BABELTRACE_TRACE_IR_FIELD_PATH_INTERNAL */