+
+lst::type::cuptr create_event_header(const lst::abi& trace_abi,
+ lst::stream_class::header_type header_type)
+{
+ lst::structure_type::fields event_header_fields;
+
+ if (header_type == lst::stream_class::header_type::COMPACT) {
+ auto enum_mappings = std::make_shared<lst::unsigned_enumeration_type::mappings>();
+ lst::unsigned_enumeration_type::mapping compact_mapping{
+ "compact", lst::unsigned_enumeration_type::mapping::range_t(0, 30)
+ };
+ lst::unsigned_enumeration_type::mapping extended_mapping{ "extended", 31 };
+
+ enum_mappings->emplace_back(compact_mapping);
+ enum_mappings->emplace_back(extended_mapping);
+
+ lst::type::cuptr choice_enum = lttng::make_unique<lst::unsigned_enumeration_type>(
+ 1,
+ trace_abi.byte_order,
+ 5,
+ lst::integer_type::base::DECIMAL,
+ std::move(enum_mappings),
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::EVENT_RECORD_CLASS_ID }));
+
+ lst::variant_type<
+ lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>::choices
+ variant_choices;
+
+ lst::structure_type::fields compact_fields;
+ compact_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp",
+ lttng::make_unique<lst::integer_type>(
+ 1,
+ trace_abi.byte_order,
+ 27,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::DEFAULT_CLOCK_TIMESTAMP }))));
+
+ auto compact_type =
+ lttng::make_unique<lst::structure_type>(0, std::move(compact_fields));
+ variant_choices.emplace_back(std::move(compact_mapping), std::move(compact_type));
+
+ lst::structure_type::fields extended_fields;
+ extended_fields.emplace_back(lttng::make_unique<lst::field>(
+ "id",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint32_t_alignment,
+ trace_abi.byte_order,
+ 32,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::EVENT_RECORD_CLASS_ID }))));
+ extended_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::DEFAULT_CLOCK_TIMESTAMP }))));
+
+ lst::type::cuptr extended_type =
+ lttng::make_unique<lst::structure_type>(0, std::move(extended_fields));
+ variant_choices.emplace_back(std::move(extended_mapping), std::move(extended_type));
+
+ auto variant = lttng::make_unique<lst::variant_type<
+ lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>>(
+ 0,
+ lst::field_location(lst::field_location::root::EVENT_RECORD_HEADER,
+ { "id" }),
+ std::move(variant_choices));
+
+ event_header_fields.emplace_back(
+ lttng::make_unique<lst::field>("id", std::move(choice_enum)));
+ event_header_fields.emplace_back(
+ lttng::make_unique<lst::field>("v", std::move(variant)));
+ } else {
+ auto enum_mappings = std::make_shared<lst::unsigned_enumeration_type::mappings>();
+ lst::unsigned_enumeration_type::mapping compact_mapping{
+ "compact", lst::unsigned_enumeration_type::mapping::range_t(0, 65534)
+ };
+ lst::unsigned_enumeration_type::mapping extended_mapping{ "extended", 65535 };
+ enum_mappings->emplace_back(compact_mapping);
+ enum_mappings->emplace_back(extended_mapping);
+
+ auto choice_enum = lttng::make_unique<lst::unsigned_enumeration_type>(
+ trace_abi.uint16_t_alignment,
+ trace_abi.byte_order,
+ 16,
+ lst::integer_type::base::DECIMAL,
+ std::move(enum_mappings),
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::EVENT_RECORD_CLASS_ID }));
+
+ lst::variant_type<
+ lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>::choices
+ variant_choices;
+
+ lst::structure_type::fields compact_fields;
+ compact_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint32_t_alignment,
+ trace_abi.byte_order,
+ 32,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::DEFAULT_CLOCK_TIMESTAMP }))));
+
+ lst::type::cuptr compact_type =
+ lttng::make_unique<lst::structure_type>(0, std::move(compact_fields));
+ variant_choices.emplace_back(std::move(compact_mapping), std::move(compact_type));
+
+ lst::structure_type::fields extended_fields;
+ extended_fields.emplace_back(lttng::make_unique<lst::field>(
+ "id",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint32_t_alignment,
+ trace_abi.byte_order,
+ 32,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::EVENT_RECORD_CLASS_ID }))));
+ extended_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::DEFAULT_CLOCK_TIMESTAMP }))));
+
+ auto extended_type =
+ lttng::make_unique<lst::structure_type>(0, std::move(extended_fields));
+ variant_choices.emplace_back(std::move(extended_mapping), std::move(extended_type));
+
+ auto variant = lttng::make_unique<lst::variant_type<
+ lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>>(
+ 0,
+ lst::field_location(lst::field_location::root::EVENT_RECORD_HEADER,
+ { "id" }),
+ std::move(variant_choices));
+
+ event_header_fields.emplace_back(
+ lttng::make_unique<lst::field>("id", std::move(choice_enum)));
+ event_header_fields.emplace_back(
+ lttng::make_unique<lst::field>("v", std::move(variant)));
+ }
+
+ return lttng::make_unique<lst::structure_type>(0, std::move(event_header_fields));
+}
+
+lst::type::cuptr create_packet_context(const lst::abi& trace_abi)
+{
+ lst::structure_type::fields packet_context_fields;
+
+ /* uint64_t timestamp_begin */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp_begin",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::DEFAULT_CLOCK_TIMESTAMP }))));
+
+ /* uint64_t timestamp_end */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "timestamp_end",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::PACKET_END_DEFAULT_CLOCK_TIMESTAMP }))));
+
+ /* uint64_t content_size */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "content_size",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::PACKET_CONTENT_LENGTH }))));
+
+ /* uint64_t packet_size */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "packet_size",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::PACKET_TOTAL_LENGTH }))));
+
+ /* uint64_t packet_seq_num */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "packet_seq_num",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.uint64_t_alignment,
+ trace_abi.byte_order,
+ 64,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::PACKET_SEQUENCE_NUMBER }))));
+
+ /* unsigned long events_discarded */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "events_discarded",
+ lttng::make_unique<lst::integer_type>(
+ trace_abi.long_alignment,
+ trace_abi.byte_order,
+ trace_abi.bits_per_long,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL,
+ std::initializer_list<lst::integer_type::role>(
+ { lst::integer_type::role::
+ DISCARDED_EVENT_RECORD_COUNTER_SNAPSHOT }))));
+
+ /* uint32_t cpu_id */
+ packet_context_fields.emplace_back(lttng::make_unique<lst::field>(
+ "cpu_id",
+ lttng::make_unique<lst::integer_type>(trace_abi.uint32_t_alignment,
+ trace_abi.byte_order,
+ 32,
+ lst::integer_type::signedness::UNSIGNED,
+ lst::integer_type::base::DECIMAL)));
+
+ return lttng::make_unique<lst::structure_type>(0, std::move(packet_context_fields));
+}