X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Ffield.cpp;h=df51df488498589f9f4524f6025cce8a4f2366a4;hb=eda1aa02582ba8af1f30d40f131f4a32d2b372ab;hp=66087cfae2316b977324a9952b63c1919f55e7d0;hpb=d7bfb9b0fa35679d3e728b9165699d9faf905539;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/field.cpp b/src/bin/lttng-sessiond/field.cpp index 66087cfae..df51df488 100644 --- a/src/bin/lttng-sessiond/field.cpp +++ b/src/bin/lttng-sessiond/field.cpp @@ -30,6 +30,18 @@ bool fields_are_equal(const FieldTypeSet& a, const FieldTypeSet& b) } } /* namespace */ +lst::field_location::field_location(lst::field_location::root in_lookup_root, + lst::field_location::elements in_elements) : + root_{in_lookup_root}, elements_{std::move(in_elements)} +{ +} + +bool lst::field_location::operator==(const lst::field_location& other) const noexcept +{ + return root_ == other.root_ && + elements_ == other.elements_; +} + lst::type::type(unsigned int in_alignment) : alignment{in_alignment} { } @@ -70,12 +82,14 @@ lst::integer_type::integer_type(unsigned int in_alignment, enum lst::byte_order in_byte_order, unsigned int in_size, enum lst::integer_type::signedness in_signedness, - enum lst::integer_type::base in_base) : + enum lst::integer_type::base in_base, + roles in_roles) : type(in_alignment), byte_order{in_byte_order}, size{in_size}, - signedness{in_signedness}, - base{in_base} + signedness_{in_signedness}, + base_{in_base}, + roles_{std::move(in_roles)} { } @@ -85,8 +99,9 @@ bool lst::integer_type::_is_equal(const type &base_other) const noexcept return this->byte_order == other.byte_order && this->size == other.size && - this->signedness == other.signedness && - this->base == other.base; + this->signedness_ == other.signedness_ && + this->base_ == other.base_ && + this->roles_ == other.roles_; } void lst::integer_type::accept(type_visitor& visitor) const @@ -148,11 +163,20 @@ lst::enumeration_type::enumeration_type(unsigned int in_alignment, enum lst::byte_order in_byte_order, unsigned int in_size, enum signedness in_signedness, - enum base in_base) : - integer_type(in_alignment, in_byte_order, in_size, in_signedness, in_base) + enum base in_base, + lst::integer_type::roles in_roles) : + integer_type(in_alignment, + in_byte_order, + in_size, + in_signedness, + in_base, + std::move(in_roles)) { } +namespace lttng { +namespace sessiond { +namespace trace { template <> void lst::signed_enumeration_type::accept(type_visitor& visitor) const { @@ -164,6 +188,9 @@ void lst::unsigned_enumeration_type::accept(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)} @@ -199,9 +226,9 @@ void lst::static_length_array_type::accept(type_visitor& visitor) const lst::dynamic_length_array_type::dynamic_length_array_type(unsigned int in_alignment, type::cuptr in_element_type, - std::string in_length_field_name) : + lst::field_location in_length_field_location) : array_type(in_alignment, std::move(in_element_type)), - length_field_name{std::move(in_length_field_name)} + length_field_location{std::move(in_length_field_location)} { } @@ -210,7 +237,7 @@ bool lst::dynamic_length_array_type::_is_equal(const type& base_other) const noe const auto& other = static_cast(base_other); return array_type::_is_equal(base_other) && - this->length_field_name == other.length_field_name; + this->length_field_location == other.length_field_location; } void lst::dynamic_length_array_type::accept(type_visitor& visitor) const @@ -218,8 +245,44 @@ void lst::dynamic_length_array_type::accept(type_visitor& visitor) const visitor.visit(*this); } +lst::static_length_blob_type::static_length_blob_type( + unsigned int in_alignment, uint64_t in_length_bytes, roles in_roles) : + type(in_alignment), length_bytes{in_length_bytes}, roles_{std::move(in_roles)} +{ +} + +bool lst::static_length_blob_type::_is_equal(const type& base_other) const noexcept +{ + const auto& other = static_cast(base_other); + + return length_bytes == other.length_bytes && roles_ == other.roles_; +} + +void lst::static_length_blob_type::accept(type_visitor& visitor) const +{ + visitor.visit(*this); +} + +lst::dynamic_length_blob_type::dynamic_length_blob_type( + unsigned int in_alignment, lst::field_location in_length_field_location) : + type(in_alignment), length_field_location{std::move(in_length_field_location)} +{ +} + +bool lst::dynamic_length_blob_type::_is_equal(const type& base_other) const noexcept +{ + const auto& other = dynamic_cast(base_other); + + return length_field_location == other.length_field_location; +} + +void lst::dynamic_length_blob_type::accept(type_visitor& visitor) const +{ + visitor.visit(*this); +} + lst::string_type::string_type(unsigned int in_alignment, enum encoding in_encoding) : - type(in_alignment), encoding{in_encoding} + type(in_alignment), encoding_{in_encoding} { } @@ -227,7 +290,7 @@ bool lst::string_type::_is_equal(const type& base_other) const noexcept { const auto& other = static_cast(base_other); - return this->encoding == other.encoding; + return this->encoding_ == other.encoding_; } lst::static_length_string_type::static_length_string_type( @@ -250,8 +313,9 @@ void lst::static_length_string_type::accept(type_visitor& visitor) const lst::dynamic_length_string_type::dynamic_length_string_type(unsigned int in_alignment, enum encoding in_encoding, - std::string in_length_field_name) : - string_type(in_alignment, in_encoding), length_field_name{std::move(in_length_field_name)} + field_location in_length_field_location) : + string_type(in_alignment, in_encoding), + length_field_location{std::move(in_length_field_location)} { } @@ -260,7 +324,7 @@ bool lst::dynamic_length_string_type::_is_equal(const type& base_other) const no const auto& other = static_cast(base_other); return string_type::_is_equal(base_other) && - this->length_field_name == other.length_field_name; + this->length_field_location == other.length_field_location; } void lst::dynamic_length_string_type::accept(type_visitor& visitor) const @@ -297,11 +361,12 @@ void lst::structure_type::accept(type_visitor& visitor) const } lst::variant_type::variant_type(unsigned int in_alignment, - std::string in_tag_name, + field_location in_selector_field_location, choices in_choices) : type(in_alignment), - tag_name{std::move(in_tag_name)}, - _choices{std::move(in_choices)} + selector_field_location{std::move(in_selector_field_location)}, + _choices +{std::move(in_choices)} { } @@ -309,8 +374,10 @@ bool lst::variant_type::_is_equal(const type& base_other) const noexcept { const auto &other = static_cast(base_other); - return this->tag_name == other.tag_name && - fields_are_equal(this->_choices, other._choices); + return this->selector_field_location == other.selector_field_location && + fields_are_equal(this->_choices +, other._choices +); } void lst::variant_type::accept(type_visitor& visitor) const