X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ffield-class.hpp;h=b0420c4f61d7a41d00ce9d797ecbe6e3cdcc84a3;hb=15030982ca99a8930d5c13b7fdff5dcba204a551;hp=0999b135a6be31c72011909c7b8b5db42bbe80f5;hpb=8aee46a3d5fa54b6fdacf8684fb9bb819901677d;p=babeltrace.git diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index 0999b135..b0420c4f 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" @@ -30,12 +31,12 @@ namespace internal { struct FieldClassRefFuncs final { - static void get(const bt_field_class * const libObjPtr) + static void get(const bt_field_class * const libObjPtr) noexcept { bt_field_class_get_ref(libObjPtr); } - static void put(const bt_field_class * const libObjPtr) + static void put(const bt_field_class * const libObjPtr) noexcept { bt_field_class_put_ref(libObjPtr); } @@ -163,43 +164,18 @@ enum class FieldClassType template class CommonFieldClass : public BorrowedObject { - /* Allow appendMember() to call `fc.libObjPtr()` */ - friend class CommonStructureFieldClass; - - /* Allow appendOption() to call `fc.libObjPtr()` */ - friend class CommonVariantWithoutSelectorFieldClass; - - friend class CommonVariantWithIntegerSelectorFieldClass< - bt_field_class, - ConstVariantWithIntegerSelectorFieldClassOption< - const bt_field_class_variant_with_selector_field_integer_unsigned_option>>; - - friend class CommonVariantWithIntegerSelectorFieldClass< - bt_field_class, - ConstVariantWithIntegerSelectorFieldClassOption< - const bt_field_class_variant_with_selector_field_integer_signed_option>>; - - /* Allow *FieldClass() to call `fc.libObjPtr()` */ - friend class CommonEventClass; - friend class CommonStreamClass; - - /* Allow create*FieldClass() to call `fc.libObjPtr()` */ - friend class CommonTraceClass; - 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} { } @@ -209,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())); @@ -421,20 +402,14 @@ public: asVariantWithSignedIntegerSelector() const noexcept; template - void userAttributes(const CommonMapValue userAttrs) + void 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()); } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {internal::CommonFieldClassSpec::userAttributes( - this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes { internal::CommonFieldClassSpec::userAttributes(this->libObjPtr())}; @@ -479,13 +454,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()); @@ -498,13 +473,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()); @@ -554,13 +534,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()); @@ -573,15 +553,21 @@ 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) noexcept + CommonIntegerFieldClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonIntegerFieldClass {*this}; + } + + void 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); } @@ -591,9 +577,10 @@ public: return bt_field_class_integer_get_field_value_range(this->libObjPtr()); } - void preferredDisplayBase(const DisplayBase base) noexcept + void 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)); @@ -632,10 +619,6 @@ struct TypeDescr : public IntegerFieldClassTypeDescr { }; -} /* namespace internal */ - -namespace internal { - template struct ConstEnumerationFieldClassMappingSpec; @@ -683,14 +666,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} { } @@ -700,7 +684,7 @@ public: { } - ConstEnumerationFieldClassMapping& + ConstEnumerationFieldClassMapping operator=(const ConstEnumerationFieldClassMapping& mapping) noexcept { _ThisBorrowedObject::operator=(mapping); @@ -713,7 +697,7 @@ public: internal::ConstEnumerationFieldClassMappingSpec::ranges(this->libObjPtr())}; } - bpstd::string_view label() const noexcept + bt2c::CStringView label() const noexcept { return internal::ConstEnumerationFieldClassMappingSpec::label(this->libObjPtr()); } @@ -787,13 +771,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()); @@ -807,14 +791,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()); } @@ -829,16 +818,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()); @@ -847,15 +835,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; } @@ -865,24 +853,13 @@ 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) + void addMapping(const bt2c::CStringView label, const typename Mapping::RangeSet ranges) const { const auto status = internal::CommonEnumerationFieldClassSpec::addMapping( this->libObjPtr(), label, ranges.libObjPtr()); @@ -892,11 +869,6 @@ public: } } - void addMapping(const std::string& label, const typename Mapping::RangeSet ranges) - { - this->addMapping(label.data(), ranges); - } - Iterator begin() const noexcept { return Iterator {*this, 0}; @@ -904,7 +876,7 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; + return Iterator {*this, this->length()}; } Shared shared() const noexcept @@ -1003,17 +975,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} { } @@ -1026,46 +995,40 @@ 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 bt_field_class_structure_member_get_name(this->libObjPtr()); + return CommonStructureFieldClassMember {*this}; } - ConstFieldClass fieldClass() const noexcept + bt2c::CStringView name() const noexcept { - return ConstFieldClass {internal::CommonStructureFieldClassMemberSpec< - const bt_field_class_structure_member>::fieldClass(this->libObjPtr())}; + return bt_field_class_structure_member_get_name(this->libObjPtr()); } - _FieldClass fieldClass() noexcept + _FieldClass fieldClass() const noexcept { return _FieldClass { internal::CommonStructureFieldClassMemberSpec::fieldClass(this->libObjPtr())}; } template - void userAttributes(const CommonMapValue userAttrs) + void 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()); } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {internal::CommonStructureFieldClassMemberSpec< - const bt_field_class_structure_member>::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes { internal::CommonStructureFieldClassMemberSpec::userAttributes( @@ -1139,18 +1102,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()); @@ -1163,15 +1125,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) + CommonStructureFieldClass asConst() const noexcept { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); + return CommonStructureFieldClass {*this}; + } + + void 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()); @@ -1181,12 +1149,7 @@ public: } } - void appendMember(const std::string& name, const FieldClass fc) - { - this->appendMember(name.data(), fc); - } - - std::uint64_t size() const noexcept + std::uint64_t length() const noexcept { return bt_field_class_structure_get_member_count(this->libObjPtr()); } @@ -1198,57 +1161,19 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; - } - - ConstStructureFieldClassMember operator[](const std::uint64_t index) const noexcept - { - return ConstStructureFieldClassMember { - internal::CommonStructureFieldClassSpec::memberByIndex( - this->libObjPtr(), index)}; + return Iterator {*this, this->length()}; } - Member operator[](const std::uint64_t index) noexcept + Member operator[](const std::uint64_t index) const noexcept { return Member {internal::CommonStructureFieldClassSpec::memberByIndex( this->libObjPtr(), index)}; } - nonstd::optional - operator[](const char * const name) const noexcept - { - const auto libObjPtr = - internal::CommonStructureFieldClassSpec::memberByName( - this->libObjPtr(), name); - - if (libObjPtr) { - return ConstStructureFieldClassMember {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional - operator[](const std::string& name) const noexcept - { - return (*this)[name.data()]; - } - - nonstd::optional operator[](const char * const name) 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) noexcept - { - return (*this)[name.data()]; + return internal::CommonStructureFieldClassSpec::memberByName(this->libObjPtr(), + name); } Shared shared() const noexcept @@ -1308,18 +1233,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()); @@ -1332,20 +1255,18 @@ public: } template - CommonArrayFieldClass& operator=(const CommonArrayFieldClass fc) noexcept + CommonArrayFieldClass operator=(const CommonArrayFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } - ConstFieldClass elementFieldClass() const noexcept + CommonArrayFieldClass asConst() const noexcept { - return ConstFieldClass { - internal::CommonArrayFieldClassSpec::elementFieldClass( - this->libObjPtr())}; + return CommonArrayFieldClass {*this}; } - _FieldClass elementFieldClass() noexcept + _FieldClass elementFieldClass() const noexcept { return _FieldClass { internal::CommonArrayFieldClassSpec::elementFieldClass(this->libObjPtr())}; @@ -1385,12 +1306,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()); @@ -1403,13 +1324,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()); @@ -1449,12 +1375,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()); @@ -1468,13 +1394,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 { @@ -1543,18 +1474,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()); @@ -1567,20 +1496,18 @@ public: } template - CommonOptionFieldClass& operator=(const CommonOptionFieldClass fc) noexcept + CommonOptionFieldClass operator=(const CommonOptionFieldClass fc) noexcept { _ThisCommonFieldClass::operator=(fc); return *this; } - ConstFieldClass fieldClass() const noexcept + CommonOptionFieldClass asConst() const noexcept { - return ConstFieldClass { - internal::CommonOptionFieldClassSpec::fieldClass( - this->libObjPtr())}; + return CommonOptionFieldClass {*this}; } - _FieldClass fieldClass() noexcept + _FieldClass fieldClass() const noexcept { return _FieldClass { internal::CommonOptionFieldClassSpec::fieldClass(this->libObjPtr())}; @@ -1622,13 +1549,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()); @@ -1642,13 +1569,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 { @@ -1689,15 +1621,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()); @@ -1711,13 +1642,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( @@ -1788,20 +1724,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()); @@ -1815,7 +1746,7 @@ public: } template - CommonOptionWithIntegerSelectorFieldClass& + CommonOptionWithIntegerSelectorFieldClass operator=(const CommonOptionWithIntegerSelectorFieldClass fc) noexcept { _ThisCommonOptionWithSelectorFieldClass::operator=(fc); @@ -1926,16 +1857,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} { } @@ -1947,51 +1875,39 @@ 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 nonstd::nullopt; + return CommonVariantFieldClassOption {*this}; } - ConstFieldClass fieldClass() const noexcept + bt2c::CStringView name() const noexcept { - return ConstFieldClass {internal::CommonVariantFieldClassOptionSpec< - const bt_field_class_variant_option>::fieldClass(this->libObjPtr())}; + return bt_field_class_variant_option_get_name(this->libObjPtr()); } - _FieldClass fieldClass() noexcept + _FieldClass fieldClass() const noexcept { return _FieldClass { internal::CommonVariantFieldClassOptionSpec::fieldClass(this->libObjPtr())}; } template - void userAttributes(const CommonMapValue userAttrs) + void 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()); } - ConstMapValue userAttributes() const noexcept - { - return ConstMapValue {internal::CommonVariantFieldClassOptionSpec< - const bt_field_class_variant_option>::userAttributes(this->libObjPtr())}; - } - - UserAttributes userAttributes() noexcept + UserAttributes userAttributes() const noexcept { return UserAttributes {internal::CommonVariantFieldClassOptionSpec::userAttributes( this->libObjPtr())}; @@ -2077,17 +1993,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} { } @@ -2100,7 +2017,7 @@ public: } template - ConstVariantWithIntegerSelectorFieldClassOption& + ConstVariantWithIntegerSelectorFieldClassOption operator=(const ConstVariantWithIntegerSelectorFieldClassOption fc) noexcept { _ThisBorrowedObject::operator=(fc); @@ -2112,7 +2029,7 @@ public: return ConstVariantFieldClassOption {_Spec::asBaseOption(this->libObjPtr())}; } - nonstd::optional name() const noexcept + bt2c::CStringView name() const noexcept { return this->asBaseOption().name(); } @@ -2184,19 +2101,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; - - using Iterator = CommonIterator; + internal::DepType; - explicit CommonVariantFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isVariant()); @@ -2209,13 +2124,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()); } @@ -2227,57 +2147,19 @@ public: Iterator end() const noexcept { - return Iterator {*this, this->size()}; - } - - ConstVariantFieldClassOption operator[](const std::uint64_t index) const noexcept - { - return ConstVariantFieldClassOption { - internal::CommonVariantFieldClassSpec::optionByIndex( - this->libObjPtr(), index)}; + return Iterator {*this, this->length()}; } - Option operator[](const std::uint64_t index) noexcept + Option operator[](const std::uint64_t index) const noexcept { return Option {internal::CommonVariantFieldClassSpec::optionByIndex( this->libObjPtr(), index)}; } - nonstd::optional - operator[](const char * const name) const noexcept - { - const auto libObjPtr = - internal::CommonVariantFieldClassSpec::optionByName( - this->libObjPtr(), name); - - if (libObjPtr) { - return ConstVariantFieldClassOption {libObjPtr}; - } - - return nonstd::nullopt; - } - - nonstd::optional - operator[](const std::string& name) const noexcept - { - return (*this)[name.data()]; - } - - 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()); @@ -2333,16 +2215,22 @@ public: } template - CommonVariantWithoutSelectorFieldClass& + CommonVariantWithoutSelectorFieldClass operator=(const CommonVariantWithoutSelectorFieldClass fc) noexcept { _ThisCommonVariantFieldClass::operator=(fc); return *this; } - void appendOption(const char * const name, const FieldClass fc) + CommonVariantWithoutSelectorFieldClass asConst() const noexcept + { + return CommonVariantWithoutSelectorFieldClass {*this}; + } + + void appendOption(const char * const name, const FieldClass fc) const { - static_assert(!std::is_const::value, "`LibObjT` must NOT be `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()); @@ -2353,7 +2241,12 @@ public: } } - void appendOption(const nonstd::optional& name, const FieldClass fc) + void appendOption(const bt2c::CStringView name, const FieldClass fc) const + { + return this->appendOption(name.data(), fc); + } + + void appendOption(const bt2s::optional& name, const FieldClass fc) const { this->appendOption(name ? name->data() : nullptr, fc); } @@ -2460,13 +2353,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()); @@ -2480,13 +2373,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 { @@ -2511,20 +2409,18 @@ 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()); @@ -2538,7 +2434,7 @@ public: } template - CommonVariantWithIntegerSelectorFieldClass& + CommonVariantWithIntegerSelectorFieldClass operator=(const CommonVariantWithIntegerSelectorFieldClass fc) noexcept { _ThisCommonVariantWithSelectorFieldClass::operator=(fc); @@ -2550,26 +2446,17 @@ public: return Option {_Spec::optionByIndex(this->libObjPtr(), index)}; } - nonstd::optional