X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ffield-class.hpp;h=411cf6690a1798355b2bcc2341a5621f203acc01;hb=2a24eba8b45ab4bd62dfb2cd95f31e4c2a7a91a8;hp=ae2c52a3711f58da6754e6ef82c32c849506e658;hpb=75aa724c9d3d00bb7e711662f730260948cab98f;p=babeltrace.git diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index ae2c52a3..411cf669 100644 --- a/src/cpp-common/bt2/field-class.hpp +++ b/src/cpp-common/bt2/field-class.hpp @@ -13,15 +13,16 @@ #include #include "common/assert.h" -#include "cpp-common/optional.hpp" -#include "cpp-common/string_view.hpp" +#include "cpp-common/bt2c/c-string-view.hpp" +#include "cpp-common/bt2s/optional.hpp" +#include "borrowed-object-iterator.hpp" #include "borrowed-object.hpp" -#include "common-iterator.hpp" #include "exc.hpp" #include "field-path.hpp" #include "integer-range-set.hpp" #include "internal/utils.hpp" +#include "optional-borrowed-object.hpp" #include "shared-object.hpp" #include "value.hpp" @@ -167,16 +168,14 @@ private: using typename BorrowedObject::_ThisBorrowedObject; protected: - using typename BorrowedObject::_LibObjPtr; using _ThisCommonFieldClass = CommonFieldClass; public: + using typename BorrowedObject::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; + using UserAttributes = internal::DepUserAttrs; - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; - - explicit CommonFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} + explicit CommonFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -186,12 +185,17 @@ public: } template - CommonFieldClass& operator=(const CommonFieldClass fc) noexcept + CommonFieldClass operator=(const CommonFieldClass fc) noexcept { _ThisBorrowedObject::operator=(fc); return *this; } + CommonFieldClass asConst() const noexcept + { + return CommonFieldClass {*this}; + } + FieldClassType type() const noexcept { return static_cast(bt_field_class_get_type(this->libObjPtr())); @@ -398,11 +402,12 @@ public: asVariantWithSignedIntegerSelector() const noexcept; template - void userAttributes(const CommonMapValue userAttrs) const noexcept + CommonFieldClass userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, "Not available with `bt2::ConstFieldClass`."); bt_field_class_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } UserAttributes userAttributes() const noexcept @@ -450,13 +455,13 @@ template class CommonBitArrayFieldClass final : public CommonFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; using typename CommonFieldClass::_ThisCommonFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonBitArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonBitArrayFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isBitArray()); @@ -469,13 +474,18 @@ public: } template - CommonBitArrayFieldClass& + CommonBitArrayFieldClass operator=(const CommonBitArrayFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } + CommonBitArrayFieldClass asConst() const noexcept + { + return CommonBitArrayFieldClass {*this}; + } + std::uint64_t length() const noexcept { return bt_field_class_bit_array_get_length(this->libObjPtr()); @@ -525,13 +535,13 @@ private: using typename CommonFieldClass::_ThisCommonFieldClass; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonIntegerFieldClass = CommonIntegerFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonIntegerFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonIntegerFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isInteger()); @@ -544,17 +554,24 @@ public: } template - CommonIntegerFieldClass& operator=(const CommonIntegerFieldClass fc) noexcept + CommonIntegerFieldClass operator=(const CommonIntegerFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } - void fieldValueRange(const std::uint64_t n) const noexcept + CommonIntegerFieldClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonIntegerFieldClass {*this}; + } + + CommonIntegerFieldClass fieldValueRange(const std::uint64_t n) const noexcept + { + static_assert(!std::is_const::value, + "Not available with `bt2::ConstIntegerFieldClass`."); bt_field_class_integer_set_field_value_range(this->libObjPtr(), n); + return *this; } std::uint64_t fieldValueRange() const noexcept @@ -562,12 +579,14 @@ public: return bt_field_class_integer_get_field_value_range(this->libObjPtr()); } - void preferredDisplayBase(const DisplayBase base) const noexcept + CommonIntegerFieldClass preferredDisplayBase(const DisplayBase base) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstIntegerFieldClass`."); bt_field_class_integer_set_preferred_display_base( this->libObjPtr(), static_cast(base)); + return *this; } DisplayBase preferredDisplayBase() const noexcept @@ -603,10 +622,6 @@ struct TypeDescr : public IntegerFieldClassTypeDescr { }; -} /* namespace internal */ - -namespace internal { - template struct ConstEnumerationFieldClassMappingSpec; @@ -654,14 +669,15 @@ class ConstEnumerationFieldClassMapping final : public BorrowedObject { private: using typename BorrowedObject::_ThisBorrowedObject; - using typename BorrowedObject::_LibObjPtr; public: + using typename BorrowedObject::LibObjPtr; + using RangeSet = typename std::conditional< std::is_same::value, ConstUnsignedIntegerRangeSet, ConstSignedIntegerRangeSet>::type; - explicit ConstEnumerationFieldClassMapping(const _LibObjPtr libObjPtr) noexcept : + explicit ConstEnumerationFieldClassMapping(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -671,7 +687,7 @@ public: { } - ConstEnumerationFieldClassMapping& + ConstEnumerationFieldClassMapping operator=(const ConstEnumerationFieldClassMapping& mapping) noexcept { _ThisBorrowedObject::operator=(mapping); @@ -684,7 +700,7 @@ public: internal::ConstEnumerationFieldClassMappingSpec::ranges(this->libObjPtr())}; } - bpstd::string_view label() const noexcept + bt2c::CStringView label() const noexcept { return internal::ConstEnumerationFieldClassMappingSpec::label(this->libObjPtr()); } @@ -758,13 +774,13 @@ private: using typename CommonIntegerFieldClass::_ThisCommonIntegerFieldClass; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonBaseEnumerationFieldClass = CommonBaseEnumerationFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass<_ThisCommonBaseEnumerationFieldClass, LibObjT>; - explicit CommonBaseEnumerationFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonBaseEnumerationFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonIntegerFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isEnumeration()); @@ -778,14 +794,19 @@ public: } template - CommonBaseEnumerationFieldClass& + CommonBaseEnumerationFieldClass operator=(const CommonBaseEnumerationFieldClass fc) noexcept { _ThisCommonIntegerFieldClass::operator=(fc); return *this; } - std::uint64_t size() const noexcept + CommonBaseEnumerationFieldClass asConst() const noexcept + { + return CommonBaseEnumerationFieldClass {*this}; + } + + std::uint64_t length() const noexcept { return bt_field_class_enumeration_get_mapping_count(this->libObjPtr()); } @@ -800,16 +821,15 @@ template class CommonEnumerationFieldClass final : public CommonBaseEnumerationFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; using typename CommonBaseEnumerationFieldClass::_ThisCommonBaseEnumerationFieldClass; - using _ThisCommonEnumerationFieldClass = CommonEnumerationFieldClass; public: - using Shared = SharedFieldClass<_ThisCommonEnumerationFieldClass, LibObjT>; - using Iterator = CommonIterator; + using typename CommonFieldClass::LibObjPtr; + using Shared = SharedFieldClass; + using Iterator = BorrowedObjectIterator; using Mapping = MappingT; - explicit CommonEnumerationFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonEnumerationFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonBaseEnumerationFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isEnumeration()); @@ -818,15 +838,15 @@ public: template CommonEnumerationFieldClass( const CommonEnumerationFieldClass fc) noexcept : - _ThisCommonEnumerationFieldClass {fc} + CommonEnumerationFieldClass {fc} { } template - CommonEnumerationFieldClass& + CommonEnumerationFieldClass operator=(const CommonEnumerationFieldClass fc) noexcept { - _ThisCommonEnumerationFieldClass::operator=(fc); + CommonEnumerationFieldClass::operator=(fc); return *this; } @@ -836,24 +856,14 @@ public: this->libObjPtr(), index)}; } - nonstd::optional operator[](const char * const label) const noexcept + OptionalBorrowedObject operator[](const bt2c::CStringView label) const noexcept { - const auto libObjPtr = internal::CommonEnumerationFieldClassSpec::mappingByLabel( + return internal::CommonEnumerationFieldClassSpec::mappingByLabel( this->libObjPtr(), label); - - if (libObjPtr) { - return Mapping {libObjPtr}; - } - - return nonstd::nullopt; } - nonstd::optional operator[](const std::string& label) const noexcept - { - return (*this)[label.data()]; - } - - void addMapping(const char * const label, const typename Mapping::RangeSet ranges) const + CommonEnumerationFieldClass addMapping(const bt2c::CStringView label, + const typename Mapping::RangeSet ranges) const { const auto status = internal::CommonEnumerationFieldClassSpec::addMapping( this->libObjPtr(), label, ranges.libObjPtr()); @@ -861,11 +871,8 @@ public: if (status == BT_FIELD_CLASS_ENUMERATION_ADD_MAPPING_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void addMapping(const std::string& label, const typename Mapping::RangeSet ranges) const - { - this->addMapping(label.data(), ranges); + return *this; } Iterator begin() const noexcept @@ -875,7 +882,7 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; + return Iterator {*this, this->length()}; } Shared shared() const noexcept @@ -974,17 +981,14 @@ template class CommonStructureFieldClassMember final : public BorrowedObject { private: - using typename BorrowedObject::_LibObjPtr; using typename BorrowedObject::_ThisBorrowedObject; - - using _FieldClass = - typename std::conditional::value, ConstFieldClass, FieldClass>::type; + using _FieldClass = internal::DepFc; public: - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; + using typename BorrowedObject::LibObjPtr; + using UserAttributes = internal::DepUserAttrs; - explicit CommonStructureFieldClassMember(const _LibObjPtr libObjPtr) noexcept : + explicit CommonStructureFieldClassMember(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -997,14 +1001,19 @@ public: } template - CommonStructureFieldClassMember& + CommonStructureFieldClassMember operator=(const CommonStructureFieldClassMember fc) noexcept { _ThisBorrowedObject::operator=(fc); return *this; } - bpstd::string_view name() const noexcept + CommonStructureFieldClassMember asConst() const noexcept + { + return CommonStructureFieldClassMember {*this}; + } + + bt2c::CStringView name() const noexcept { return bt_field_class_structure_member_get_name(this->libObjPtr()); } @@ -1016,12 +1025,15 @@ public: } template - void userAttributes(const CommonMapValue userAttrs) const noexcept + CommonStructureFieldClassMember + userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStructureFieldClassMember`."); bt_field_class_structure_member_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } UserAttributes userAttributes() const noexcept @@ -1098,18 +1110,17 @@ template class CommonStructureFieldClass final : public CommonFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; using typename CommonFieldClass::_ThisCommonFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - using Member = - typename std::conditional::value, ConstStructureFieldClassMember, - StructureFieldClassMember>::type; + using Iterator = BorrowedObjectIterator>; - using Iterator = CommonIterator, Member>; + using Member = + internal::DepType; - explicit CommonStructureFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonStructureFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isStructure()); @@ -1122,15 +1133,21 @@ public: } template - CommonStructureFieldClass& operator=(const CommonStructureFieldClass fc) noexcept + CommonStructureFieldClass operator=(const CommonStructureFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } - void appendMember(const char * const name, const FieldClass fc) const + CommonStructureFieldClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonStructureFieldClass {*this}; + } + + CommonStructureFieldClass appendMember(const bt2c::CStringView name, const FieldClass fc) const + { + static_assert(!std::is_const::value, + "Not available with `bt2::ConstStructureFieldClass`."); const auto status = bt_field_class_structure_append_member(this->libObjPtr(), name, fc.libObjPtr()); @@ -1138,14 +1155,11 @@ public: if (status == BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_MEMORY_ERROR) { throw MemoryError {}; } - } - void appendMember(const std::string& name, const FieldClass fc) const - { - this->appendMember(name.data(), fc); + return *this; } - std::uint64_t size() const noexcept + std::uint64_t length() const noexcept { return bt_field_class_structure_get_member_count(this->libObjPtr()); } @@ -1157,7 +1171,7 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; + return Iterator {*this, this->length()}; } Member operator[](const std::uint64_t index) const noexcept @@ -1166,21 +1180,10 @@ public: this->libObjPtr(), index)}; } - nonstd::optional operator[](const char * const name) const noexcept + OptionalBorrowedObject operator[](const bt2c::CStringView name) const noexcept { - const auto libObjPtr = - internal::CommonStructureFieldClassSpec::memberByName(this->libObjPtr(), name); - - if (libObjPtr) { - return Member {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional operator[](const std::string& name) const noexcept - { - return (*this)[name.data()]; + return internal::CommonStructureFieldClassSpec::memberByName(this->libObjPtr(), + name); } Shared shared() const noexcept @@ -1240,18 +1243,16 @@ class CommonArrayFieldClass : public CommonFieldClass { private: using typename CommonFieldClass::_ThisCommonFieldClass; - - using _FieldClass = - typename std::conditional::value, ConstFieldClass, FieldClass>::type; + using _FieldClass = internal::DepFc; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonArrayFieldClass = CommonArrayFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonArrayFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isArray()); @@ -1264,12 +1265,17 @@ public: } template - CommonArrayFieldClass& operator=(const CommonArrayFieldClass fc) noexcept + CommonArrayFieldClass operator=(const CommonArrayFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } + CommonArrayFieldClass asConst() const noexcept + { + return CommonArrayFieldClass {*this}; + } + _FieldClass elementFieldClass() const noexcept { return _FieldClass { @@ -1310,12 +1316,12 @@ class CommonStaticArrayFieldClass final : public CommonArrayFieldClass { private: using typename CommonArrayFieldClass::_ThisCommonArrayFieldClass; - using typename CommonFieldClass::_LibObjPtr; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonStaticArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonStaticArrayFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonArrayFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isStaticArray()); @@ -1328,13 +1334,18 @@ public: } template - CommonStaticArrayFieldClass& + CommonStaticArrayFieldClass operator=(const CommonStaticArrayFieldClass fc) noexcept { _ThisCommonArrayFieldClass::operator=(fc); return *this; } + CommonStaticArrayFieldClass asConst() const noexcept + { + return CommonStaticArrayFieldClass {*this}; + } + std::uint64_t length() const noexcept { return bt_field_class_array_static_get_length(this->libObjPtr()); @@ -1374,12 +1385,12 @@ class CommonDynamicArrayWithLengthFieldClass final : public CommonArrayFieldClas { private: using typename CommonArrayFieldClass::_ThisCommonArrayFieldClass; - using typename CommonFieldClass::_LibObjPtr; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonDynamicArrayWithLengthFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonDynamicArrayWithLengthFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonArrayFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isDynamicArrayWithLength()); @@ -1393,13 +1404,18 @@ public: } template - CommonDynamicArrayWithLengthFieldClass& + CommonDynamicArrayWithLengthFieldClass operator=(const CommonDynamicArrayWithLengthFieldClass fc) noexcept { _ThisCommonArrayFieldClass::operator=(fc); return *this; } + CommonDynamicArrayWithLengthFieldClass asConst() const noexcept + { + return CommonDynamicArrayWithLengthFieldClass {*this}; + } + ConstFieldPath lengthFieldPath() const noexcept { return ConstFieldPath { @@ -1468,18 +1484,16 @@ class CommonOptionFieldClass : public CommonFieldClass { private: using typename CommonFieldClass::_ThisCommonFieldClass; - - using _FieldClass = - typename std::conditional::value, ConstFieldClass, FieldClass>::type; + using _FieldClass = internal::DepFc; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonOptionFieldClass = CommonOptionFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonOptionFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonOptionFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isOption()); @@ -1492,12 +1506,17 @@ public: } template - CommonOptionFieldClass& operator=(const CommonOptionFieldClass fc) noexcept + CommonOptionFieldClass operator=(const CommonOptionFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } + CommonOptionFieldClass asConst() const noexcept + { + return CommonOptionFieldClass {*this}; + } + _FieldClass fieldClass() const noexcept { return _FieldClass { @@ -1540,13 +1559,13 @@ private: using typename CommonOptionFieldClass::_ThisCommonOptionFieldClass; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonOptionWithSelectorFieldClass = CommonOptionWithSelectorFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonOptionWithSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonOptionWithSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonOptionFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isOptionWithSelector()); @@ -1560,13 +1579,18 @@ public: } template - CommonOptionWithSelectorFieldClass& + CommonOptionWithSelectorFieldClass operator=(const CommonOptionWithSelectorFieldClass fc) noexcept { _ThisCommonOptionFieldClass::operator=(fc); return *this; } + CommonOptionWithSelectorFieldClass asConst() const noexcept + { + return CommonOptionWithSelectorFieldClass {*this}; + } + ConstFieldPath selectorFieldPath() const noexcept { return ConstFieldPath { @@ -1607,15 +1631,14 @@ template class CommonOptionWithBoolSelectorFieldClass : public CommonOptionWithSelectorFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; - using typename CommonOptionWithSelectorFieldClass< LibObjT>::_ThisCommonOptionWithSelectorFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonOptionWithBoolSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonOptionWithBoolSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonOptionWithSelectorFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isOptionWithBoolSelector()); @@ -1629,13 +1652,18 @@ public: } template - CommonOptionWithBoolSelectorFieldClass& + CommonOptionWithBoolSelectorFieldClass operator=(const CommonOptionWithBoolSelectorFieldClass fc) noexcept { _ThisCommonOptionWithSelectorFieldClass::operator=(fc); return *this; } + CommonOptionWithBoolSelectorFieldClass asConst() const noexcept + { + return CommonOptionWithBoolSelectorFieldClass {*this}; + } + bool selectorIsReversed() const noexcept { return bt_field_class_option_with_selector_field_bool_selector_is_reversed( @@ -1706,20 +1734,15 @@ template class CommonOptionWithIntegerSelectorFieldClass : public CommonOptionWithSelectorFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; - using typename CommonOptionWithSelectorFieldClass< LibObjT>::_ThisCommonOptionWithSelectorFieldClass; - using _ThisCommonOptionWithIntegerSelectorFieldClass = - CommonOptionWithIntegerSelectorFieldClass; - public: - using Shared = SharedFieldClass<_ThisCommonOptionWithIntegerSelectorFieldClass, LibObjT>; - + using typename CommonFieldClass::LibObjPtr; + using Shared = SharedFieldClass; using RangeSet = RangeSetT; - explicit CommonOptionWithIntegerSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonOptionWithIntegerSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonOptionWithSelectorFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isOptionWithIntegerSelector()); @@ -1733,7 +1756,7 @@ public: } template - CommonOptionWithIntegerSelectorFieldClass& + CommonOptionWithIntegerSelectorFieldClass operator=(const CommonOptionWithIntegerSelectorFieldClass fc) noexcept { _ThisCommonOptionWithSelectorFieldClass::operator=(fc); @@ -1844,16 +1867,13 @@ class CommonVariantFieldClassOption : public BorrowedObject { private: using typename BorrowedObject::_ThisBorrowedObject; - using typename BorrowedObject::_LibObjPtr; - - using _FieldClass = - typename std::conditional::value, ConstFieldClass, FieldClass>::type; + using _FieldClass = internal::DepFc; public: - using UserAttributes = - typename std::conditional::value, ConstMapValue, MapValue>::type; + using typename BorrowedObject::LibObjPtr; + using UserAttributes = internal::DepUserAttrs; - explicit CommonVariantFieldClassOption(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantFieldClassOption(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -1865,22 +1885,21 @@ public: } template - CommonVariantFieldClassOption& + CommonVariantFieldClassOption operator=(const CommonVariantFieldClassOption fc) noexcept { _ThisBorrowedObject::operator=(fc); return *this; } - nonstd::optional name() const noexcept + CommonVariantFieldClassOption asConst() const noexcept { - const auto name = bt_field_class_variant_option_get_name(this->libObjPtr()); - - if (name) { - return name; - } + return CommonVariantFieldClassOption {*this}; + } - return nonstd::nullopt; + bt2c::CStringView name() const noexcept + { + return bt_field_class_variant_option_get_name(this->libObjPtr()); } _FieldClass fieldClass() const noexcept @@ -1890,11 +1909,14 @@ public: } template - void userAttributes(const CommonMapValue userAttrs) const noexcept + CommonVariantFieldClassOption + userAttributes(const CommonMapValue userAttrs) const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + static_assert(!std::is_const::value, + "Not available with `bt2::ConstVariantFieldClassOption`."); bt_field_class_variant_option_set_user_attributes(this->libObjPtr(), userAttrs.libObjPtr()); + return *this; } UserAttributes userAttributes() const noexcept @@ -1983,17 +2005,18 @@ class ConstVariantWithIntegerSelectorFieldClassOption : public BorrowedObject
  • ::_ThisBorrowedObject; - using typename BorrowedObject::_LibObjPtr; using _Spec = internal::ConstVariantWithIntegerSelectorFieldClassOptionSpec; public: + using typename BorrowedObject::LibObjPtr; + using RangeSet = typename std::conditional< std::is_same< LibObjT, const bt_field_class_variant_with_selector_field_integer_unsigned_option>::value, ConstUnsignedIntegerRangeSet, ConstSignedIntegerRangeSet>::type; - explicit ConstVariantWithIntegerSelectorFieldClassOption(const _LibObjPtr libObjPtr) noexcept : + explicit ConstVariantWithIntegerSelectorFieldClassOption(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -2006,7 +2029,7 @@ public: } template - ConstVariantWithIntegerSelectorFieldClassOption& + ConstVariantWithIntegerSelectorFieldClassOption operator=(const ConstVariantWithIntegerSelectorFieldClassOption fc) noexcept { _ThisBorrowedObject::operator=(fc); @@ -2018,7 +2041,7 @@ public: return ConstVariantFieldClassOption {_Spec::asBaseOption(this->libObjPtr())}; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { return this->asBaseOption().name(); } @@ -2090,19 +2113,17 @@ private: using typename CommonFieldClass::_ThisCommonFieldClass; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonVariantFieldClass = CommonVariantFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; + using Iterator = BorrowedObjectIterator; using Option = - typename std::conditional::value, ConstVariantFieldClassOption, - VariantFieldClassOption>::type; + internal::DepType; - using Iterator = CommonIterator; - - explicit CommonVariantFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isVariant()); @@ -2115,13 +2136,18 @@ public: } template - CommonVariantFieldClass& operator=(const CommonVariantFieldClass fc) noexcept + CommonVariantFieldClass operator=(const CommonVariantFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } - std::uint64_t size() const noexcept + CommonVariantFieldClass asConst() const noexcept + { + return CommonVariantFieldClass {*this}; + } + + std::uint64_t length() const noexcept { return bt_field_class_variant_get_option_count(this->libObjPtr()); } @@ -2133,7 +2159,7 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; + return Iterator {*this, this->length()}; } Option operator[](const std::uint64_t index) const noexcept @@ -2142,21 +2168,10 @@ public: this->libObjPtr(), index)}; } - nonstd::optional
  • ::_ThisCommonVariantFieldClass; - using typename CommonFieldClass::_LibObjPtr; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass, LibObjT>; - explicit CommonVariantWithoutSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantWithoutSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonVariantFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isVariantWithoutSelector()); @@ -2212,16 +2227,23 @@ public: } template - CommonVariantWithoutSelectorFieldClass& + CommonVariantWithoutSelectorFieldClass operator=(const CommonVariantWithoutSelectorFieldClass fc) noexcept { _ThisCommonVariantFieldClass::operator=(fc); return *this; } - void appendOption(const char * const name, const FieldClass fc) const + CommonVariantWithoutSelectorFieldClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonVariantWithoutSelectorFieldClass {*this}; + } + + CommonVariantWithoutSelectorFieldClass appendOption(const char * const name, + const FieldClass fc) const + { + static_assert(!std::is_const::value, + "Not available with `bt2::ConstVariantWithoutSelectorFieldClass`."); const auto status = bt_field_class_variant_without_selector_append_option( this->libObjPtr(), name, fc.libObjPtr()); @@ -2230,11 +2252,20 @@ public: BT_FIELD_CLASS_VARIANT_WITHOUT_SELECTOR_FIELD_APPEND_OPTION_STATUS_MEMORY_ERROR) { throw MemoryError {}; } + + return *this; + } + + CommonVariantWithoutSelectorFieldClass appendOption(const bt2c::CStringView name, + const FieldClass fc) const + { + return this->appendOption(name.data(), fc); } - void appendOption(const nonstd::optional& name, const FieldClass fc) const + CommonVariantWithoutSelectorFieldClass appendOption(const bt2s::optional& name, + const FieldClass fc) const { - this->appendOption(name ? name->data() : nullptr, fc); + return this->appendOption(name ? name->data() : nullptr, fc); } Shared shared() const noexcept @@ -2339,13 +2370,13 @@ private: using typename CommonVariantFieldClass::_ThisCommonVariantFieldClass; protected: - using typename CommonFieldClass::_LibObjPtr; using _ThisCommonVariantWithSelectorFieldClass = CommonVariantWithSelectorFieldClass; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass<_ThisCommonVariantWithSelectorFieldClass, LibObjT>; - explicit CommonVariantWithSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantWithSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonVariantFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isVariantWithSelector()); @@ -2359,13 +2390,18 @@ public: } template - CommonVariantWithSelectorFieldClass& + CommonVariantWithSelectorFieldClass operator=(const CommonVariantWithSelectorFieldClass fc) noexcept { _ThisCommonVariantFieldClass::operator=(fc); return *this; } + CommonVariantWithSelectorFieldClass asConst() const noexcept + { + return CommonVariantWithSelectorFieldClass {*this}; + } + ConstFieldPath selectorFieldPath() const noexcept { return ConstFieldPath { @@ -2390,23 +2426,21 @@ class CommonVariantWithIntegerSelectorFieldClass : private: using typename CommonVariantWithSelectorFieldClass< LibObjT>::_ThisCommonVariantWithSelectorFieldClass; - using typename CommonFieldClass::_LibObjPtr; - using _ThisCommonVariantWithIntegerSelectorFieldClass = - CommonVariantWithIntegerSelectorFieldClass; using _Spec = internal::CommonVariantWithIntegerSelectorFieldClassSpec; public: - using Shared = SharedFieldClass<_ThisCommonVariantWithIntegerSelectorFieldClass, LibObjT>; - + using typename CommonFieldClass::LibObjPtr; + using Shared = SharedFieldClass; using Option = OptionT; + using Iterator = - CommonIterator, Option>; + BorrowedObjectIterator>; - explicit CommonVariantWithIntegerSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantWithIntegerSelectorFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonVariantWithSelectorFieldClass {libObjPtr} { - BT_ASSERT_DBG(this->isVariant()); + BT_ASSERT_DBG(this->isVariantWithIntegerSelector()); } template @@ -2417,7 +2451,7 @@ public: } template - CommonVariantWithIntegerSelectorFieldClass& + CommonVariantWithIntegerSelectorFieldClass operator=(const CommonVariantWithIntegerSelectorFieldClass fc) noexcept { _ThisCommonVariantWithSelectorFieldClass::operator=(fc); @@ -2429,26 +2463,18 @@ public: return Option {_Spec::optionByIndex(this->libObjPtr(), index)}; } - nonstd::optional