enum fs_sink_ctf_field_class_type {
FS_SINK_CTF_FIELD_CLASS_TYPE_BOOL,
+ FS_SINK_CTF_FIELD_CLASS_TYPE_BIT_ARRAY,
FS_SINK_CTF_FIELD_CLASS_TYPE_INT,
FS_SINK_CTF_FIELD_CLASS_TYPE_FLOAT,
FS_SINK_CTF_FIELD_CLASS_TYPE_STRING,
FS_SINK_CTF_FIELD_CLASS_TYPE_STRUCT,
FS_SINK_CTF_FIELD_CLASS_TYPE_ARRAY,
FS_SINK_CTF_FIELD_CLASS_TYPE_SEQUENCE,
+ FS_SINK_CTF_FIELD_CLASS_TYPE_OPTION,
FS_SINK_CTF_FIELD_CLASS_TYPE_VARIANT,
};
GArray *members;
};
+struct fs_sink_ctf_field_class_option {
+ struct fs_sink_ctf_field_class base;
+ struct fs_sink_ctf_field_class *content_fc;
+ GString *tag_ref;
+};
+
struct fs_sink_ctf_field_class_variant {
struct fs_sink_ctf_field_class base;
GString *tag_ref;
named_fc->fc = NULL;
}
+static inline
+struct fs_sink_ctf_field_class_bit_array *
+fs_sink_ctf_field_class_bit_array_create(
+ const bt_field_class *ir_fc, uint64_t index_in_parent)
+{
+ struct fs_sink_ctf_field_class_bit_array *fc =
+ g_new0(struct fs_sink_ctf_field_class_bit_array, 1);
+
+ BT_ASSERT(fc);
+ _fs_sink_ctf_field_class_bit_array_init((void *) fc,
+ FS_SINK_CTF_FIELD_CLASS_TYPE_BIT_ARRAY, ir_fc,
+ (unsigned int) bt_field_class_bit_array_get_length(ir_fc),
+ index_in_parent);
+ return fc;
+}
+
static inline
struct fs_sink_ctf_field_class_bool *fs_sink_ctf_field_class_bool_create(
const bt_field_class *ir_fc, uint64_t index_in_parent)
BT_ASSERT(fc);
_fs_sink_ctf_field_class_bit_array_init((void *) fc,
FS_SINK_CTF_FIELD_CLASS_TYPE_FLOAT,
- ir_fc, bt_field_class_real_is_single_precision(ir_fc) ? 32 : 64,
+ ir_fc,
+ bt_field_class_get_type(ir_fc) == BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL ? 32 : 64,
index_in_parent);
return fc;
}
return fc;
}
+static inline
+struct fs_sink_ctf_field_class_option *fs_sink_ctf_field_class_option_create_empty(
+ const bt_field_class *ir_fc, uint64_t index_in_parent)
+{
+ struct fs_sink_ctf_field_class_option *fc =
+ g_new0(struct fs_sink_ctf_field_class_option, 1);
+
+ BT_ASSERT(fc);
+ _fs_sink_ctf_field_class_init((void *) fc,
+ FS_SINK_CTF_FIELD_CLASS_TYPE_OPTION, ir_fc,
+ 1, index_in_parent);
+ fc->tag_ref = g_string_new(NULL);
+ BT_ASSERT(fc->tag_ref);
+ return fc;
+}
+
static inline
struct fs_sink_ctf_field_class_variant *fs_sink_ctf_field_class_variant_create_empty(
const bt_field_class *ir_fc, uint64_t index_in_parent)
fc->length_ref = g_string_new(NULL);
BT_ASSERT(fc->length_ref);
fc->length_is_before =
- bt_field_class_array_dynamic_borrow_length_field_path_const(ir_fc) ==
- NULL;
+ bt_field_class_get_type(ir_fc) ==
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD;
return fc;
}
BT_ASSERT(fc);
}
+static inline
+void _fs_sink_ctf_field_class_bit_array_destroy(
+ struct fs_sink_ctf_field_class_int *fc)
+{
+ BT_ASSERT(fc);
+ _fs_sink_ctf_field_class_fini((void *) fc);
+ g_free(fc);
+}
+
static inline
void _fs_sink_ctf_field_class_bool_destroy(
struct fs_sink_ctf_field_class_int *fc)
g_free(fc);
}
+static inline
+void _fs_sink_ctf_field_class_option_destroy(
+ struct fs_sink_ctf_field_class_option *fc)
+{
+ BT_ASSERT(fc);
+ _fs_sink_ctf_field_class_fini((void *) fc);
+ fs_sink_ctf_field_class_destroy(fc->content_fc);
+
+ if (fc->tag_ref) {
+ g_string_free(fc->tag_ref, TRUE);
+ fc->tag_ref = NULL;
+ }
+
+ g_free(fc);
+}
+
static inline
void _fs_sink_ctf_field_class_variant_destroy(
struct fs_sink_ctf_field_class_variant *fc)
case FS_SINK_CTF_FIELD_CLASS_TYPE_BOOL:
_fs_sink_ctf_field_class_bool_destroy((void *) fc);
break;
+ case FS_SINK_CTF_FIELD_CLASS_TYPE_BIT_ARRAY:
+ _fs_sink_ctf_field_class_bit_array_destroy((void *) fc);
+ break;
case FS_SINK_CTF_FIELD_CLASS_TYPE_INT:
_fs_sink_ctf_field_class_int_destroy((void *) fc);
break;
case FS_SINK_CTF_FIELD_CLASS_TYPE_SEQUENCE:
_fs_sink_ctf_field_class_sequence_destroy((void *) fc);
break;
+ case FS_SINK_CTF_FIELD_CLASS_TYPE_OPTION:
+ _fs_sink_ctf_field_class_option_destroy((void *) fc);
+ break;
case FS_SINK_CTF_FIELD_CLASS_TYPE_VARIANT:
_fs_sink_ctf_field_class_variant_destroy((void *) fc);
break;