X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ffield-class.hpp;h=ae2c52a3711f58da6754e6ef82c32c849506e658;hb=75aa724c9d3d00bb7e711662f730260948cab98f;hp=6e1c0d679b5a0ff78126724aa19a9a25a44aff6e;hpb=100fa861dbb7e463175e63326e8871446f0f35f0;p=babeltrace.git diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index 6e1c0d67..ae2c52a3 100644 --- a/src/cpp-common/bt2/field-class.hpp +++ b/src/cpp-common/bt2/field-class.hpp @@ -7,20 +7,22 @@ #ifndef BABELTRACE_CPP_COMMON_BT2_FIELD_CLASS_HPP #define BABELTRACE_CPP_COMMON_BT2_FIELD_CLASS_HPP -#include #include +#include + #include #include "common/assert.h" -#include "internal/borrowed-obj.hpp" -#include "internal/shared-obj.hpp" -#include "internal/utils.hpp" #include "cpp-common/optional.hpp" #include "cpp-common/string_view.hpp" -#include "common-iter.hpp" + +#include "borrowed-object.hpp" +#include "common-iterator.hpp" #include "exc.hpp" -#include "integer-range-set.hpp" #include "field-path.hpp" +#include "integer-range-set.hpp" +#include "internal/utils.hpp" +#include "shared-object.hpp" #include "value.hpp" namespace bt2 { @@ -28,20 +30,17 @@ 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); } }; -template -using SharedFieldClass = internal::SharedObj; - template struct CommonFieldClassSpec; @@ -67,6 +66,9 @@ struct CommonFieldClassSpec final } /* namespace internal */ +template +using SharedFieldClass = SharedObject; + template class CommonBitArrayFieldClass; @@ -159,57 +161,34 @@ enum class FieldClassType }; template -class CommonFieldClass : public internal::BorrowedObj +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 internal::BorrowedObj::_ThisBorrowedObj; + using typename BorrowedObject::_ThisBorrowedObject; protected: - using typename internal::BorrowedObj::_LibObjPtr; + using typename BorrowedObject::_LibObjPtr; using _ThisCommonFieldClass = CommonFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; using UserAttributes = typename std::conditional::value, ConstMapValue, MapValue>::type; - explicit CommonFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObj {libObjPtr} + explicit CommonFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr} { } template - CommonFieldClass(const CommonFieldClass fc) noexcept : _ThisBorrowedObj {fc} + CommonFieldClass(const CommonFieldClass fc) noexcept : _ThisBorrowedObject {fc} { } template CommonFieldClass& operator=(const CommonFieldClass fc) noexcept { - _ThisBorrowedObj::operator=(fc); + _ThisBorrowedObject::operator=(fc); return *this; } @@ -419,20 +398,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`."); 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())}; @@ -481,7 +454,7 @@ private: using typename CommonFieldClass::_ThisCommonFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonBitArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} @@ -556,7 +529,7 @@ protected: using _ThisCommonIntegerFieldClass = CommonIntegerFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonIntegerFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} @@ -577,7 +550,7 @@ public: return *this; } - void fieldValueRange(const std::uint64_t n) noexcept + void fieldValueRange(const std::uint64_t n) const noexcept { static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); @@ -589,7 +562,7 @@ 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`."); @@ -677,11 +650,11 @@ struct ConstEnumerationFieldClassMappingSpec -class ConstEnumerationFieldClassMapping final : public internal::BorrowedObj +class ConstEnumerationFieldClassMapping final : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; + using typename BorrowedObject::_ThisBorrowedObject; + using typename BorrowedObject::_LibObjPtr; public: using RangeSet = typename std::conditional< @@ -689,19 +662,19 @@ public: ConstUnsignedIntegerRangeSet, ConstSignedIntegerRangeSet>::type; explicit ConstEnumerationFieldClassMapping(const _LibObjPtr libObjPtr) noexcept : - _ThisBorrowedObj {libObjPtr} + _ThisBorrowedObject {libObjPtr} { } ConstEnumerationFieldClassMapping(const ConstEnumerationFieldClassMapping& mapping) noexcept : - _ThisBorrowedObj {mapping} + _ThisBorrowedObject {mapping} { } ConstEnumerationFieldClassMapping& operator=(const ConstEnumerationFieldClassMapping& mapping) noexcept { - _ThisBorrowedObj::operator=(mapping); + _ThisBorrowedObject::operator=(mapping); return *this; } @@ -789,7 +762,7 @@ protected: using _ThisCommonBaseEnumerationFieldClass = CommonBaseEnumerationFieldClass; public: - using Shared = internal::SharedFieldClass<_ThisCommonBaseEnumerationFieldClass, LibObjT>; + using Shared = SharedFieldClass<_ThisCommonBaseEnumerationFieldClass, LibObjT>; explicit CommonBaseEnumerationFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonIntegerFieldClass {libObjPtr} @@ -832,7 +805,7 @@ private: using _ThisCommonEnumerationFieldClass = CommonEnumerationFieldClass; public: - using Shared = internal::SharedFieldClass<_ThisCommonEnumerationFieldClass, LibObjT>; + using Shared = SharedFieldClass<_ThisCommonEnumerationFieldClass, LibObjT>; using Iterator = CommonIterator; using Mapping = MappingT; @@ -880,7 +853,7 @@ public: return (*this)[label.data()]; } - void addMapping(const char * const label, const typename Mapping::RangeSet ranges) + void addMapping(const char * const label, const typename Mapping::RangeSet ranges) const { const auto status = internal::CommonEnumerationFieldClassSpec::addMapping( this->libObjPtr(), label, ranges.libObjPtr()); @@ -890,7 +863,7 @@ public: } } - void addMapping(const std::string& label, const typename Mapping::RangeSet ranges) + void addMapping(const std::string& label, const typename Mapping::RangeSet ranges) const { this->addMapping(label.data(), ranges); } @@ -998,11 +971,11 @@ struct CommonStructureFieldClassMemberSpec -class CommonStructureFieldClassMember final : public internal::BorrowedObj +class CommonStructureFieldClassMember final : public BorrowedObject { private: - using typename internal::BorrowedObj::_LibObjPtr; - using typename internal::BorrowedObj::_ThisBorrowedObj; + using typename BorrowedObject::_LibObjPtr; + using typename BorrowedObject::_ThisBorrowedObject; using _FieldClass = typename std::conditional::value, ConstFieldClass, FieldClass>::type; @@ -1012,14 +985,14 @@ public: typename std::conditional::value, ConstMapValue, MapValue>::type; explicit CommonStructureFieldClassMember(const _LibObjPtr libObjPtr) noexcept : - _ThisBorrowedObj {libObjPtr} + _ThisBorrowedObject {libObjPtr} { } template CommonStructureFieldClassMember(const CommonStructureFieldClassMember fc) noexcept : - _ThisBorrowedObj {fc} + _ThisBorrowedObject {fc} { } @@ -1027,7 +1000,7 @@ public: CommonStructureFieldClassMember& operator=(const CommonStructureFieldClassMember fc) noexcept { - _ThisBorrowedObj::operator=(fc); + _ThisBorrowedObject::operator=(fc); return *this; } @@ -1036,20 +1009,14 @@ public: return bt_field_class_structure_member_get_name(this->libObjPtr()); } - ConstFieldClass fieldClass() const noexcept - { - return ConstFieldClass {internal::CommonStructureFieldClassMemberSpec< - const bt_field_class_structure_member>::fieldClass(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`."); @@ -1057,13 +1024,7 @@ public: 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( @@ -1141,7 +1102,7 @@ private: using typename CommonFieldClass::_ThisCommonFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; using Member = typename std::conditional::value, ConstStructureFieldClassMember, StructureFieldClassMember>::type; @@ -1167,7 +1128,7 @@ public: return *this; } - void appendMember(const char * const name, const FieldClass fc) + void appendMember(const char * const name, const FieldClass fc) const { static_assert(!std::is_const::value, "`LibObjT` must NOT be `const`."); @@ -1179,7 +1140,7 @@ public: } } - void appendMember(const std::string& name, const FieldClass fc) + void appendMember(const std::string& name, const FieldClass fc) const { this->appendMember(name.data(), fc); } @@ -1199,40 +1160,13 @@ public: return Iterator {*this, this->size()}; } - ConstStructureFieldClassMember operator[](const std::uint64_t index) const noexcept - { - return ConstStructureFieldClassMember { - internal::CommonStructureFieldClassSpec::memberByIndex( - this->libObjPtr(), index)}; - } - - 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 + nonstd::optional operator[](const char * const name) const noexcept { const auto libObjPtr = internal::CommonStructureFieldClassSpec::memberByName(this->libObjPtr(), name); @@ -1244,7 +1178,7 @@ public: return nonstd::nullopt; } - nonstd::optional operator[](const std::string& name) noexcept + nonstd::optional operator[](const std::string& name) const noexcept { return (*this)[name.data()]; } @@ -1315,7 +1249,7 @@ protected: using _ThisCommonArrayFieldClass = CommonArrayFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} @@ -1336,14 +1270,7 @@ public: return *this; } - ConstFieldClass elementFieldClass() const noexcept - { - return ConstFieldClass { - internal::CommonArrayFieldClassSpec::elementFieldClass( - this->libObjPtr())}; - } - - _FieldClass elementFieldClass() noexcept + _FieldClass elementFieldClass() const noexcept { return _FieldClass { internal::CommonArrayFieldClassSpec::elementFieldClass(this->libObjPtr())}; @@ -1386,7 +1313,7 @@ private: using typename CommonFieldClass::_LibObjPtr; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonStaticArrayFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonArrayFieldClass {libObjPtr} @@ -1450,8 +1377,7 @@ private: using typename CommonFieldClass::_LibObjPtr; public: - using Shared = - internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonDynamicArrayWithLengthFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonArrayFieldClass {libObjPtr} @@ -1551,7 +1477,7 @@ protected: using _ThisCommonOptionFieldClass = CommonOptionFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonOptionFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonFieldClass {libObjPtr} @@ -1572,14 +1498,7 @@ public: return *this; } - ConstFieldClass fieldClass() const noexcept - { - return ConstFieldClass { - internal::CommonOptionFieldClassSpec::fieldClass( - this->libObjPtr())}; - } - - _FieldClass fieldClass() noexcept + _FieldClass fieldClass() const noexcept { return _FieldClass { internal::CommonOptionFieldClassSpec::fieldClass(this->libObjPtr())}; @@ -1625,7 +1544,7 @@ protected: using _ThisCommonOptionWithSelectorFieldClass = CommonOptionWithSelectorFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonOptionWithSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonOptionFieldClass {libObjPtr} @@ -1694,8 +1613,7 @@ private: LibObjT>::_ThisCommonOptionWithSelectorFieldClass; public: - using Shared = - internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; explicit CommonOptionWithBoolSelectorFieldClass(const _LibObjPtr libObjPtr) noexcept : _ThisCommonOptionWithSelectorFieldClass {libObjPtr} @@ -1797,8 +1715,7 @@ private: CommonOptionWithIntegerSelectorFieldClass; public: - using Shared = - internal::SharedFieldClass<_ThisCommonOptionWithIntegerSelectorFieldClass, LibObjT>; + using Shared = SharedFieldClass<_ThisCommonOptionWithIntegerSelectorFieldClass, LibObjT>; using RangeSet = RangeSetT; @@ -1923,11 +1840,11 @@ struct CommonVariantFieldClassOptionSpec fi } /* namespace internal */ template -class CommonVariantFieldClassOption : public internal::BorrowedObj +class CommonVariantFieldClassOption : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; + using typename BorrowedObject::_ThisBorrowedObject; + using typename BorrowedObject::_LibObjPtr; using _FieldClass = typename std::conditional::value, ConstFieldClass, FieldClass>::type; @@ -1937,13 +1854,13 @@ public: typename std::conditional::value, ConstMapValue, MapValue>::type; explicit CommonVariantFieldClassOption(const _LibObjPtr libObjPtr) noexcept : - _ThisBorrowedObj {libObjPtr} + _ThisBorrowedObject {libObjPtr} { } template CommonVariantFieldClassOption(const CommonVariantFieldClassOption fc) noexcept : - _ThisBorrowedObj {fc} + _ThisBorrowedObject {fc} { } @@ -1951,7 +1868,7 @@ public: CommonVariantFieldClassOption& operator=(const CommonVariantFieldClassOption fc) noexcept { - _ThisBorrowedObj::operator=(fc); + _ThisBorrowedObject::operator=(fc); return *this; } @@ -1966,33 +1883,21 @@ public: return nonstd::nullopt; } - ConstFieldClass fieldClass() const noexcept - { - return ConstFieldClass {internal::CommonVariantFieldClassOptionSpec< - const bt_field_class_variant_option>::fieldClass(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`."); 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())}; @@ -2074,11 +1979,11 @@ struct ConstVariantWithIntegerSelectorFieldClassOptionSpec< } /* namespace internal */ template -class ConstVariantWithIntegerSelectorFieldClassOption : public internal::BorrowedObj +class ConstVariantWithIntegerSelectorFieldClassOption : public BorrowedObject { private: - using typename internal::BorrowedObj::_ThisBorrowedObj; - using typename internal::BorrowedObj::_LibObjPtr; + using typename BorrowedObject::_ThisBorrowedObject; + using typename BorrowedObject::_LibObjPtr; using _Spec = internal::ConstVariantWithIntegerSelectorFieldClassOptionSpec; public: @@ -2089,14 +1994,14 @@ public: ConstUnsignedIntegerRangeSet, ConstSignedIntegerRangeSet>::type; explicit ConstVariantWithIntegerSelectorFieldClassOption(const _LibObjPtr libObjPtr) noexcept : - _ThisBorrowedObj {libObjPtr} + _ThisBorrowedObject {libObjPtr} { } template ConstVariantWithIntegerSelectorFieldClassOption( const ConstVariantWithIntegerSelectorFieldClassOption fc) noexcept : - _ThisBorrowedObj {fc} + _ThisBorrowedObject {fc} { } @@ -2104,7 +2009,7 @@ public: ConstVariantWithIntegerSelectorFieldClassOption& operator=(const ConstVariantWithIntegerSelectorFieldClassOption fc) noexcept { - _ThisBorrowedObj::operator=(fc); + _ThisBorrowedObject::operator=(fc); return *this; } @@ -2189,7 +2094,7 @@ protected: using _ThisCommonVariantFieldClass = CommonVariantFieldClass; public: - using Shared = internal::SharedFieldClass, LibObjT>; + using Shared = SharedFieldClass, LibObjT>; using Option = typename std::conditional::value, ConstVariantFieldClassOption, @@ -2231,40 +2136,13 @@ public: return Iterator {*this, this->size()}; } - ConstVariantFieldClassOption operator[](const std::uint64_t index) const noexcept - { - return ConstVariantFieldClassOption { - internal::CommonVariantFieldClassSpec::optionByIndex( - this->libObjPtr(), index)}; - } - - 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