X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=src%2Fcpp-common%2Fbt2%2Ffield.hpp;h=e051a806e4ab2ca1104bcbf42e2d24e93db78e2b;hb=7b3d2ca62ba9d0f2e619935bbd855646dd71bc37;hp=2c40ae3307a46a3420faa29e20c184606eb32e0f;hpb=ca61ecbc0d9d2d64cc3b6a02d118e4ee87477cf6;p=babeltrace.git diff --git a/src/cpp-common/bt2/field.hpp b/src/cpp-common/bt2/field.hpp index 2c40ae33..e051a806 100644 --- a/src/cpp-common/bt2/field.hpp +++ b/src/cpp-common/bt2/field.hpp @@ -13,6 +13,7 @@ #include #include "common/assert.h" +#include "cpp-common/bt2c/c-string-view.hpp" #include "borrowed-object.hpp" #include "field-class.hpp" @@ -597,7 +598,7 @@ public: 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]; } @@ -932,7 +933,7 @@ private: public: using typename CommonField::LibObjPtr; - using Value = const char *; + using Value = bt2c::CStringView; explicit CommonStringField(const LibObjPtr libObjPtr) noexcept : _ThisCommonField {libObjPtr} { @@ -956,29 +957,24 @@ public: return CommonStringField {*this}; } - RawStringValueProxy operator*() const noexcept + RawValueProxy operator*() const noexcept { - return RawStringValueProxy {*this}; + return RawValueProxy {*this}; } - void value(const char * const val) const + void value(const Value val) const { static_assert(!std::is_const::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::value, "Not available with `bt2::ConstStringField`."); @@ -990,6 +986,11 @@ public: } } + 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()); @@ -1003,10 +1004,15 @@ public: 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; @@ -1117,15 +1123,11 @@ public: return CommonField {_Spec::memberFieldByIndex(this->libObjPtr(), index)}; } - OptionalBorrowedObject> operator[](const char * const name) const noexcept + OptionalBorrowedObject> + operator[](const bt2c::CStringView name) const noexcept { return _Spec::memberFieldByName(this->libObjPtr(), name); } - - OptionalBorrowedObject> operator[](const std::string& name) const noexcept - { - return (*this)[name.data()]; - } }; using StructureField = CommonStructureField;