#include "common/assert.h"
#include "common/common.h"
+#include "cpp-common/bt2c/c-string-view.hpp"
#include "borrowed-object-iterator.hpp"
#include "borrowed-object.hpp"
CommonValueRawValueProxy& operator=(std::uint64_t rawVal) noexcept;
CommonValueRawValueProxy& operator=(double rawVal) noexcept;
CommonValueRawValueProxy& operator=(const char *rawVal);
- CommonValueRawValueProxy& operator=(const std::string& rawVal);
+ CommonValueRawValueProxy& operator=(bt2c::CStringView rawVal);
operator bool() const noexcept;
operator std::int64_t() const noexcept;
operator std::uint64_t() const noexcept;
operator double() const noexcept;
- operator const char *() const noexcept;
+ operator bt2c::CStringView() const noexcept;
private:
ValueObjT _mObj;
this->asMap().insert(std::forward<KeyT>(key), std::forward<ValT>(val));
}
- CommonArrayValue<bt_value> insertEmptyArray(const char *key) const;
- CommonArrayValue<bt_value> insertEmptyArray(const std::string& key) const;
- CommonMapValue<bt_value> insertEmptyMap(const char *key) const;
- CommonMapValue<bt_value> insertEmptyMap(const std::string& key) const;
+ CommonArrayValue<bt_value> insertEmptyArray(bt2c::CStringView key) const;
+ CommonMapValue<bt_value> insertEmptyMap(bt2c::CStringView key) const;
Shared shared() const noexcept
{
template <typename ValueObjT>
CommonValueRawValueProxy<ValueObjT>&
-CommonValueRawValueProxy<ValueObjT>::operator=(const std::string& rawVal)
+CommonValueRawValueProxy<ValueObjT>::operator=(const bt2c::CStringView rawVal)
{
- return *this = rawVal.data();
+ _mObj.asString().value(rawVal);
+ return *this;
}
template <typename ValueObjT>
}
template <typename ValueObjT>
-CommonValueRawValueProxy<ValueObjT>::operator const char *() const noexcept
+CommonValueRawValueProxy<ValueObjT>::operator bt2c::CStringView() const noexcept
{
return _mObj.asString().value();
}
public:
using typename CommonValue<LibObjT>::LibObjPtr;
using Shared = SharedValue<CommonStringValue<LibObjT>, LibObjT>;
- using Value = const char *;
+ using Value = bt2c::CStringView;
explicit CommonStringValue(const LibObjPtr libObjPtr) noexcept : _ThisCommonValue {libObjPtr}
{
BT_ASSERT_DBG(this->isString());
}
- static Shared create(const char * const rawVal = "")
+ static Shared create(const bt2c::CStringView rawVal = "")
{
const auto libObjPtr = bt_value_string_create_init(rawVal);
return CommonStringValue::Shared::createWithoutRef(libObjPtr);
}
- static Shared create(const std::string& rawVal)
- {
- return CommonStringValue::create(rawVal.data());
- }
-
template <typename OtherLibObjT>
CommonStringValue(const CommonStringValue<OtherLibObjT> val) noexcept : _ThisCommonValue {val}
{
return CommonStringValue<const bt_value> {*this};
}
- RawStringValueProxy<CommonStringValue> operator*() const noexcept
+ RawValueProxy<CommonStringValue> operator*() const noexcept
{
- return RawStringValueProxy<CommonStringValue> {*this};
+ return RawValueProxy<CommonStringValue> {*this};
}
void value(const Value val) const
static_assert(!std::is_const<LibObjT>::value,
"Not available with `bt2::ConstStringValue`.");
- const auto status = bt_value_string_set(this->libObjPtr(), val);
+ const auto status = bt_value_string_set(this->libObjPtr(), *val);
if (status == BT_VALUE_STRING_SET_STATUS_MEMORY_ERROR) {
throw MemoryError {};
}
}
- void value(const std::string& val) const
- {
- this->value(val.data());
- }
-
- const char *value() const noexcept
+ Value value() const noexcept
{
return bt_value_string_get(this->libObjPtr());
}
this->_handleAppendLibStatus(status);
}
- void append(const std::string& rawVal) const
+ void append(const bt2c::CStringView rawVal) const
{
this->append(rawVal.data());
}
this->append(rawVal);
}
- void operator+=(const std::string& rawVal) const
+ void operator+=(const bt2c::CStringView rawVal) const
{
this->append(rawVal);
}
* First argument is the entry's key, second is its value.
*/
template <typename ObjT>
-using CommonMapValueForEachUserFunc = std::function<void(const char *, ObjT)>;
+using CommonMapValueForEachUserFunc = std::function<void(bt2c::CStringView, ObjT)>;
/*
* Template of a function to be passed to bt_value_map_foreach_entry()
* `CommonMapValueForEachUserFunc<ObjT>` (the user function to call).
*
* This function catches any exception which the user function throws
- * and returns the `ErrorStatus` value. If there's no execption, this
+ * and returns the `ErrorStatus` value. If there's no exception, this
* function returns the `OkStatus` value.
*/
template <typename ObjT, typename LibObjT, typename LibStatusT, int OkStatus, int ErrorStatus>
return this->length() == 0;
}
- OptionalBorrowedObject<CommonValue<LibObjT>> operator[](const char * const key) const noexcept
+ OptionalBorrowedObject<CommonValue<LibObjT>>
+ operator[](const bt2c::CStringView key) const noexcept
{
return internal::CommonMapValueSpec<LibObjT>::entryByKey(this->libObjPtr(), key);
}
- OptionalBorrowedObject<CommonValue<LibObjT>> operator[](const std::string& key) const noexcept
- {
- return (*this)[key.data()];
- }
-
- bool hasEntry(const char * const key) const noexcept
+ bool hasEntry(const bt2c::CStringView key) const noexcept
{
return static_cast<bool>(bt_value_map_has_entry(this->libObjPtr(), key));
}
- bool hasEntry(const std::string& key) const noexcept
- {
- return this->hasEntry(key.data());
- }
-
- void insert(const char * const key, const Value val) const
+ void insert(const bt2c::CStringView key, const Value val) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
- void insert(const std::string& key, const Value val) const
- {
- this->insert(key.data(), val);
- }
-
- void insert(const char * const key, const bool rawVal) const
+ void insert(const bt2c::CStringView key, const bool rawVal) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
- void insert(const std::string& key, const bool rawVal) const
- {
- this->insert(key.data(), rawVal);
- }
-
- void insert(const char * const key, const std::uint64_t rawVal) const
+ void insert(const bt2c::CStringView key, const std::uint64_t rawVal) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
-
- void insert(const std::string& key, const std::uint64_t rawVal) const
- {
- this->insert(key.data(), rawVal);
- }
-
- void insert(const char * const key, const std::int64_t rawVal) const
+ void insert(const bt2c::CStringView key, const std::int64_t rawVal) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
- void insert(const std::string& key, const std::int64_t rawVal) const
- {
- this->insert(key.data(), rawVal);
- }
-
- void insert(const char * const key, const double rawVal) const
+ void insert(const bt2c::CStringView key, const double rawVal) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
- void insert(const std::string& key, const double rawVal) const
- {
- this->insert(key.data(), rawVal);
- }
-
- void insert(const char * const key, const char * const rawVal) const
+ void insert(const bt2c::CStringView key, const char *rawVal) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
this->_handleInsertLibStatus(status);
}
- void insert(const char * const key, const std::string& rawVal) const
- {
- this->insert(key, rawVal.data());
- }
-
- void insert(const std::string& key, const char * const rawVal) const
- {
- this->insert(key.data(), rawVal);
- }
-
- void insert(const std::string& key, const std::string& rawVal) const
+ void insert(const bt2c::CStringView key, const bt2c::CStringView rawVal) const
{
- this->insert(key.data(), rawVal.data());
+ return this->insert(key, rawVal.data());
}
- CommonArrayValue<bt_value> insertEmptyArray(const char *key) const;
- CommonArrayValue<bt_value> insertEmptyArray(const std::string& key) const;
- CommonMapValue<bt_value> insertEmptyMap(const char *key) const;
- CommonMapValue<bt_value> insertEmptyMap(const std::string& key) const;
+ CommonArrayValue<bt_value> insertEmptyArray(bt2c::CStringView key) const;
+ CommonMapValue<bt_value> insertEmptyMap(bt2c::CStringView key) const;
void forEach(const internal::CommonMapValueForEachUserFunc<CommonValue<LibObjT>>& func) const
{
}
template <typename LibObjT>
-ArrayValue CommonValue<LibObjT>::insertEmptyArray(const char * const key) const
-{
- return this->asMap().insertEmptyArray(key);
-}
-
-template <typename LibObjT>
-ArrayValue CommonValue<LibObjT>::insertEmptyArray(const std::string& key) const
+ArrayValue CommonValue<LibObjT>::insertEmptyArray(const bt2c::CStringView key) const
{
return this->asMap().insertEmptyArray(key);
}
template <typename LibObjT>
-MapValue CommonValue<LibObjT>::insertEmptyMap(const char * const key) const
-{
- return this->asMap().insertEmptyMap(key);
-}
-
-template <typename LibObjT>
-MapValue CommonValue<LibObjT>::insertEmptyMap(const std::string& key) const
+MapValue CommonValue<LibObjT>::insertEmptyMap(const bt2c::CStringView key) const
{
return this->asMap().insertEmptyMap(key);
}
CommonNullValue<LibObjT> CommonValue<LibObjT>::asNull() const noexcept
{
BT_ASSERT_DBG(this->isNull());
- return CommonNullValue<LibObjT> {this->libObjPtr()};
+ return CommonNullValue<LibObjT> {};
}
template <typename LibObjT>
CommonBoolValue<LibObjT> CommonValue<LibObjT>::asBool() const noexcept
{
- BT_ASSERT_DBG(this->isBool());
return CommonBoolValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonSignedIntegerValue<LibObjT> CommonValue<LibObjT>::asSignedInteger() const noexcept
{
- BT_ASSERT_DBG(this->isSignedInteger());
return CommonSignedIntegerValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonUnsignedIntegerValue<LibObjT> CommonValue<LibObjT>::asUnsignedInteger() const noexcept
{
- BT_ASSERT_DBG(this->isUnsignedInteger());
return CommonUnsignedIntegerValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonRealValue<LibObjT> CommonValue<LibObjT>::asReal() const noexcept
{
- BT_ASSERT_DBG(this->isReal());
return CommonRealValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonStringValue<LibObjT> CommonValue<LibObjT>::asString() const noexcept
{
- BT_ASSERT_DBG(this->isString());
return CommonStringValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonArrayValue<LibObjT> CommonValue<LibObjT>::asArray() const noexcept
{
- BT_ASSERT_DBG(this->isArray());
return CommonArrayValue<LibObjT> {this->libObjPtr()};
}
template <typename LibObjT>
CommonMapValue<LibObjT> CommonValue<LibObjT>::asMap() const noexcept
{
- BT_ASSERT_DBG(this->isMap());
return CommonMapValue<LibObjT> {this->libObjPtr()};
}
}
template <typename LibObjT>
-ArrayValue CommonMapValue<LibObjT>::insertEmptyArray(const char * const key) const
+ArrayValue CommonMapValue<LibObjT>::insertEmptyArray(const bt2c::CStringView key) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
}
template <typename LibObjT>
-ArrayValue CommonMapValue<LibObjT>::insertEmptyArray(const std::string& key) const
-{
- return this->insertEmptyArray(key.data());
-}
-
-template <typename LibObjT>
-MapValue CommonMapValue<LibObjT>::insertEmptyMap(const char * const key) const
+MapValue CommonMapValue<LibObjT>::insertEmptyMap(const bt2c::CStringView key) const
{
static_assert(!std::is_const<LibObjT>::value, "Not available with `bt2::ConstMapValue`.");
return MapValue {libEntryPtr};
}
-template <typename LibObjT>
-MapValue CommonMapValue<LibObjT>::insertEmptyMap(const std::string& key) const
-{
- return this->insertEmptyMap(key.data());
-}
-
inline BoolValue::Shared createValue(const bool rawVal)
{
return BoolValue::create(rawVal);
return StringValue::create(rawVal);
}
-inline StringValue::Shared createValue(const std::string& rawVal)
+inline StringValue::Shared createValue(const bt2c::CStringView rawVal)
{
return StringValue::create(rawVal);
}