add some 'noexcept's

This commit is contained in:
MihailRis 2024-09-19 12:36:00 +03:00
parent fa3e98e3e4
commit bd176f24e1
2 changed files with 31 additions and 31 deletions

View File

@ -123,7 +123,7 @@ namespace dv {
return *val.object; return *val.object;
} }
size_t value::size() const { size_t value::size() const noexcept {
switch (type) { switch (type) {
case value_type::list: case value_type::list:
return val.list->size(); return val.list->size();

View File

@ -64,17 +64,17 @@ namespace dv {
struct optionalvalue { struct optionalvalue {
value* ptr; value* ptr;
optionalvalue(value* ptr) : ptr(ptr) {} optionalvalue(value* ptr) noexcept : ptr(ptr) {}
inline operator bool() const { inline operator bool() const noexcept {
return ptr != nullptr; return ptr != nullptr;
} }
inline value& operator*() { inline value& operator*() noexcept {
return *ptr; return *ptr;
} }
inline const value& operator*() const { inline const value& operator*() const noexcept {
return *ptr; return *ptr;
} }
@ -118,82 +118,82 @@ namespace dv {
std::shared_ptr<objects::Object> object; std::shared_ptr<objects::Object> object;
std::shared_ptr<objects::List> list; std::shared_ptr<objects::List> list;
std::shared_ptr<objects::Bytes> bytes; std::shared_ptr<objects::Bytes> bytes;
value_u() {} value_u() noexcept {}
~value_u() {} ~value_u() noexcept {}
} val; } val;
inline value& setBoolean(boolean_t v) { inline value& setBoolean(boolean_t v) noexcept {
this->~value(); this->~value();
type = value_type::boolean; type = value_type::boolean;
val.boolean = v; val.boolean = v;
return *this; return *this;
} }
inline value& setInteger(integer_t v) { inline value& setInteger(integer_t v) noexcept {
this->~value(); this->~value();
type = value_type::integer; type = value_type::integer;
val.integer = v; val.integer = v;
return *this; return *this;
} }
inline value& setNumber(number_t v) { inline value& setNumber(number_t v) noexcept {
this->~value(); this->~value();
type = value_type::number; type = value_type::number;
val.number = v; val.number = v;
return *this; return *this;
} }
inline value& setNone() { inline value& setNone() noexcept {
this->~value(); this->~value();
type = value_type::none; type = value_type::none;
return *this; return *this;
} }
inline value& setString(std::string v) { inline value& setString(std::string v) noexcept {
this->~value(); this->~value();
new(&val.string)std::unique_ptr<std::string>( new(&val.string)std::unique_ptr<std::string>(
std::make_unique<std::string>(std::move(v))); std::make_unique<std::string>(std::move(v)));
type = value_type::string; type = value_type::string;
return *this; return *this;
} }
inline value& setString(std::unique_ptr<std::string> v) { inline value& setString(std::unique_ptr<std::string> v) noexcept {
this->~value(); this->~value();
new(&val.string)std::unique_ptr<std::string>(std::move(v)); new(&val.string)std::unique_ptr<std::string>(std::move(v));
type = value_type::string; type = value_type::string;
return *this; return *this;
} }
inline value& setList(std::shared_ptr<objects::List> ptr) { inline value& setList(std::shared_ptr<objects::List> ptr) noexcept {
this->~value(); this->~value();
new(&val.list)std::shared_ptr<objects::List>(std::move(ptr)); new(&val.list)std::shared_ptr<objects::List>(std::move(ptr));
type = value_type::list; type = value_type::list;
return *this; return *this;
} }
inline value& setObject(std::shared_ptr<objects::Object> ptr) { inline value& setObject(std::shared_ptr<objects::Object> ptr) noexcept {
this->~value(); this->~value();
new(&val.object)std::shared_ptr<objects::Object>(std::move(ptr)); new(&val.object)std::shared_ptr<objects::Object>(std::move(ptr));
type = value_type::object; type = value_type::object;
return *this; return *this;
} }
inline value& setBytes(std::shared_ptr<objects::Bytes> ptr) { inline value& setBytes(std::shared_ptr<objects::Bytes> ptr) noexcept {
this->~value(); this->~value();
new(&val.bytes)std::shared_ptr<objects::Bytes>(std::move(ptr)); new(&val.bytes)std::shared_ptr<objects::Bytes>(std::move(ptr));
type = value_type::bytes; type = value_type::bytes;
return *this; return *this;
} }
public: public:
value() : type(value_type::none) {} value() noexcept : type(value_type::none) {}
/// @brief Constructor for fundamental types /// @brief Constructor for fundamental types
template<typename T> template<typename T>
value(T v, std::enable_if_t<std::is_fundamental<T>::value, int> = 0) { value(T v, std::enable_if_t<std::is_fundamental<T>::value, int> = 0) noexcept {
this->operator=(v); this->operator=(v);
} }
value(std::string v) { value(std::string v) noexcept {
this->operator=(std::move(v)); this->operator=(std::move(v));
} }
value(std::shared_ptr<objects::Object> v) { value(std::shared_ptr<objects::Object> v) noexcept {
this->operator=(std::move(v)); this->operator=(std::move(v));
} }
value(std::shared_ptr<objects::List> v) { value(std::shared_ptr<objects::List> v) noexcept {
this->operator=(std::move(v)); this->operator=(std::move(v));
} }
value(std::shared_ptr<objects::Bytes> v) { value(std::shared_ptr<objects::Bytes> v) noexcept {
this->operator=(std::move(v)); this->operator=(std::move(v));
} }
@ -205,7 +205,7 @@ namespace dv {
this->operator=(std::move(v)); this->operator=(std::move(v));
} }
~value() { ~value() noexcept {
switch (type) { switch (type) {
case value_type::object: case value_type::object:
val.object.reset(); val.object.reset();
@ -478,28 +478,28 @@ namespace dv {
bool has(const key_t& k) const; bool has(const key_t& k) const;
size_t size() const; size_t size() const noexcept;
size_t length() const { size_t length() const noexcept {
return size(); return size();
} }
inline bool empty() const { inline bool empty() const noexcept {
return size() == 0; return size() == 0;
} }
inline bool isString() const { inline bool isString() const noexcept {
return type == value_type::string; return type == value_type::string;
} }
inline bool isObject() const { inline bool isObject() const noexcept {
return type == value_type::object; return type == value_type::object;
} }
inline bool isList() const { inline bool isList() const noexcept {
return type == value_type::list; return type == value_type::list;
} }
inline bool isInteger() const { inline bool isInteger() const noexcept {
return type == value_type::integer; return type == value_type::integer;
} }
inline bool isNumber() const { inline bool isNumber() const noexcept {
return type == value_type::number; return type == value_type::number;
} }
}; };