template <typename AnyObjT, typename AnyLibObjT, typename AnyRefFuncsT>
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<ObjT, LibObjT, RefFuncsT>;
+ /*
+ * 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.
*
* See the `friend class SharedObj` comment above.
*/
template <typename OtherObjT, typename OtherLibObjT>
- ThisSharedObj& operator=(const SharedObj<OtherObjT, OtherLibObjT, RefFuncsT>& other) noexcept
+ SharedObj& operator=(const SharedObj<OtherObjT, OtherLibObjT, RefFuncsT>& other) noexcept
{
/* Put current object's reference */
this->_putRef();
* See the `friend class SharedObj` comment above.
*/
template <typename OtherObjT, typename OtherLibObjT>
- ThisSharedObj& operator=(SharedObj<OtherObjT, OtherLibObjT, RefFuncsT>&& other) noexcept
+ SharedObj& operator=(SharedObj<OtherObjT, OtherLibObjT, RefFuncsT>&& other) noexcept
{
/* Put current object's reference */
this->_putRef();
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_packet_create(this->libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return Packet::Shared {Packet {libObjPtr}};
+ return Packet::Shared::createWithoutRef(libObjPtr);
}
CommonStreamClass<const bt_stream_class> cls() const noexcept;
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
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)
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()
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)
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<const bt_trace_class> traceClass() const noexcept;
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_trace_create(this->libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return Trace::Shared {Trace {libObjPtr}};
+ return Trace::Shared::createWithoutRef(libObjPtr);
}
StreamClass::Shared createStreamClass()
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)
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()
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)
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()
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()
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()
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()
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()
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()
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()
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,
this->libObjPtr(), elementFieldClass.libObjPtr(), length);
internal::validateCreatedObjPtr(libObjPtr);
- return StaticArrayFieldClass::Shared {StaticArrayFieldClass {libObjPtr}};
+ return StaticArrayFieldClass::Shared::createWithoutRef(libObjPtr);
}
ArrayFieldClass::Shared createDynamicArrayFieldClass(const FieldClass& elementFieldClass)
this->libObjPtr(), elementFieldClass.libObjPtr(), nullptr);
internal::validateCreatedObjPtr(libObjPtr);
- return ArrayFieldClass::Shared {ArrayFieldClass {libObjPtr}};
+ return ArrayFieldClass::Shared::createWithoutRef(libObjPtr);
}
DynamicArrayWithLengthFieldClass::Shared
this->libObjPtr(), elementFieldClass.libObjPtr(), lengthFieldClass.libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return DynamicArrayWithLengthFieldClass::Shared {
- DynamicArrayWithLengthFieldClass {libObjPtr}};
+ return DynamicArrayWithLengthFieldClass::Shared::createWithoutRef(libObjPtr);
}
StructureFieldClass::Shared createStructureFieldClass()
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)
this->libObjPtr(), optionalFieldClass.libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return OptionFieldClass::Shared {OptionFieldClass {libObjPtr}};
+ return OptionFieldClass::Shared::createWithoutRef(libObjPtr);
}
OptionWithBoolSelectorFieldClass::Shared
this->libObjPtr(), optionalFieldClass.libObjPtr(), selectorFieldClass.libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return OptionWithBoolSelectorFieldClass::Shared {
- OptionWithBoolSelectorFieldClass {libObjPtr}};
+ return OptionWithBoolSelectorFieldClass::Shared::createWithoutRef(libObjPtr);
}
OptionWithUnsignedIntegerSelectorFieldClass::Shared
ranges.libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return OptionWithUnsignedIntegerSelectorFieldClass::Shared {
- OptionWithUnsignedIntegerSelectorFieldClass {libObjPtr}};
+ return OptionWithUnsignedIntegerSelectorFieldClass::Shared::createWithoutRef(libObjPtr);
}
OptionWithSignedIntegerSelectorFieldClass::Shared
ranges.libObjPtr());
internal::validateCreatedObjPtr(libObjPtr);
- return OptionWithSignedIntegerSelectorFieldClass::Shared {
- OptionWithSignedIntegerSelectorFieldClass {libObjPtr}};
+ return OptionWithSignedIntegerSelectorFieldClass::Shared::createWithoutRef(libObjPtr);
}
VariantWithoutSelectorFieldClass::Shared createVariantFieldClass()
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
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
private:
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
CommonNullValue<LibObjT> asNull() const noexcept;
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_bool_create_init(static_cast<bt_bool>(rawVal));
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonBoolValue<LibObjT> {libObjPtr}};
+ return CommonBoolValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_integer_unsigned_create_init(rawVal);
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonUnsignedIntegerValue<LibObjT> {libObjPtr}};
+ return CommonUnsignedIntegerValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_integer_signed_create_init(rawVal);
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonSignedIntegerValue<LibObjT> {libObjPtr}};
+ return CommonSignedIntegerValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_real_create_init(rawVal);
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonRealValue<LibObjT> {libObjPtr}};
+ return CommonRealValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_string_create_init(rawVal);
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonStringValue<LibObjT> {libObjPtr}};
+ return CommonStringValue::Shared::createWithoutRef(libObjPtr);
}
static Shared create(const std::string& rawVal)
{
- return CommonStringValue<LibObjT>::create(rawVal.data());
+ return CommonStringValue::create(rawVal.data());
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
};
const auto libObjPtr = bt_value_array_create();
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonArrayValue<LibObjT> {libObjPtr}};
+ return CommonArrayValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
private:
const auto libObjPtr = bt_value_map_create();
internal::validateCreatedObjPtr(libObjPtr);
- return Shared {CommonMapValue<LibObjT> {libObjPtr}};
+ return CommonMapValue::Shared::createWithoutRef(libObjPtr);
}
template <typename OtherLibObjT>
Shared shared() const noexcept
{
- return Shared {*this};
+ return Shared::createWithRef(*this);
}
private: