0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-26 18:38:52 +02:00

ircd::json: Massage away json::value template ctor.

This commit is contained in:
Jason Volk 2018-02-09 20:09:37 -08:00
parent 063644feaa
commit 0bf053197c
4 changed files with 9 additions and 66 deletions

View file

@ -85,9 +85,11 @@ struct ircd::json::value
explicit operator int64_t() const; explicit operator int64_t() const;
explicit operator std::string() const; ///< NOTE full stringify() of value explicit operator std::string() const; ///< NOTE full stringify() of value
template<class T> explicit value(const T &specialized);
value(const string_view &sv, const enum type &); value(const string_view &sv, const enum type &);
template<size_t N> value(const char (&)[N]); template<size_t N> value(const char (&)[N]);
explicit value(const int64_t &);
explicit value(const double &);
explicit value(const bool &);
value(const char *const &s); value(const char *const &s);
value(const string_view &sv); value(const string_view &sv);
value(const struct member *const &, const size_t &len); value(const struct member *const &, const size_t &len);
@ -117,20 +119,6 @@ struct ircd::json::value
friend std::ostream &operator<<(std::ostream &, const value &); friend std::ostream &operator<<(std::ostream &, const value &);
}; };
namespace ircd::json
{
template<> value::value(const double &floating);
template<> value::value(const uint64_t &integer);
template<> value::value(const int64_t &integer);
template<> value::value(const float &floating);
template<> value::value(const uint32_t &integer);
template<> value::value(const int32_t &integer);
template<> value::value(const uint16_t &integer);
template<> value::value(const int16_t &integer);
template<> value::value(const bool &boolean);
template<> value::value(const std::string &str);
}
static_assert(sizeof(ircd::json::value) == 16, ""); static_assert(sizeof(ircd::json::value) == 16, "");
inline inline
@ -174,24 +162,11 @@ ircd::json::value::value(const char (&str)[N])
,floats{false} ,floats{false}
{} {}
template<> inline
ircd::json::value::value(const std::string &str)
:value{string_view{str}}
{}
inline inline
ircd::json::value::value(const string_view &sv) ircd::json::value::value(const string_view &sv)
:value{sv, json::type(sv, std::nothrow)} :value{sv, json::type(sv, std::nothrow)}
{} {}
template<class T>
ircd::json::value::value(const T &t)
:value{static_cast<string_view>(t)}
{
static_assert(std::is_base_of<ircd::string_view, T>() ||
std::is_convertible<ircd::string_view, T>(), "");
}
inline inline
ircd::json::value::value(const nullptr_t &) ircd::json::value::value(const nullptr_t &)
:value :value
@ -199,7 +174,7 @@ ircd::json::value::value(const nullptr_t &)
literal_null, type::LITERAL literal_null, type::LITERAL
}{} }{}
template<> inline inline
ircd::json::value::value(const bool &boolean) ircd::json::value::value(const bool &boolean)
:value :value
{ {
@ -255,7 +230,7 @@ ircd::json::value::value(std::unique_ptr<const struct member[]> object,
object.release(); object.release();
} }
template<> inline inline
ircd::json::value::value(const int64_t &integer) ircd::json::value::value(const int64_t &integer)
:integer{integer} :integer{integer}
,len{0} ,len{0}
@ -265,7 +240,7 @@ ircd::json::value::value(const int64_t &integer)
,floats{false} ,floats{false}
{} {}
template<> inline inline
ircd::json::value::value(const double &floating) ircd::json::value::value(const double &floating)
:floating{floating} :floating{floating}
,len{0} ,len{0}
@ -275,38 +250,6 @@ ircd::json::value::value(const double &floating)
,floats{true} ,floats{true}
{} {}
template<>
__attribute__((warning("uint64_t narrows to int64_t when used in json::value")))
inline
ircd::json::value::value(const uint64_t &integer)
:value{int64_t(integer)}
{}
template<> inline
ircd::json::value::value(const float &floating)
:value{double(floating)}
{}
template<> inline
ircd::json::value::value(const int32_t &integer)
:value{int64_t(integer)}
{}
template<> inline
ircd::json::value::value(const uint32_t &integer)
:value{int64_t(integer)}
{}
template<> inline
ircd::json::value::value(const int16_t &integer)
:value{int64_t(integer)}
{}
template<> inline
ircd::json::value::value(const uint16_t &integer)
:value{int64_t(integer)}
{}
inline inline
ircd::json::value::value(value &&other) ircd::json::value::value(value &&other)
noexcept noexcept

View file

@ -178,7 +178,7 @@ ircd::m::init_listener(const json::object &conf,
{ {
{ "name", name }, { "name", name },
{ "host", host }, { "host", host },
{ "port", opts.get("port", 8448) }, { "port", opts.get("port", 8448L) },
{ "ssl_certificate_file_pem", conf["tls_certificate_path"] }, { "ssl_certificate_file_pem", conf["tls_certificate_path"] },
{ "ssl_private_key_file_pem", conf["tls_private_key_path"] }, { "ssl_private_key_file_pem", conf["tls_private_key_path"] },
{ "ssl_tmp_dh_file", conf["tls_dh_params_path"] }, { "ssl_tmp_dh_file", conf["tls_dh_params_path"] },

View file

@ -56,7 +56,7 @@ ircd::m::create(const id::room &room_id,
json::iov::set _set[] json::iov::set _set[]
{ {
{ event, { "depth", 1 }}, { event, { "depth", 0L }},
{ event, { "type", "m.room.create" }}, { event, { "type", "m.room.create" }},
{ event, { "state_key", "" }}, { event, { "state_key", "" }},
}; };

View file

@ -107,7 +107,7 @@ void foop()
std::cout << std::cout <<
test(json::strung(json::members test(json::strung(json::members
{ {
{ "one", 1 }, { "one", 1L },
{ "two", "Two" } { "two", "Two" }
})) }))
<< std::endl; << std::endl;