From: Philippe Proulx Date: Mon, 18 Mar 2024 21:19:57 +0000 (-0400) Subject: cpp-common/bt2/field{,-class}.hpp: adapt to latest libbabeltrace2 API X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=9d7e0f1617d11f6f49edd449e32dd5a5b6ce613c;p=babeltrace.git cpp-common/bt2/field{,-class}.hpp: adapt to latest libbabeltrace2 API Signed-off-by: Philippe Proulx Change-Id: Ia4dbbd5c35a482e3dff634d8e99192b0d1c08784 Reviewed-on: https://review.lttng.org/c/babeltrace/+/12731 --- diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index 6ba39aa4..722c729f 100644 --- a/src/cpp-common/bt2/field-class.hpp +++ b/src/cpp-common/bt2/field-class.hpp @@ -492,6 +492,28 @@ struct TypeDescr : public FieldClassTypeDescr } /* namespace internal */ +class ConstBitArrayFieldClassFlag final : public BorrowedObject +{ +public: + using RangeSet = ConstUnsignedIntegerRangeSet; + + explicit ConstBitArrayFieldClassFlag(const LibObjPtr libObjPtr) noexcept : + _ThisBorrowedObject {libObjPtr} + { + } + + RangeSet ranges() const noexcept + { + return RangeSet { + bt_field_class_bit_array_flag_borrow_index_ranges_const(this->libObjPtr())}; + } + + bt2c::CStringView label() const noexcept + { + return bt_field_class_bit_array_flag_get_label(this->libObjPtr()); + } +}; + template class CommonBitArrayFieldClass final : public CommonFieldClass { @@ -501,6 +523,7 @@ private: public: using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; + using Iterator = BorrowedObjectIterator; explicit CommonBitArrayFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} @@ -532,6 +555,42 @@ public: return bt_field_class_bit_array_get_length(this->libObjPtr()); } + ConstBitArrayFieldClassFlag operator[](const std::uint64_t index) const noexcept + { + return ConstBitArrayFieldClassFlag { + bt_field_class_bit_array_borrow_flag_by_index_const(this->libObjPtr(), index)}; + } + + OptionalBorrowedObject + operator[](const bt2c::CStringView label) const noexcept + { + return bt_field_class_bit_array_borrow_flag_by_label_const(this->libObjPtr(), label); + } + + CommonBitArrayFieldClass addFlag(const bt2c::CStringView label, + const ConstBitArrayFieldClassFlag::RangeSet ranges) const + { + static_assert(!std::is_const::value, + "Not available with `bt2::ConstBitArrayFieldClass`."); + + if (bt_field_class_bit_array_add_flag(this->libObjPtr(), label, ranges.libObjPtr()) == + BT_FIELD_CLASS_BIT_ARRAY_ADD_FLAG_STATUS_MEMORY_ERROR) { + throw MemoryError {}; + } + + return *this; + } + + Iterator begin() const noexcept + { + return Iterator {*this, 0}; + } + + Iterator end() const noexcept + { + return Iterator {*this, this->length()}; + } + Shared shared() const noexcept { return Shared::createWithRef(*this); diff --git a/src/cpp-common/bt2/field.hpp b/src/cpp-common/bt2/field.hpp index a75a054e..8b291f7a 100644 --- a/src/cpp-common/bt2/field.hpp +++ b/src/cpp-common/bt2/field.hpp @@ -344,6 +344,30 @@ struct TypeDescr : public BoolFieldTypeDescr } /* namespace internal */ +template +class Labels +{ +public: + explicit Labels(const LibLabelArrayT labels, const std::uint64_t size) : + _mLabels {labels}, _mLen {size} + { + } + + std::uint64_t length() const noexcept + { + return _mLen; + } + + bt2c::CStringView operator[](const std::uint64_t index) const noexcept + { + return _mLabels[index]; + } + +private: + LibLabelArrayT _mLabels; + std::uint64_t _mLen; +}; + template class CommonBitArrayField final : public CommonField { @@ -377,13 +401,7 @@ public: return CommonBitArrayField {*this}; } - ConstBitArrayFieldClass cls() const noexcept - { - return ConstBitArrayFieldClass { - internal::CommonFieldSpec::cls(this->libObjPtr())}; - } - - Class cls() noexcept + Class cls() const noexcept { return Class {internal::CommonFieldSpec::cls(this->libObjPtr())}; } @@ -407,6 +425,19 @@ public: BT_ASSERT_DBG(index < this->cls().length()); return static_cast(this->valueAsInteger() & (1ULL << index)); } + + Labels activeFlagLabels() const + { + bt_field_class_bit_array_flag_label_array labelArray; + std::uint64_t count; + + if (bt_field_bit_array_get_active_flag_labels(this->libObjPtr(), &labelArray, &count) == + BT_FIELD_BIT_ARRAY_GET_ACTIVE_FLAG_LABELS_STATUS_MEMORY_ERROR) { + throw MemoryError {}; + } + + return Labels {labelArray, count}; + } }; using BitArrayField = CommonBitArrayField; @@ -606,31 +637,6 @@ struct TypeDescr : public SignedIntegerFieldTypeDescr } /* namespace internal */ -class EnumerationFieldClassMappingLabels -{ -public: - explicit EnumerationFieldClassMappingLabels( - const bt_field_class_enumeration_mapping_label_array labels, const std::uint64_t size) : - _mLabels {labels}, - _mLen {size} - { - } - - std::uint64_t length() const noexcept - { - return _mLen; - } - - bt2c::CStringView operator[](const std::uint64_t index) const noexcept - { - return _mLabels[index]; - } - -private: - bt_field_class_enumeration_mapping_label_array _mLabels; - std::uint64_t _mLen; -}; - template class CommonUnsignedEnumerationField final : public CommonUnsignedIntegerField { @@ -674,7 +680,7 @@ public: return Class {internal::CommonFieldSpec::cls(this->libObjPtr())}; } - EnumerationFieldClassMappingLabels labels() const + Labels labels() const { bt_field_class_enumeration_mapping_label_array labelArray; std::uint64_t count; @@ -685,7 +691,7 @@ public: throw MemoryError {}; } - return EnumerationFieldClassMappingLabels {labelArray, count}; + return Labels {labelArray, count}; } }; @@ -754,7 +760,7 @@ public: return Class {internal::CommonFieldSpec::cls(this->libObjPtr())}; } - EnumerationFieldClassMappingLabels labels() const + Labels mappingLabels() const { bt_field_class_enumeration_mapping_label_array labelArray; std::uint64_t count; @@ -765,7 +771,7 @@ public: throw MemoryError {}; } - return EnumerationFieldClassMappingLabels {labelArray, count}; + return Labels {labelArray, count}; } };