X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ffield-class.hpp;h=c6c4d690ff7870e93b26ee6bc4852630991c3d9c;hb=5ca48ae961d956ce188ff45b2d2c04127874276a;hp=f299690edce680bd5685e3a4d908dfd34cbac769;hpb=5cc5088c99cfef4584388872e51a92b8f2268ed3;p=babeltrace.git diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index f299690e..c6c4d690 100644 --- a/src/cpp-common/bt2/field-class.hpp +++ b/src/cpp-common/bt2/field-class.hpp @@ -13,7 +13,8 @@ #include #include "common/assert.h" -#include "cpp-common/optional.hpp" +#include "cpp-common/bt2c/c-string-view.hpp" +#include "cpp-common/bt2s/optional.hpp" #include "borrowed-object-iterator.hpp" #include "borrowed-object.hpp" @@ -21,6 +22,7 @@ #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" @@ -166,14 +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; - explicit CommonFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} + explicit CommonFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -452,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()); @@ -532,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()); @@ -664,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} { } @@ -694,7 +697,7 @@ public: internal::ConstEnumerationFieldClassMappingSpec::ranges(this->libObjPtr())}; } - const char *label() const noexcept + bt2c::CStringView label() const noexcept { return internal::ConstEnumerationFieldClassMappingSpec::label(this->libObjPtr()); } @@ -768,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()); @@ -815,15 +818,15 @@ template class CommonEnumerationFieldClass final : public CommonBaseEnumerationFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; using typename CommonBaseEnumerationFieldClass::_ThisCommonBaseEnumerationFieldClass; public: + 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()); @@ -850,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) const + void addMapping(const bt2c::CStringView label, const typename Mapping::RangeSet ranges) const { const auto status = internal::CommonEnumerationFieldClassSpec::addMapping( this->libObjPtr(), label, ranges.libObjPtr()); @@ -877,11 +869,6 @@ public: } } - void addMapping(const std::string& label, const typename Mapping::RangeSet ranges) const - { - this->addMapping(label.data(), ranges); - } - Iterator begin() const noexcept { return Iterator {*this, 0}; @@ -988,14 +975,14 @@ template class CommonStructureFieldClassMember final : public BorrowedObject { private: - using typename BorrowedObject::_LibObjPtr; using typename BorrowedObject::_ThisBorrowedObject; using _FieldClass = internal::DepFc; public: + using typename BorrowedObject::LibObjPtr; using UserAttributes = internal::DepUserAttrs; - explicit CommonStructureFieldClassMember(const _LibObjPtr libObjPtr) noexcept : + explicit CommonStructureFieldClassMember(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -1020,7 +1007,7 @@ public: return CommonStructureFieldClassMember {*this}; } - const char *name() const noexcept + bt2c::CStringView name() const noexcept { return bt_field_class_structure_member_get_name(this->libObjPtr()); } @@ -1115,17 +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 Iterator = BorrowedObjectIterator>; using Member = internal::DepType; - explicit CommonStructureFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonStructureFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isStructure()); @@ -1149,7 +1136,7 @@ public: return CommonStructureFieldClass {*this}; } - void appendMember(const char * const name, const FieldClass fc) const + void appendMember(const bt2c::CStringView name, const FieldClass fc) const { static_assert(!std::is_const::value, "Not available with `bt2::ConstStructureFieldClass`."); @@ -1162,11 +1149,6 @@ public: } } - void appendMember(const std::string& name, const FieldClass fc) const - { - this->appendMember(name.data(), fc); - } - std::uint64_t length() const noexcept { return bt_field_class_structure_get_member_count(this->libObjPtr()); @@ -1188,21 +1170,10 @@ public: this->libObjPtr(), index)}; } - nonstd::optional operator[](const char * const 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 + OptionalBorrowedObject operator[](const bt2c::CStringView name) const noexcept { - return (*this)[name.data()]; + return internal::CommonStructureFieldClassSpec::memberByName(this->libObjPtr(), + name); } Shared shared() const noexcept @@ -1265,13 +1236,13 @@ private: 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()); @@ -1335,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()); @@ -1404,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()); @@ -1506,13 +1477,13 @@ private: 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()); @@ -1578,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()); @@ -1650,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()); @@ -1754,16 +1724,15 @@ template class CommonOptionWithIntegerSelectorFieldClass : public CommonOptionWithSelectorFieldClass { private: - using typename CommonFieldClass::_LibObjPtr; - using typename CommonOptionWithSelectorFieldClass< LibObjT>::_ThisCommonOptionWithSelectorFieldClass; public: + 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()); @@ -1888,13 +1857,13 @@ class CommonVariantFieldClassOption : public BorrowedObject { private: using typename BorrowedObject::_ThisBorrowedObject; - using typename BorrowedObject::_LibObjPtr; using _FieldClass = internal::DepFc; public: + using typename BorrowedObject::LibObjPtr; using UserAttributes = internal::DepUserAttrs; - explicit CommonVariantFieldClassOption(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantFieldClassOption(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } @@ -1918,7 +1887,7 @@ public: return CommonVariantFieldClassOption {*this}; } - const char *name() const noexcept + bt2c::CStringView name() const noexcept { return bt_field_class_variant_option_get_name(this->libObjPtr()); } @@ -2024,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} { } @@ -2059,7 +2029,7 @@ public: return ConstVariantFieldClassOption {_Spec::asBaseOption(this->libObjPtr())}; } - const char *name() const noexcept + bt2c::CStringView name() const noexcept { return this->asBaseOption().name(); } @@ -2131,17 +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 = internal::DepType; - explicit CommonVariantFieldClass(const _LibObjPtr libObjPtr) noexcept : + explicit CommonVariantFieldClass(const LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} { BT_ASSERT_DBG(this->isVariant()); @@ -2186,21 +2156,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()); @@ -2282,7 +2241,12 @@ public: } } - void appendOption(const nonstd::optional& name, const FieldClass fc) const + 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); } @@ -2389,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()); @@ -2445,21 +2409,21 @@ class CommonVariantWithIntegerSelectorFieldClass : private: using typename CommonVariantWithSelectorFieldClass< LibObjT>::_ThisCommonVariantWithSelectorFieldClass; - using typename CommonFieldClass::_LibObjPtr; using _Spec = internal::CommonVariantWithIntegerSelectorFieldClassSpec; public: + using typename CommonFieldClass::LibObjPtr; using Shared = SharedFieldClass; using Option = OptionT; using Iterator = 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 @@ -2482,20 +2446,9 @@ public: return Option {_Spec::optionByIndex(this->libObjPtr(), index)}; } - nonstd::optional