const bt_field_class *walk_field_path(const bt_field_path *fp,
const bt_field_class *fc)
{
- uint64_t i, fp_index_count;
+ uint64_t i, fp_item_count;
const bt_field_class *curr_fc;
BT_ASSERT(bt_field_class_get_type(fc) == BT_FIELD_CLASS_TYPE_STRUCTURE);
BT_LOGD("Walking field path on field class: fp-addr=%p, fc-addr=%p",
fp, fc);
- fp_index_count = bt_field_path_get_index_count(fp);
+ fp_item_count = bt_field_path_get_item_count(fp);
curr_fc = fc;
- for (i = 0; i < fp_index_count; i++) {
+ for (i = 0; i < fp_item_count; i++) {
bt_field_class_type fc_type = bt_field_class_get_type(curr_fc);
- uint64_t curr_index = bt_field_path_get_index_by_index(fp, i);
+ const bt_field_path_item *fp_item =
+ bt_field_path_borrow_item_by_index_const(fp, i);
switch (fc_type) {
case BT_FIELD_CLASS_TYPE_STRUCTURE:
{
- const bt_field_class_structure_member *member =
- bt_field_class_structure_borrow_member_by_index_const(
- curr_fc, curr_index);
+ const bt_field_class_structure_member *member;
+
+ BT_ASSERT(bt_field_path_item_get_type(fp_item) ==
+ BT_FIELD_PATH_ITEM_TYPE_INDEX);
+ member = bt_field_class_structure_borrow_member_by_index_const(
+ curr_fc,
+ bt_field_path_item_index_get_index(fp_item));
curr_fc = bt_field_class_structure_member_borrow_field_class_const(
member);
break;
}
case BT_FIELD_CLASS_TYPE_VARIANT:
{
- const bt_field_class_variant_option *option =
- bt_field_class_variant_borrow_option_by_index_const(
- curr_fc, curr_index);
+ const bt_field_class_variant_option *option;
+
+ BT_ASSERT(bt_field_path_item_get_type(fp_item) ==
+ BT_FIELD_PATH_ITEM_TYPE_INDEX);
+ option = bt_field_class_variant_borrow_option_by_index_const(
+ curr_fc,
+ bt_field_path_item_index_get_index(fp_item));
curr_fc = bt_field_class_variant_option_borrow_field_class_const(
option);
break;
}
+ case BT_FIELD_CLASS_TYPE_STATIC_ARRAY:
+ case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
+ {
+ BT_ASSERT(bt_field_path_item_get_type(fp_item) ==
+ BT_FIELD_PATH_ITEM_TYPE_CURRENT_ARRAY_ELEMENT);
+ curr_fc = bt_field_class_array_borrow_element_field_class_const(
+ curr_fc);
+ break;
+ }
default:
abort();
}
enum_mapping_count = bt_field_class_enumeration_get_mapping_count(in_field_class);
for (i = 0; i < enum_mapping_count; i++) {
const char *label;
- const bt_field_class_unsigned_enumeration_mapping_ranges *ranges;
+ const bt_field_class_unsigned_enumeration_mapping *u_mapping;
+ const bt_field_class_enumeration_mapping *mapping;
uint64_t range_index, range_count;
/* Get the ranges and the range count. */
- bt_field_class_unsigned_enumeration_borrow_mapping_by_index_const(
- in_field_class, i, &label, &ranges);
+ u_mapping = bt_field_class_unsigned_enumeration_borrow_mapping_by_index_const(
+ in_field_class, i);
+ mapping = bt_field_class_unsigned_enumeration_mapping_as_mapping_const(
+ u_mapping);
range_count =
- bt_field_class_unsigned_enumeration_mapping_ranges_get_range_count(
- ranges);
+ bt_field_class_enumeration_mapping_get_range_count(
+ mapping);
+ label = bt_field_class_enumeration_mapping_get_label(
+ mapping);
+
/*
* Iterate over all the ranges to add them to copied field
* class.
for (range_index = 0; range_index < range_count; range_index++) {
uint64_t lower, upper;
bt_field_class_status status;
- bt_field_class_unsigned_enumeration_mapping_ranges_get_range_by_index(
- ranges, range_index, &lower, &upper);
+ bt_field_class_unsigned_enumeration_mapping_get_range_by_index(
+ u_mapping, range_index, &lower, &upper);
BT_LOGD("Copying range in enumeration field class: "
"label=%s, lower=%"PRId64", upper=%"PRId64,
bt_field_class_enumeration_get_mapping_count(in_field_class);
for (i = 0; i < enum_mapping_count; i++) {
const char *label;
- const bt_field_class_signed_enumeration_mapping_ranges *ranges;
+ const bt_field_class_signed_enumeration_mapping *i_mapping;
+ const bt_field_class_enumeration_mapping *mapping;
uint64_t range_index, range_count;
/* Get the ranges and the range count. */
- bt_field_class_signed_enumeration_borrow_mapping_by_index_const(
- in_field_class, i, &label, &ranges);
+ i_mapping = bt_field_class_signed_enumeration_borrow_mapping_by_index_const(
+ in_field_class, i);
+ mapping = bt_field_class_signed_enumeration_mapping_as_mapping_const(
+ i_mapping);
range_count =
- bt_field_class_signed_enumeration_mapping_ranges_get_range_count(
- ranges);
+ bt_field_class_enumeration_mapping_get_range_count(
+ mapping);
+ label = bt_field_class_enumeration_mapping_get_label(
+ mapping);
+
/*
* Iterate over all the ranges to add them to copied field
* class.
for (range_index = 0; range_index < range_count; range_index++) {
int64_t lower, upper;
bt_field_class_status status;
- bt_field_class_signed_enumeration_mapping_ranges_get_range_by_index(
- ranges, range_index, &lower, &upper);
+ bt_field_class_signed_enumeration_mapping_get_range_by_index(
+ i_mapping, range_index, &lower, &upper);
BT_LOGD("Copying range in enumeration field class: "
- "label=%s, lower=%ld, upper=%ld",
+ "label=%s, lower=%"PRId64", upper=%"PRId64,
label, lower, upper);
/* Add the label and its range to the copy field class. */
const bt_field_class *in_field_class,
bt_field_class *out_field_class)
{
- bt_field_class *out_tag_field_class;
+ bt_field_class *out_tag_field_class = NULL;
uint64_t i, variant_option_count;
const bt_field_path *tag_fp;
const bt_field_class *tag_fc;