mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 02:02:38 +01:00
ircd::json: Deinline various value related.
This commit is contained in:
parent
bf4da27fc6
commit
93316f4692
2 changed files with 183 additions and 198 deletions
|
@ -137,64 +137,6 @@ ircd::json::value::value()
|
||||||
,floats{false}
|
,floats{false}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const string_view &sv,
|
|
||||||
const enum type &type)
|
|
||||||
:string{sv.data()}
|
|
||||||
,len{sv.size()}
|
|
||||||
,type{type}
|
|
||||||
,serial{type == STRING? surrounds(sv, '"') : true}
|
|
||||||
,alloc{false}
|
|
||||||
,floats{false}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const std::string &s,
|
|
||||||
const enum type &type)
|
|
||||||
:string{nullptr}
|
|
||||||
,len{0}
|
|
||||||
,type{type}
|
|
||||||
,serial{type == STRING? surrounds(s, '"') : true}
|
|
||||||
,alloc{true}
|
|
||||||
,floats{false}
|
|
||||||
{
|
|
||||||
create_string(s.size(), [&s](const mutable_buffer &buf)
|
|
||||||
{
|
|
||||||
copy(buf, string_view{s});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const char *const &str,
|
|
||||||
const enum type &type)
|
|
||||||
:value{string_view{str}, type}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const char *const &str)
|
|
||||||
:value{string_view{str}}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const string_view &sv)
|
|
||||||
:value{sv, json::type(sv, std::nothrow)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const std::string &s)
|
|
||||||
:value{s, json::type(s, std::nothrow)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const json::object &sv)
|
|
||||||
:value{sv, OBJECT}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const json::array &sv)
|
|
||||||
:value{sv, ARRAY}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<size_t N>
|
template<size_t N>
|
||||||
ircd::json::value::value(const char (&str)[N])
|
ircd::json::value::value(const char (&str)[N])
|
||||||
:value{string_view{str, strnlen(str, N)}}
|
:value{string_view{str, strnlen(str, N)}}
|
||||||
|
@ -205,142 +147,3 @@ ircd::json::value::value(const char (&str)[N],
|
||||||
const enum type &type)
|
const enum type &type)
|
||||||
:value{string_view{str, strnlen(str, N)}, type}
|
:value{string_view{str, strnlen(str, N)}, type}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const nullptr_t &)
|
|
||||||
:value
|
|
||||||
{
|
|
||||||
literal_null, type::LITERAL
|
|
||||||
}{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const bool &boolean)
|
|
||||||
:value
|
|
||||||
{
|
|
||||||
boolean? literal_true : literal_false, type::LITERAL
|
|
||||||
}{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const struct value *const &array,
|
|
||||||
const size_t &len)
|
|
||||||
:array{array}
|
|
||||||
,len{len}
|
|
||||||
,type{ARRAY}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{false}
|
|
||||||
,floats{false}
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(std::unique_ptr<const struct value[]> &&array,
|
|
||||||
const size_t &len)
|
|
||||||
:array{array.get()}
|
|
||||||
,len{len}
|
|
||||||
,type{ARRAY}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{true}
|
|
||||||
,floats{false}
|
|
||||||
{
|
|
||||||
array.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const struct member *const &object,
|
|
||||||
const size_t &len)
|
|
||||||
:object{object}
|
|
||||||
,len{len}
|
|
||||||
,type{OBJECT}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{false}
|
|
||||||
,floats{false}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(std::unique_ptr<const struct member[]> &&object,
|
|
||||||
const size_t &len)
|
|
||||||
:object{object.get()}
|
|
||||||
,len{len}
|
|
||||||
,type{OBJECT}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{true}
|
|
||||||
,floats{false}
|
|
||||||
{
|
|
||||||
object.release();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const int64_t &integer)
|
|
||||||
:integer{integer}
|
|
||||||
,len{0}
|
|
||||||
,type{NUMBER}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{false}
|
|
||||||
,floats{false}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const double &floating)
|
|
||||||
:floating{floating}
|
|
||||||
,len{0}
|
|
||||||
,type{NUMBER}
|
|
||||||
,serial{false}
|
|
||||||
,alloc{false}
|
|
||||||
,floats{true}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(value &&other)
|
|
||||||
noexcept
|
|
||||||
:integer{other.integer}
|
|
||||||
,len{other.len}
|
|
||||||
,type{other.type}
|
|
||||||
,serial{other.serial}
|
|
||||||
,alloc{other.alloc}
|
|
||||||
,floats{other.floats}
|
|
||||||
{
|
|
||||||
other.alloc = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ircd::json::value &
|
|
||||||
ircd::json::value::operator=(value &&other)
|
|
||||||
noexcept
|
|
||||||
{
|
|
||||||
this->~value();
|
|
||||||
integer = other.integer;
|
|
||||||
len = other.len;
|
|
||||||
type = other.type;
|
|
||||||
serial = other.serial;
|
|
||||||
alloc = other.alloc;
|
|
||||||
other.alloc = false;
|
|
||||||
floats = other.floats;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool
|
|
||||||
ircd::json::defined(const value &a)
|
|
||||||
{
|
|
||||||
return !a.undefined();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline enum ircd::json::type
|
|
||||||
ircd::json::type(const value &a)
|
|
||||||
{
|
|
||||||
return a.type;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline size_t
|
|
||||||
ircd::json::serialized(const bool &b)
|
|
||||||
{
|
|
||||||
constexpr const size_t t
|
|
||||||
{
|
|
||||||
strlen("true")
|
|
||||||
};
|
|
||||||
|
|
||||||
constexpr const size_t f
|
|
||||||
{
|
|
||||||
strlen("false")
|
|
||||||
};
|
|
||||||
|
|
||||||
return b? t : f;
|
|
||||||
}
|
|
||||||
|
|
184
ircd/json.cc
184
ircd/json.cc
|
@ -1772,10 +1772,165 @@ ircd::json::serialized(const value &v)
|
||||||
throw type_error("deciding the size of a type[%u] is undefined", int(v.type));
|
throw type_error("deciding the size of a type[%u] is undefined", int(v.type));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
ircd::json::serialized(const bool &b)
|
||||||
|
{
|
||||||
|
constexpr const size_t t
|
||||||
|
{
|
||||||
|
strlen("true")
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr const size_t f
|
||||||
|
{
|
||||||
|
strlen("false")
|
||||||
|
};
|
||||||
|
|
||||||
|
return b? t : f;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ircd::json::defined(const value &a)
|
||||||
|
{
|
||||||
|
return !a.undefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ircd::json::type
|
||||||
|
ircd::json::type(const value &a)
|
||||||
|
{
|
||||||
|
return a.type;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// json::value
|
// value::value
|
||||||
//
|
//
|
||||||
|
|
||||||
|
ircd::json::value::value(const string_view &sv,
|
||||||
|
const enum type &type)
|
||||||
|
:string{sv.data()}
|
||||||
|
,len{sv.size()}
|
||||||
|
,type{type}
|
||||||
|
,serial{type == STRING? surrounds(sv, '"') : true}
|
||||||
|
,alloc{false}
|
||||||
|
,floats{false}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const std::string &s,
|
||||||
|
const enum type &type)
|
||||||
|
:string{nullptr}
|
||||||
|
,len{0}
|
||||||
|
,type{type}
|
||||||
|
,serial{type == STRING? surrounds(s, '"') : true}
|
||||||
|
,alloc{true}
|
||||||
|
,floats{false}
|
||||||
|
{
|
||||||
|
const string_view sv{s};
|
||||||
|
create_string(serialized(sv), [&sv]
|
||||||
|
(mutable_buffer buf)
|
||||||
|
{
|
||||||
|
json::stringify(buf, sv);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::json::value::value(const char *const &str,
|
||||||
|
const enum type &type)
|
||||||
|
:value{string_view{str}, type}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const char *const &str)
|
||||||
|
:value{string_view{str}}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const string_view &sv)
|
||||||
|
:value{sv, json::type(sv, std::nothrow)}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const std::string &s)
|
||||||
|
:value{s, json::type(s, std::nothrow)}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const json::object &sv)
|
||||||
|
:value{sv, OBJECT}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const json::array &sv)
|
||||||
|
:value{sv, ARRAY}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const nullptr_t &)
|
||||||
|
:value
|
||||||
|
{
|
||||||
|
literal_null, type::LITERAL
|
||||||
|
}{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const bool &boolean)
|
||||||
|
:value
|
||||||
|
{
|
||||||
|
boolean? literal_true : literal_false, type::LITERAL
|
||||||
|
}{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const struct value *const &array,
|
||||||
|
const size_t &len)
|
||||||
|
:array{array}
|
||||||
|
,len{len}
|
||||||
|
,type{ARRAY}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{false}
|
||||||
|
,floats{false}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::json::value::value(std::unique_ptr<const struct value[]> &&array,
|
||||||
|
const size_t &len)
|
||||||
|
:array{array.get()}
|
||||||
|
,len{len}
|
||||||
|
,type{ARRAY}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{true}
|
||||||
|
,floats{false}
|
||||||
|
{
|
||||||
|
array.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::json::value::value(const struct member *const &object,
|
||||||
|
const size_t &len)
|
||||||
|
:object{object}
|
||||||
|
,len{len}
|
||||||
|
,type{OBJECT}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{false}
|
||||||
|
,floats{false}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(std::unique_ptr<const struct member[]> &&object,
|
||||||
|
const size_t &len)
|
||||||
|
:object{object.get()}
|
||||||
|
,len{len}
|
||||||
|
,type{OBJECT}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{true}
|
||||||
|
,floats{false}
|
||||||
|
{
|
||||||
|
object.release();
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::json::value::value(const int64_t &integer)
|
||||||
|
:integer{integer}
|
||||||
|
,len{0}
|
||||||
|
,type{NUMBER}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{false}
|
||||||
|
,floats{false}
|
||||||
|
{}
|
||||||
|
|
||||||
|
ircd::json::value::value(const double &floating)
|
||||||
|
:floating{floating}
|
||||||
|
,len{0}
|
||||||
|
,type{NUMBER}
|
||||||
|
,serial{false}
|
||||||
|
,alloc{false}
|
||||||
|
,floats{true}
|
||||||
|
{}
|
||||||
|
|
||||||
ircd::json::value::value(const json::members &members)
|
ircd::json::value::value(const json::members &members)
|
||||||
:string{nullptr}
|
:string{nullptr}
|
||||||
,len{serialized(members)}
|
,len{serialized(members)}
|
||||||
|
@ -1856,6 +2011,33 @@ ircd::json::value::value(const value &other)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ircd::json::value::value(value &&other)
|
||||||
|
noexcept
|
||||||
|
:integer{other.integer}
|
||||||
|
,len{other.len}
|
||||||
|
,type{other.type}
|
||||||
|
,serial{other.serial}
|
||||||
|
,alloc{other.alloc}
|
||||||
|
,floats{other.floats}
|
||||||
|
{
|
||||||
|
other.alloc = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::json::value &
|
||||||
|
ircd::json::value::operator=(value &&other)
|
||||||
|
noexcept
|
||||||
|
{
|
||||||
|
this->~value();
|
||||||
|
integer = other.integer;
|
||||||
|
len = other.len;
|
||||||
|
type = other.type;
|
||||||
|
serial = other.serial;
|
||||||
|
alloc = other.alloc;
|
||||||
|
other.alloc = false;
|
||||||
|
floats = other.floats;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
ircd::json::value &
|
ircd::json::value &
|
||||||
ircd::json::value::operator=(const value &other)
|
ircd::json::value::operator=(const value &other)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue