#include <babeltrace2/babeltrace.h>
#include "common/assert.h"
-#include "cpp-common/bt2s/optional.hpp"
+#include "cpp-common/bt2c/c-string-view.hpp"
#include "borrowed-object.hpp"
#include "field-class.hpp"
#include "internal/utils.hpp"
+#include "optional-borrowed-object.hpp"
#include "raw-value-proxy.hpp"
namespace bt2 {
using typename BorrowedObject<LibObjT>::_ThisBorrowedObject;
protected:
- using typename BorrowedObject<LibObjT>::_LibObjPtr;
using _ThisCommonField = CommonField<LibObjT>;
public:
+ using typename BorrowedObject<LibObjT>::LibObjPtr;
using Class = internal::DepFc<LibObjT>;
- explicit CommonField(const _LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr}
+ explicit CommonField(const LibObjPtr libObjPtr) noexcept : _ThisBorrowedObject {libObjPtr}
{
}
class CommonBoolField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Value = bool;
- explicit CommonBoolField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonBoolField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isBool());
}
class CommonBitArrayField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Class = internal::DepType<LibObjT, BitArrayFieldClass, ConstBitArrayFieldClass>;
- explicit CommonBitArrayField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonBitArrayField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isBitArray());
}
using typename CommonField<LibObjT>::_ThisCommonField;
protected:
- using typename CommonField<LibObjT>::_LibObjPtr;
using _ThisCommonUnsignedIntegerField = CommonUnsignedIntegerField<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Value = std::uint64_t;
using Class = internal::DepType<LibObjT, IntegerFieldClass, ConstIntegerFieldClass>;
- explicit CommonUnsignedIntegerField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonUnsignedIntegerField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isUnsignedInteger());
using typename CommonField<LibObjT>::_ThisCommonField;
protected:
- using typename CommonField<LibObjT>::_LibObjPtr;
using _ThisCommonSignedIntegerField = CommonSignedIntegerField<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Value = std::int64_t;
using Class = internal::DepType<LibObjT, IntegerFieldClass, ConstIntegerFieldClass>;
- explicit CommonSignedIntegerField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonSignedIntegerField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isSignedInteger());
return _mLen;
}
- const char *operator[](const std::uint64_t index) const noexcept
+ bt2c::CStringView operator[](const std::uint64_t index) const noexcept
{
return _mLabels[index];
}
{
private:
using typename CommonUnsignedIntegerField<LibObjT>::_ThisCommonUnsignedIntegerField;
- using typename CommonField<LibObjT>::_LibObjPtr;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
+
using Class = internal::DepType<LibObjT, UnsignedEnumerationFieldClass,
ConstUnsignedEnumerationFieldClass>;
- explicit CommonUnsignedEnumerationField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonUnsignedEnumerationField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonUnsignedIntegerField {libObjPtr}
{
BT_ASSERT_DBG(this->isUnsignedEnumeration());
{
private:
using typename CommonSignedIntegerField<LibObjT>::_ThisCommonSignedIntegerField;
- using typename CommonField<LibObjT>::_LibObjPtr;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
+
using Class =
internal::DepType<LibObjT, SignedEnumerationFieldClass, ConstSignedEnumerationFieldClass>;
- explicit CommonSignedEnumerationField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonSignedEnumerationField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonSignedIntegerField {libObjPtr}
{
BT_ASSERT_DBG(this->isSignedEnumeration());
class CommonSinglePrecisionRealField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Value = float;
- explicit CommonSinglePrecisionRealField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonSinglePrecisionRealField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isSinglePrecisionReal());
class CommonDoublePrecisionRealField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Value = double;
- explicit CommonDoublePrecisionRealField(const _LibObjPtr libObjPtr) noexcept :
+ explicit CommonDoublePrecisionRealField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isDoublePrecisionReal());
class CommonStringField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
public:
- using Value = const char *;
+ using typename CommonField<LibObjT>::LibObjPtr;
+ using Value = bt2c::CStringView;
- explicit CommonStringField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonStringField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isString());
}
return CommonStringField<const bt_field> {*this};
}
- RawStringValueProxy<CommonStringField> operator*() const noexcept
+ RawValueProxy<CommonStringField> operator*() const noexcept
{
- return RawStringValueProxy<CommonStringField> {*this};
+ return RawValueProxy<CommonStringField> {*this};
}
- void value(const char * const val) const
+ void value(const Value val) const
{
static_assert(!std::is_const<LibObjT>::value,
"Not available with `bt2::ConstStringField`.");
- const auto status = bt_field_string_set_value(this->libObjPtr(), val);
+ const auto status = bt_field_string_set_value(this->libObjPtr(), *val);
if (status == BT_FIELD_STRING_SET_VALUE_STATUS_MEMORY_ERROR) {
throw MemoryError {};
}
}
- void value(const std::string& val) const
- {
- this->value(val.data());
- }
-
- void append(const char * const begin, const std::uint64_t len) const
+ void append(const bt2c::CStringView begin, const std::uint64_t len) const
{
static_assert(!std::is_const<LibObjT>::value,
"Not available with `bt2::ConstStringField`.");
}
}
+ void append(const bt2c::CStringView val) const
+ {
+ this->append(val, std::strlen(val));
+ }
+
void append(const std::string& val) const
{
this->append(val.data(), val.size());
bt_field_string_clear(this->libObjPtr());
}
- const char *value() const noexcept
+ Value value() const noexcept
{
return bt_field_string_get_value(this->libObjPtr());
}
+
+ std::uint64_t length() const noexcept
+ {
+ return bt_field_string_get_length(this->libObjPtr());
+ }
};
using StringField = CommonStringField<bt_field>;
class CommonStructureField final : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
using _Spec = internal::CommonStructureFieldSpec<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Class = internal::DepType<LibObjT, StructureFieldClass, ConstStructureFieldClass>;
- explicit CommonStructureField(const _LibObjPtr libObjPtr) noexcept :
- _ThisCommonField {libObjPtr}
+ explicit CommonStructureField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isStructure());
}
return CommonField<LibObjT> {_Spec::memberFieldByIndex(this->libObjPtr(), index)};
}
- bt2s::optional<CommonField<LibObjT>> operator[](const char * const name) const noexcept
- {
- const auto libObjPtr = _Spec::memberFieldByName(this->libObjPtr(), name);
-
- if (libObjPtr) {
- return CommonField<LibObjT> {libObjPtr};
- }
-
- return bt2s::nullopt;
- }
-
- bt2s::optional<CommonField<LibObjT>> operator[](const std::string& name) const noexcept
+ OptionalBorrowedObject<CommonField<LibObjT>>
+ operator[](const bt2c::CStringView name) const noexcept
{
- return (*this)[name.data()];
+ return _Spec::memberFieldByName(this->libObjPtr(), name);
}
};
using _Spec = internal::CommonArrayFieldSpec<LibObjT>;
protected:
- using typename CommonField<LibObjT>::_LibObjPtr;
using _ThisCommonArrayField = CommonArrayField<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Class = internal::DepType<LibObjT, ArrayFieldClass, ConstArrayFieldClass>;
- explicit CommonArrayField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonArrayField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isArray());
}
class CommonDynamicArrayField : public CommonArrayField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonArrayField<LibObjT>::_ThisCommonArrayField;
public:
- explicit CommonDynamicArrayField(const _LibObjPtr libObjPtr) noexcept :
+ using typename CommonField<LibObjT>::LibObjPtr;
+
+ explicit CommonDynamicArrayField(const LibObjPtr libObjPtr) noexcept :
_ThisCommonArrayField {libObjPtr}
{
BT_ASSERT_DBG(this->isDynamicArray());
class CommonOptionField : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
using _Spec = internal::CommonOptionFieldSpec<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Class = internal::DepType<LibObjT, OptionFieldClass, ConstOptionFieldClass>;
- explicit CommonOptionField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonOptionField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isOption());
}
return this->field().has_value();
}
- bt2s::optional<CommonField<LibObjT>> field() const noexcept
+ OptionalBorrowedObject<CommonField<LibObjT>> field() const noexcept
{
- const auto libObjPtr = _Spec::field(this->libObjPtr());
-
- if (libObjPtr) {
- return CommonField<LibObjT> {libObjPtr};
- }
-
- return bt2s::nullopt;
+ return _Spec::field(this->libObjPtr());
}
};
class CommonVariantField : public CommonField<LibObjT>
{
private:
- using typename CommonField<LibObjT>::_LibObjPtr;
using typename CommonField<LibObjT>::_ThisCommonField;
using _Spec = internal::CommonVariantFieldSpec<LibObjT>;
public:
+ using typename CommonField<LibObjT>::LibObjPtr;
using Class = internal::DepType<LibObjT, VariantFieldClass, ConstVariantFieldClass>;
- explicit CommonVariantField(const _LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
+ explicit CommonVariantField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr}
{
BT_ASSERT_DBG(this->isVariant());
}