{
}
+lst::type::cuptr lst::integer_type::copy() const
+{
+ return lttng::make_unique<integer_type>(
+ alignment, byte_order, size, signedness_, base_, roles_);
+}
+
bool lst::integer_type::_is_equal(const type &base_other) const noexcept
{
const auto& other = static_cast<decltype(*this)&>(base_other);
typeid(*this)));
}
+lst::type::cuptr lst::floating_point_type::copy() const
+{
+ return lttng::make_unique<floating_point_type>(
+ alignment, byte_order, exponent_digits, mantissa_digits);
+}
+
void lst::floating_point_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
{
}
+/*
+ * Due to a bug in g++ < 7.1, these specializations must be enclosed in the namespaces
+ * rather than using the usual `namespace::namespace::function` notation:
+ * see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56480.
+ */
namespace lttng {
namespace sessiond {
namespace trace {
template <>
-void lst::signed_enumeration_type::accept(type_visitor& visitor) const
+void signed_enumeration_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
}
template <>
-void lst::unsigned_enumeration_type::accept(type_visitor& visitor) const
+void unsigned_enumeration_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
}
-} /* namespace trace */
-} /* namespace sessiond */
-} /* namespace lttng */
template <>
-void lst::variant_type<lst::signed_enumeration_type::mapping::range_t::range_integer_t>::accept(
+void variant_type<lst::signed_enumeration_type::mapping::range_t::range_integer_t>::accept(
lst::type_visitor& visitor) const
{
visitor.visit(*this);
}
template <>
-void lst::variant_type<lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>::accept(
+void variant_type<lst::unsigned_enumeration_type::mapping::range_t::range_integer_t>::accept(
lst::type_visitor& visitor) const
{
visitor.visit(*this);
}
+} /* namespace trace */
+} /* namespace sessiond */
+} /* namespace lttng */
lst::array_type::array_type(unsigned int in_alignment, type::cuptr in_element_type) :
type(in_alignment), element_type{std::move(in_element_type)}
return array_type::_is_equal(base_other) && this->length == other.length;
}
+lst::type::cuptr lst::static_length_array_type::copy() const
+{
+ return lttng::make_unique<static_length_array_type>(
+ alignment, element_type->copy(), length);
+}
+
void lst::static_length_array_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
this->length_field_location == other.length_field_location;
}
+lst::type::cuptr lst::dynamic_length_array_type::copy() const
+{
+ return lttng::make_unique<dynamic_length_array_type>(
+ alignment, element_type->copy(), length_field_location);
+}
+
void lst::dynamic_length_array_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
return length_bytes == other.length_bytes && roles_ == other.roles_;
}
+lst::type::cuptr lst::static_length_blob_type::copy() const
+{
+ return lttng::make_unique<static_length_blob_type>(alignment, length_bytes, roles_);
+}
+
void lst::static_length_blob_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
return length_field_location == other.length_field_location;
}
+lst::type::cuptr lst::dynamic_length_blob_type::copy() const
+{
+ return lttng::make_unique<dynamic_length_blob_type>(alignment, length_field_location);
+}
+
void lst::dynamic_length_blob_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
return string_type::_is_equal(base_other) && this->length == other.length;
}
+lst::type::cuptr lst::static_length_string_type::copy() const
+{
+ return lttng::make_unique<static_length_string_type>(alignment, encoding_, length);
+}
+
void lst::static_length_string_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
this->length_field_location == other.length_field_location;
}
+lst::type::cuptr lst::dynamic_length_string_type::copy() const
+{
+ return lttng::make_unique<dynamic_length_string_type>(
+ alignment, encoding_, length_field_location);
+}
+
void lst::dynamic_length_string_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
{
}
+lst::type::cuptr lst::null_terminated_string_type::copy() const
+{
+ return lttng::make_unique<null_terminated_string_type>(alignment, encoding_);
+}
+
void lst::null_terminated_string_type::accept(type_visitor& visitor) const
{
visitor.visit(*this);
}
lst::structure_type::structure_type(unsigned int in_alignment, fields in_fields) :
- type(in_alignment), _fields{std::move(in_fields)}
+ type(in_alignment), fields_{std::move(in_fields)}
{
}
{
const auto &other = static_cast<decltype(*this)&>(base_other);
- return fields_are_equal(this->_fields, other._fields);
+ return fields_are_equal(this->fields_, other.fields_);
+}
+
+lst::type::cuptr lst::structure_type::copy() const
+{
+ structure_type::fields copy_of_fields;
+
+ copy_of_fields.reserve(fields_.size());
+ for (const auto& field : fields_) {
+ copy_of_fields.emplace_back(lttng::make_unique<lst::field>(
+ field->name, field->get_type().copy()));
+ }
+
+ return lttng::make_unique<structure_type>(alignment, std::move(copy_of_fields));
}
void lst::structure_type::accept(type_visitor& visitor) const