From c9c0b6e232066c94b2f4637cf913762e8e71e13a Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Fri, 13 May 2022 13:29:36 -0400 Subject: [PATCH] Add bt2::internal::SharedObj::create{With,Without}Ref() methods It seems like there were some confusion regarding the reference acquisition of the `bt2::internal::SharedObj` constructor vs. its createWithInitialRef() static method. Make it clear with a private constructor and two public static methods: * createWithoutRef() creates a shared object without getting a reference. * createWithRef() creates a shared object, immediately getting a new reference. Both methods have two versions: one which accepts a wrapper and one which accepts a raw libbabeltrace2 pointer. Update all the `src/cpp-common/bt2` code to use those methods. The pattern for a non-static shared() method is: Shared shared() const noexcept { return Shared::createWithRef(*this); } This means if you have a borrowed wrapper `obj`, then `obj.shared()` returns a shared object, incrementing the reference count. The pattern for a creation method is: return Shared::createWithoutRef(libObjPtr); where `libObjPtr` is a raw libbabeltrace2 pointer to an object of which the reference count is one. Signed-off-by: Philippe Proulx Change-Id: Ifeef4af74a0078c1b7e9e5dfec8ebd5be381da8f Reviewed-on: https://review.lttng.org/c/babeltrace/+/8039 Reviewed-on: https://review.lttng.org/c/babeltrace/+/10797 Tested-by: jenkins --- src/cpp-common/bt2/clock-class.hpp | 2 +- src/cpp-common/bt2/field-class.hpp | 34 ++++----- src/cpp-common/bt2/field-path.hpp | 2 +- src/cpp-common/bt2/integer-range-set.hpp | 4 +- src/cpp-common/bt2/internal/shared-obj.hpp | 52 +++++++++----- src/cpp-common/bt2/message.hpp | 18 ++--- src/cpp-common/bt2/trace-ir.hpp | 81 ++++++++++------------ src/cpp-common/bt2/value.hpp | 34 ++++----- 8 files changed, 119 insertions(+), 108 deletions(-) diff --git a/src/cpp-common/bt2/clock-class.hpp b/src/cpp-common/bt2/clock-class.hpp index 15273164..8e45e2f2 100644 --- a/src/cpp-common/bt2/clock-class.hpp +++ b/src/cpp-common/bt2/clock-class.hpp @@ -279,7 +279,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; diff --git a/src/cpp-common/bt2/field-class.hpp b/src/cpp-common/bt2/field-class.hpp index 1a060866..a7c4ba4b 100644 --- a/src/cpp-common/bt2/field-class.hpp +++ b/src/cpp-common/bt2/field-class.hpp @@ -434,7 +434,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } protected: @@ -504,7 +504,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -599,7 +599,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -813,7 +813,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -901,7 +901,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1209,7 +1209,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1309,7 +1309,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1373,7 +1373,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1441,7 +1441,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1545,7 +1545,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1615,7 +1615,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1684,7 +1684,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1789,7 +1789,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -2201,7 +2201,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -2280,7 +2280,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -2416,7 +2416,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -2518,7 +2518,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; diff --git a/src/cpp-common/bt2/field-path.hpp b/src/cpp-common/bt2/field-path.hpp index 75f98c68..0a024480 100644 --- a/src/cpp-common/bt2/field-path.hpp +++ b/src/cpp-common/bt2/field-path.hpp @@ -179,7 +179,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; diff --git a/src/cpp-common/bt2/integer-range-set.hpp b/src/cpp-common/bt2/integer-range-set.hpp index 22ff4da1..5889972d 100644 --- a/src/cpp-common/bt2/integer-range-set.hpp +++ b/src/cpp-common/bt2/integer-range-set.hpp @@ -190,7 +190,7 @@ public: const auto libObjPtr = _Spec::create(); internal::validateCreatedObjPtr(libObjPtr); - return Shared {_ThisCommonIntegerRangeSet {libObjPtr}}; + return CommonIntegerRangeSet::Shared::createWithoutRef(libObjPtr); } template @@ -252,7 +252,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; diff --git a/src/cpp-common/bt2/internal/shared-obj.hpp b/src/cpp-common/bt2/internal/shared-obj.hpp index da8df238..d16eb940 100644 --- a/src/cpp-common/bt2/internal/shared-obj.hpp +++ b/src/cpp-common/bt2/internal/shared-obj.hpp @@ -45,37 +45,53 @@ class SharedObj final template friend class SharedObj; +private: + /* + * Builds a shared object from `obj` without getting a reference. + */ + explicit SharedObj(const ObjT& obj) noexcept : _mObj {obj} + { + } + public: - /* This complete shared object */ - using ThisSharedObj = SharedObj; + /* + * Builds a shared object from `obj` without getting a reference. + */ + static SharedObj createWithoutRef(const ObjT& obj) noexcept + { + return SharedObj {obj}; + } /* - * Builds a shared object from `obj` without an initial reference. - * - * Use this constructor to build a shared object wrapping a newly - * created libbabeltrace2 object. - * - * Use createWithInitialRef() to build a shared object having an - * initial reference count. + * Builds a shared object from `libObjPtr` without getting a + * reference. */ - explicit SharedObj(const ObjT& obj) noexcept : _mObj {obj} + static SharedObj createWithoutRef(LibObjT * const libObjPtr) noexcept { + return SharedObj::createWithoutRef(ObjT {libObjPtr}); } /* - * Builds a shared object from `obj` with an initial reference. - * - * Use this constructor to build a shared object wrapping a newly - * created libbabeltrace2 object. + * Builds a shared object from `obj`, immediately getting a new + * reference. */ - static ThisSharedObj createWithInitialRef(const ObjT& obj) noexcept + static SharedObj createWithRef(const ObjT& obj) noexcept { - ThisSharedObj sharedObj {obj}; + SharedObj sharedObj {obj}; sharedObj._getRef(); return sharedObj; } + /* + * Builds a shared object from `libObjPtr`, immediately getting a new + * reference. + */ + static SharedObj createWithRef(LibObjT * const libObjPtr) noexcept + { + return SharedObj::createWithRef(ObjT {libObjPtr}); + } + /* * Generic copy constructor. * @@ -106,7 +122,7 @@ public: * See the `friend class SharedObj` comment above. */ template - ThisSharedObj& operator=(const SharedObj& other) noexcept + SharedObj& operator=(const SharedObj& other) noexcept { /* Put current object's reference */ this->_putRef(); @@ -124,7 +140,7 @@ public: * See the `friend class SharedObj` comment above. */ template - ThisSharedObj& operator=(SharedObj&& other) noexcept + SharedObj& operator=(SharedObj&& other) noexcept { /* Put current object's reference */ this->_putRef(); diff --git a/src/cpp-common/bt2/message.hpp b/src/cpp-common/bt2/message.hpp index 4e575722..cc0f20ea 100644 --- a/src/cpp-common/bt2/message.hpp +++ b/src/cpp-common/bt2/message.hpp @@ -154,7 +154,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } CommonStreamBeginningMessage asStreamBeginning() const noexcept; @@ -281,7 +281,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -398,7 +398,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -511,7 +511,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -623,7 +623,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -727,7 +727,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -861,7 +861,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -995,7 +995,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1064,7 +1064,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; diff --git a/src/cpp-common/bt2/trace-ir.hpp b/src/cpp-common/bt2/trace-ir.hpp index 87f51b9a..625c3f33 100644 --- a/src/cpp-common/bt2/trace-ir.hpp +++ b/src/cpp-common/bt2/trace-ir.hpp @@ -368,7 +368,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -526,7 +526,7 @@ public: const auto libObjPtr = bt_packet_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return Packet::Shared {Packet {libObjPtr}}; + return Packet::Shared::createWithoutRef(libObjPtr); } CommonStreamClass cls() const noexcept; @@ -586,7 +586,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -935,7 +935,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1276,7 +1276,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1477,7 +1477,7 @@ public: const auto libObjPtr = bt_stream_create(this->libObjPtr(), trace.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return Stream::Shared {Stream {libObjPtr}}; + return Stream::Shared::createWithoutRef(libObjPtr); } Stream::Shared instantiate(const Trace& trace, const std::uint64_t id) @@ -1487,7 +1487,7 @@ public: const auto libObjPtr = bt_stream_create_with_id(this->libObjPtr(), trace.libObjPtr(), id); internal::validateCreatedObjPtr(libObjPtr); - return Stream::Shared {Stream {libObjPtr}}; + return Stream::Shared::createWithoutRef(libObjPtr); } EventClass::Shared createEventClass() @@ -1497,7 +1497,7 @@ public: const auto libObjPtr = bt_event_class_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return EventClass::Shared {EventClass {libObjPtr}}; + return EventClass::Shared::createWithoutRef(libObjPtr); } EventClass::Shared createEventClass(const std::uint64_t id) @@ -1507,7 +1507,7 @@ public: const auto libObjPtr = bt_event_class_create_with_id(this->libObjPtr(), id); internal::validateCreatedObjPtr(libObjPtr); - return EventClass::Shared {EventClass {libObjPtr}}; + return EventClass::Shared::createWithoutRef(libObjPtr); } CommonTraceClass traceClass() const noexcept; @@ -1799,7 +1799,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -1959,7 +1959,7 @@ public: const auto libObjPtr = bt_trace_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return Trace::Shared {Trace {libObjPtr}}; + return Trace::Shared::createWithoutRef(libObjPtr); } StreamClass::Shared createStreamClass() @@ -1969,7 +1969,7 @@ public: const auto libObjPtr = bt_stream_class_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return StreamClass::Shared {StreamClass {libObjPtr}}; + return StreamClass::Shared::createWithoutRef(libObjPtr); } StreamClass::Shared createStreamClass(const std::uint64_t id) @@ -1979,7 +1979,7 @@ public: const auto libObjPtr = bt_stream_class_create_with_id(this->libObjPtr(), id); internal::validateCreatedObjPtr(libObjPtr); - return StreamClass::Shared {StreamClass {libObjPtr}}; + return StreamClass::Shared::createWithoutRef(libObjPtr); } FieldClass::Shared createBoolFieldClass() @@ -1989,7 +1989,7 @@ public: const auto libObjPtr = bt_field_class_bool_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return FieldClass::Shared {FieldClass {libObjPtr}}; + return FieldClass::Shared::createWithoutRef(libObjPtr); } BitArrayFieldClass::Shared createBitArrayFieldClass(const std::uint64_t length) @@ -1999,7 +1999,7 @@ public: const auto libObjPtr = bt_field_class_bit_array_create(this->libObjPtr(), length); internal::validateCreatedObjPtr(libObjPtr); - return BitArrayFieldClass::Shared {BitArrayFieldClass {libObjPtr}}; + return BitArrayFieldClass::Shared::createWithoutRef(libObjPtr); } IntegerFieldClass::Shared createUnsignedIntegerFieldClass() @@ -2009,7 +2009,7 @@ public: const auto libObjPtr = bt_field_class_integer_unsigned_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return IntegerFieldClass::Shared {IntegerFieldClass {libObjPtr}}; + return IntegerFieldClass::Shared::createWithoutRef(libObjPtr); } IntegerFieldClass::Shared createSignedIntegerFieldClass() @@ -2019,7 +2019,7 @@ public: const auto libObjPtr = bt_field_class_integer_signed_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return IntegerFieldClass::Shared {IntegerFieldClass {libObjPtr}}; + return IntegerFieldClass::Shared::createWithoutRef(libObjPtr); } UnsignedEnumerationFieldClass::Shared createUnsignedEnumerationFieldClass() @@ -2029,7 +2029,7 @@ public: const auto libObjPtr = bt_field_class_enumeration_unsigned_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return UnsignedEnumerationFieldClass::Shared {UnsignedEnumerationFieldClass {libObjPtr}}; + return UnsignedEnumerationFieldClass::Shared::createWithoutRef(libObjPtr); } SignedEnumerationFieldClass::Shared createSignedEnumerationFieldClass() @@ -2039,7 +2039,7 @@ public: const auto libObjPtr = bt_field_class_enumeration_signed_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return SignedEnumerationFieldClass::Shared {SignedEnumerationFieldClass {libObjPtr}}; + return SignedEnumerationFieldClass::Shared::createWithoutRef(libObjPtr); } FieldClass::Shared createSinglePrecisionRealFieldClass() @@ -2049,7 +2049,7 @@ public: const auto libObjPtr = bt_field_class_real_single_precision_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return FieldClass::Shared {FieldClass {libObjPtr}}; + return FieldClass::Shared::createWithoutRef(libObjPtr); } FieldClass::Shared createDoublePrecisionRealFieldClass() @@ -2059,7 +2059,7 @@ public: const auto libObjPtr = bt_field_class_real_double_precision_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return FieldClass::Shared {FieldClass {libObjPtr}}; + return FieldClass::Shared::createWithoutRef(libObjPtr); } FieldClass::Shared createStringFieldClass() @@ -2069,7 +2069,7 @@ public: const auto libObjPtr = bt_field_class_string_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return FieldClass::Shared {FieldClass {libObjPtr}}; + return FieldClass::Shared::createWithoutRef(libObjPtr); } StaticArrayFieldClass::Shared createStaticArrayFieldClass(const FieldClass& elementFieldClass, @@ -2081,7 +2081,7 @@ public: this->libObjPtr(), elementFieldClass.libObjPtr(), length); internal::validateCreatedObjPtr(libObjPtr); - return StaticArrayFieldClass::Shared {StaticArrayFieldClass {libObjPtr}}; + return StaticArrayFieldClass::Shared::createWithoutRef(libObjPtr); } ArrayFieldClass::Shared createDynamicArrayFieldClass(const FieldClass& elementFieldClass) @@ -2092,7 +2092,7 @@ public: this->libObjPtr(), elementFieldClass.libObjPtr(), nullptr); internal::validateCreatedObjPtr(libObjPtr); - return ArrayFieldClass::Shared {ArrayFieldClass {libObjPtr}}; + return ArrayFieldClass::Shared::createWithoutRef(libObjPtr); } DynamicArrayWithLengthFieldClass::Shared @@ -2105,8 +2105,7 @@ public: this->libObjPtr(), elementFieldClass.libObjPtr(), lengthFieldClass.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return DynamicArrayWithLengthFieldClass::Shared { - DynamicArrayWithLengthFieldClass {libObjPtr}}; + return DynamicArrayWithLengthFieldClass::Shared::createWithoutRef(libObjPtr); } StructureFieldClass::Shared createStructureFieldClass() @@ -2116,7 +2115,7 @@ public: const auto libObjPtr = bt_field_class_structure_create(this->libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return StructureFieldClass::Shared {StructureFieldClass {libObjPtr}}; + return StructureFieldClass::Shared::createWithoutRef(libObjPtr); } OptionFieldClass::Shared createOptionFieldClass(const FieldClass& optionalFieldClass) @@ -2127,7 +2126,7 @@ public: this->libObjPtr(), optionalFieldClass.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return OptionFieldClass::Shared {OptionFieldClass {libObjPtr}}; + return OptionFieldClass::Shared::createWithoutRef(libObjPtr); } OptionWithBoolSelectorFieldClass::Shared @@ -2140,8 +2139,7 @@ public: this->libObjPtr(), optionalFieldClass.libObjPtr(), selectorFieldClass.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return OptionWithBoolSelectorFieldClass::Shared { - OptionWithBoolSelectorFieldClass {libObjPtr}}; + return OptionWithBoolSelectorFieldClass::Shared::createWithoutRef(libObjPtr); } OptionWithUnsignedIntegerSelectorFieldClass::Shared @@ -2156,8 +2154,7 @@ public: ranges.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return OptionWithUnsignedIntegerSelectorFieldClass::Shared { - OptionWithUnsignedIntegerSelectorFieldClass {libObjPtr}}; + return OptionWithUnsignedIntegerSelectorFieldClass::Shared::createWithoutRef(libObjPtr); } OptionWithSignedIntegerSelectorFieldClass::Shared @@ -2172,8 +2169,7 @@ public: ranges.libObjPtr()); internal::validateCreatedObjPtr(libObjPtr); - return OptionWithSignedIntegerSelectorFieldClass::Shared { - OptionWithSignedIntegerSelectorFieldClass {libObjPtr}}; + return OptionWithSignedIntegerSelectorFieldClass::Shared::createWithoutRef(libObjPtr); } VariantWithoutSelectorFieldClass::Shared createVariantFieldClass() @@ -2183,24 +2179,23 @@ public: const auto libObjPtr = bt_field_class_variant_create(this->libObjPtr(), nullptr); internal::validateCreatedObjPtr(libObjPtr); - return VariantWithoutSelectorFieldClass::Shared { - VariantWithoutSelectorFieldClass {libObjPtr}}; + return VariantWithoutSelectorFieldClass::Shared::createWithoutRef(libObjPtr); } VariantWithUnsignedIntegerSelectorFieldClass::Shared createVariantWithUnsignedIntegerSelectorFieldClass(const IntegerFieldClass& selectorFieldClass) { - return VariantWithUnsignedIntegerSelectorFieldClass::Shared { - VariantWithUnsignedIntegerSelectorFieldClass { - this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)}}; + return VariantWithUnsignedIntegerSelectorFieldClass { + this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)} + .shared(); } VariantWithSignedIntegerSelectorFieldClass::Shared createVariantWithSignedIntegerSelectorFieldClass(const IntegerFieldClass& selectorFieldClass) { - return VariantWithSignedIntegerSelectorFieldClass::Shared { - VariantWithSignedIntegerSelectorFieldClass { - this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)}}; + return VariantWithSignedIntegerSelectorFieldClass { + this->_createVariantWithIntegerSelectorFieldClass(selectorFieldClass)} + .shared(); } void assignsAutomaticStreamClassId(const bool val) noexcept @@ -2274,7 +2269,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } private: diff --git a/src/cpp-common/bt2/value.hpp b/src/cpp-common/bt2/value.hpp index e9b61b13..5f265236 100644 --- a/src/cpp-common/bt2/value.hpp +++ b/src/cpp-common/bt2/value.hpp @@ -209,7 +209,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } CommonNullValue asNull() const noexcept; @@ -278,7 +278,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -331,7 +331,7 @@ public: const auto libObjPtr = bt_value_bool_create_init(static_cast(rawVal)); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonBoolValue {libObjPtr}}; + return CommonBoolValue::Shared::createWithoutRef(libObjPtr); } template @@ -361,7 +361,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -410,7 +410,7 @@ public: const auto libObjPtr = bt_value_integer_unsigned_create_init(rawVal); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonUnsignedIntegerValue {libObjPtr}}; + return CommonUnsignedIntegerValue::Shared::createWithoutRef(libObjPtr); } template @@ -447,7 +447,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -496,7 +496,7 @@ public: const auto libObjPtr = bt_value_integer_signed_create_init(rawVal); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonSignedIntegerValue {libObjPtr}}; + return CommonSignedIntegerValue::Shared::createWithoutRef(libObjPtr); } template @@ -533,7 +533,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -581,7 +581,7 @@ public: const auto libObjPtr = bt_value_real_create_init(rawVal); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonRealValue {libObjPtr}}; + return CommonRealValue::Shared::createWithoutRef(libObjPtr); } template @@ -616,7 +616,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -663,12 +663,12 @@ public: const auto libObjPtr = bt_value_string_create_init(rawVal); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonStringValue {libObjPtr}}; + return CommonStringValue::Shared::createWithoutRef(libObjPtr); } static Shared create(const std::string& rawVal) { - return CommonStringValue::create(rawVal.data()); + return CommonStringValue::create(rawVal.data()); } template @@ -708,7 +708,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } }; @@ -780,7 +780,7 @@ public: const auto libObjPtr = bt_value_array_create(); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonArrayValue {libObjPtr}}; + return CommonArrayValue::Shared::createWithoutRef(libObjPtr); } template @@ -934,7 +934,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } private: @@ -1090,7 +1090,7 @@ public: const auto libObjPtr = bt_value_map_create(); internal::validateCreatedObjPtr(libObjPtr); - return Shared {CommonMapValue {libObjPtr}}; + return CommonMapValue::Shared::createWithoutRef(libObjPtr); } template @@ -1273,7 +1273,7 @@ public: Shared shared() const noexcept { - return Shared {*this}; + return Shared::createWithRef(*this); } private: -- 2.34.1