mirror of
https://github.com/matrix-construct/construct
synced 2024-09-29 12:18:54 +02:00
ircd::json::tuple: Avoids PLT entries for complex templates in modules.
This commit is contained in:
parent
47deac63d3
commit
44dce34197
6 changed files with 70 additions and 61 deletions
|
@ -16,7 +16,7 @@ namespace json {
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
inline enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
||||||
at(const tuple &t)
|
at(const tuple &t)
|
||||||
{
|
{
|
||||||
constexpr size_t idx
|
constexpr size_t idx
|
||||||
|
@ -40,7 +40,7 @@ at(const tuple &t)
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
||||||
at(tuple &t)
|
at(tuple &t)
|
||||||
{
|
{
|
||||||
constexpr size_t idx
|
constexpr size_t idx
|
||||||
|
@ -64,7 +64,7 @@ at(tuple &t)
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, name>()> &>
|
inline enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, name>()> &>
|
||||||
at(const tuple &t)
|
at(const tuple &t)
|
||||||
{
|
{
|
||||||
return at<name_hash(name), tuple>(t);
|
return at<name_hash(name), tuple>(t);
|
||||||
|
@ -72,7 +72,7 @@ at(const tuple &t)
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()> &>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()> &>
|
||||||
at(tuple &t)
|
at(tuple &t)
|
||||||
{
|
{
|
||||||
return at<name_hash(name), tuple>(t);
|
return at<name_hash(name), tuple>(t);
|
||||||
|
@ -81,17 +81,17 @@ at(tuple &t)
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
size_t i>
|
size_t i>
|
||||||
typename std::enable_if<i == size<tuple>(), void>::type
|
constexpr typename std::enable_if<i == size<tuple>(), void>::type
|
||||||
at(tuple &t,
|
at(tuple &t,
|
||||||
const string_view &name,
|
const string_view &name,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
noexcept
|
||||||
}
|
{}
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
size_t i = 0>
|
size_t i = 0>
|
||||||
typename std::enable_if<i < size<tuple>(), void>::type
|
inline typename std::enable_if<i < size<tuple>(), void>::type
|
||||||
at(tuple &t,
|
at(tuple &t,
|
||||||
const string_view &name,
|
const string_view &name,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
@ -105,17 +105,17 @@ at(tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
size_t i>
|
size_t i>
|
||||||
typename std::enable_if<i == size<tuple>(), void>::type
|
constexpr typename std::enable_if<i == size<tuple>(), void>::type
|
||||||
at(const tuple &t,
|
at(const tuple &t,
|
||||||
const string_view &name,
|
const string_view &name,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
noexcept
|
||||||
}
|
{}
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
size_t i = 0>
|
size_t i = 0>
|
||||||
typename std::enable_if<i < size<tuple>(), void>::type
|
inline typename std::enable_if<i < size<tuple>(), void>::type
|
||||||
at(const tuple &t,
|
at(const tuple &t,
|
||||||
const string_view &name,
|
const string_view &name,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
@ -128,7 +128,7 @@ at(const tuple &t,
|
||||||
|
|
||||||
template<class R,
|
template<class R,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const R &>
|
inline enable_if_tuple<tuple, const R &>
|
||||||
at(const tuple &t,
|
at(const tuple &t,
|
||||||
const string_view &name)
|
const string_view &name)
|
||||||
{
|
{
|
||||||
|
@ -161,7 +161,7 @@ at(const tuple &t,
|
||||||
|
|
||||||
template<class R,
|
template<class R,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, R &>
|
inline enable_if_tuple<tuple, R &>
|
||||||
at(tuple &t,
|
at(tuple &t,
|
||||||
const string_view &name)
|
const string_view &name)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,23 +17,25 @@ namespace json {
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i == size<tuple>(), void>::type
|
constexpr typename std::enable_if<i == size<tuple>(), void>::type
|
||||||
for_each(const tuple &t,
|
for_each(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i == size<tuple>(), void>::type
|
constexpr typename std::enable_if<i == size<tuple>(), void>::type
|
||||||
for_each(tuple &t,
|
for_each(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<size_t i = 0,
|
template<size_t i = 0,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i < size<tuple>(), void>::type
|
inline typename std::enable_if<i < size<tuple>(), void>::type
|
||||||
for_each(const tuple &t,
|
for_each(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +46,7 @@ for_each(const tuple &t,
|
||||||
template<size_t i = 0,
|
template<size_t i = 0,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i < size<tuple>(), void>::type
|
inline typename std::enable_if<i < size<tuple>(), void>::type
|
||||||
for_each(tuple &t,
|
for_each(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -54,7 +56,7 @@ for_each(tuple &t,
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function>
|
class function>
|
||||||
void
|
inline void
|
||||||
for_each(const tuple &t,
|
for_each(const tuple &t,
|
||||||
const vector_view<const string_view> &mask,
|
const vector_view<const string_view> &mask,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
@ -72,7 +74,7 @@ for_each(const tuple &t,
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function>
|
class function>
|
||||||
void
|
inline void
|
||||||
for_each(tuple &t,
|
for_each(tuple &t,
|
||||||
const vector_view<const string_view> &mask,
|
const vector_view<const string_view> &mask,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
@ -91,23 +93,25 @@ for_each(tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i>
|
ssize_t i>
|
||||||
typename std::enable_if<(i < 0), void>::type
|
constexpr typename std::enable_if<(i < 0), void>::type
|
||||||
rfor_each(const tuple &t,
|
rfor_each(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i>
|
ssize_t i>
|
||||||
typename std::enable_if<(i < 0), void>::type
|
constexpr typename std::enable_if<(i < 0), void>::type
|
||||||
rfor_each(tuple &t,
|
rfor_each(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i = size<tuple>() - 1>
|
ssize_t i = size<tuple>() - 1>
|
||||||
typename std::enable_if<i < tuple_size<tuple>(), void>::type
|
inline typename std::enable_if<i < tuple_size<tuple>(), void>::type
|
||||||
rfor_each(const tuple &t,
|
rfor_each(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -118,7 +122,7 @@ rfor_each(const tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i = size<tuple>() - 1>
|
ssize_t i = size<tuple>() - 1>
|
||||||
typename std::enable_if<i < tuple_size<tuple>(), void>::type
|
inline typename std::enable_if<i < tuple_size<tuple>(), void>::type
|
||||||
rfor_each(tuple &t,
|
rfor_each(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace json {
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
inline enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
||||||
get(const tuple &t)
|
get(const tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -35,7 +35,7 @@ noexcept
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()>>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()>>
|
||||||
get(const tuple &t,
|
get(const tuple &t,
|
||||||
const tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
const tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
||||||
noexcept
|
noexcept
|
||||||
|
@ -55,7 +55,7 @@ noexcept
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
||||||
get(tuple &t)
|
get(tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -74,7 +74,7 @@ noexcept
|
||||||
|
|
||||||
template<size_t hash,
|
template<size_t hash,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, hash>()> &>
|
||||||
get(tuple &t,
|
get(tuple &t,
|
||||||
tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
||||||
noexcept
|
noexcept
|
||||||
|
@ -89,7 +89,7 @@ noexcept
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, name>()> &>
|
inline enable_if_tuple<tuple, const tuple_value_type<tuple, indexof<tuple, name>()> &>
|
||||||
get(const tuple &t)
|
get(const tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -98,7 +98,7 @@ noexcept
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
||||||
get(const tuple &t,
|
get(const tuple &t,
|
||||||
const tuple_value_type<tuple, indexof<tuple, name>()> &def)
|
const tuple_value_type<tuple, indexof<tuple, name>()> &def)
|
||||||
noexcept
|
noexcept
|
||||||
|
@ -108,7 +108,7 @@ noexcept
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
||||||
get(tuple &t)
|
get(tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -117,7 +117,7 @@ noexcept
|
||||||
|
|
||||||
template<const char *const &name,
|
template<const char *const &name,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, indexof<tuple, name>()>>
|
||||||
get(tuple &t,
|
get(tuple &t,
|
||||||
tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
tuple_value_type<tuple, indexof<tuple, hash>()> &def)
|
||||||
noexcept
|
noexcept
|
||||||
|
@ -127,7 +127,7 @@ noexcept
|
||||||
|
|
||||||
template<class R,
|
template<class R,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, R>
|
inline enable_if_tuple<tuple, R>
|
||||||
get(const tuple &t,
|
get(const tuple &t,
|
||||||
const string_view &name,
|
const string_view &name,
|
||||||
R ret)
|
R ret)
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace json {
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
std::is_base_of<json::string, dst>() &&
|
std::is_base_of<json::string, dst>() &&
|
||||||
std::is_convertible<src, ircd::string_view>(),
|
std::is_convertible<src, ircd::string_view>(),
|
||||||
|
@ -29,7 +29,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
!std::is_base_of<json::string, dst>() &&
|
!std::is_base_of<json::string, dst>() &&
|
||||||
std::is_convertible<src, dst>() &&
|
std::is_convertible<src, dst>() &&
|
||||||
|
@ -44,7 +44,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
!std::is_base_of<json::string, dst>() &&
|
!std::is_base_of<json::string, dst>() &&
|
||||||
std::is_convertible<src, dst>() &&
|
std::is_convertible<src, dst>() &&
|
||||||
|
@ -60,7 +60,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
std::is_arithmetic<dst>() &&
|
std::is_arithmetic<dst>() &&
|
||||||
std::is_base_of<std::string_view, typename std::remove_reference<src>::type>() &&
|
std::is_base_of<std::string_view, typename std::remove_reference<src>::type>() &&
|
||||||
|
@ -84,7 +84,7 @@ catch(const bad_lex_cast &e)
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
std::is_arithmetic<dst>() &&
|
std::is_arithmetic<dst>() &&
|
||||||
std::is_base_of<ircd::byte_view<ircd::string_view>, typename std::remove_reference<src>::type>(),
|
std::is_base_of<ircd::byte_view<ircd::string_view>, typename std::remove_reference<src>::type>(),
|
||||||
|
@ -98,7 +98,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
std::is_base_of<std::string_view, dst>() &&
|
std::is_base_of<std::string_view, dst>() &&
|
||||||
std::is_pod<typename std::remove_reference<src>::type>(),
|
std::is_pod<typename std::remove_reference<src>::type>(),
|
||||||
|
@ -111,7 +111,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
ircd::json::is_tuple<dst>() &&
|
ircd::json::is_tuple<dst>() &&
|
||||||
std::is_assignable<dst, src>(),
|
std::is_assignable<dst, src>(),
|
||||||
|
@ -124,7 +124,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
ircd::json::is_tuple<dst>() &&
|
ircd::json::is_tuple<dst>() &&
|
||||||
!std::is_assignable<dst, src>() &&
|
!std::is_assignable<dst, src>() &&
|
||||||
|
@ -138,7 +138,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
inline typename std::enable_if
|
||||||
<
|
<
|
||||||
ircd::json::is_tuple<dst>() &&
|
ircd::json::is_tuple<dst>() &&
|
||||||
!std::is_assignable<dst, src>() &&
|
!std::is_assignable<dst, src>() &&
|
||||||
|
@ -156,7 +156,7 @@ _assign(dst &d,
|
||||||
|
|
||||||
template<class V,
|
template<class V,
|
||||||
class... T>
|
class... T>
|
||||||
tuple<T...> &
|
inline tuple<T...> &
|
||||||
set(tuple<T...> &t,
|
set(tuple<T...> &t,
|
||||||
const string_view &key,
|
const string_view &key,
|
||||||
V&& val)
|
V&& val)
|
||||||
|
@ -182,7 +182,7 @@ catch(const std::exception &e)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class... T>
|
template<class... T>
|
||||||
tuple<T...> &
|
inline tuple<T...> &
|
||||||
set(tuple<T...> &t,
|
set(tuple<T...> &t,
|
||||||
const string_view &key,
|
const string_view &key,
|
||||||
const json::value &value)
|
const json::value &value)
|
||||||
|
|
|
@ -112,14 +112,14 @@ template<class tuple,
|
||||||
using tuple_value_type = typename tuple_element<tuple, i>::value_type;
|
using tuple_value_type = typename tuple_element<tuple, i>::value_type;
|
||||||
|
|
||||||
template<class tuple>
|
template<class tuple>
|
||||||
auto &
|
inline auto &
|
||||||
stdcast(const tuple &o)
|
stdcast(const tuple &o)
|
||||||
{
|
{
|
||||||
return static_cast<const typename tuple::tuple_type &>(o);
|
return static_cast<const typename tuple::tuple_type &>(o);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class tuple>
|
template<class tuple>
|
||||||
auto &
|
inline auto &
|
||||||
stdcast(tuple &o)
|
stdcast(tuple &o)
|
||||||
{
|
{
|
||||||
return static_cast<typename tuple::tuple_type &>(o);
|
return static_cast<typename tuple::tuple_type &>(o);
|
||||||
|
@ -144,7 +144,7 @@ namespace json {
|
||||||
|
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, tuple_value_type<tuple, i> &>
|
inline enable_if_tuple<tuple, tuple_value_type<tuple, i> &>
|
||||||
val(tuple &t)
|
val(tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -153,7 +153,7 @@ noexcept
|
||||||
|
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple>
|
class tuple>
|
||||||
enable_if_tuple<tuple, const tuple_value_type<tuple, i> &>
|
inline enable_if_tuple<tuple, const tuple_value_type<tuple, i> &>
|
||||||
val(const tuple &t)
|
val(const tuple &t)
|
||||||
noexcept
|
noexcept
|
||||||
{
|
{
|
||||||
|
@ -304,7 +304,7 @@ const noexcept
|
||||||
template<class... T>
|
template<class... T>
|
||||||
template<class R,
|
template<class R,
|
||||||
class name>
|
class name>
|
||||||
R
|
inline R
|
||||||
tuple<T...>::get(name&& n,
|
tuple<T...>::get(name&& n,
|
||||||
R ret)
|
R ret)
|
||||||
const noexcept
|
const noexcept
|
||||||
|
@ -315,7 +315,7 @@ const noexcept
|
||||||
template<class... T>
|
template<class... T>
|
||||||
template<class R,
|
template<class R,
|
||||||
class name>
|
class name>
|
||||||
const R &
|
inline const R &
|
||||||
tuple<T...>::at(name&& n)
|
tuple<T...>::at(name&& n)
|
||||||
const
|
const
|
||||||
{
|
{
|
||||||
|
@ -325,7 +325,7 @@ const
|
||||||
template<class... T>
|
template<class... T>
|
||||||
template<class R,
|
template<class R,
|
||||||
class name>
|
class name>
|
||||||
R &
|
inline R &
|
||||||
tuple<T...>::at(name&& n)
|
tuple<T...>::at(name&& n)
|
||||||
{
|
{
|
||||||
return json::at<R>(*this, n);
|
return json::at<R>(*this, n);
|
||||||
|
|
|
@ -17,9 +17,10 @@ namespace json {
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i == size<tuple>(), bool>::type
|
constexpr typename std::enable_if<i == size<tuple>(), bool>::type
|
||||||
until(const tuple &t,
|
until(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -27,9 +28,10 @@ until(const tuple &t,
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i == size<tuple>(), bool>::type
|
constexpr typename std::enable_if<i == size<tuple>(), bool>::type
|
||||||
until(tuple &t,
|
until(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +39,7 @@ until(tuple &t,
|
||||||
template<size_t i = 0,
|
template<size_t i = 0,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i < size<tuple>(), bool>::type
|
inline typename std::enable_if<i < size<tuple>(), bool>::type
|
||||||
until(const tuple &t,
|
until(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -49,7 +51,7 @@ until(const tuple &t,
|
||||||
template<size_t i = 0,
|
template<size_t i = 0,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i < size<tuple>(), bool>::type
|
inline typename std::enable_if<i < size<tuple>(), bool>::type
|
||||||
until(tuple &t,
|
until(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -61,10 +63,11 @@ until(tuple &t,
|
||||||
template<size_t i,
|
template<size_t i,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i == size<tuple>(), bool>::type
|
constexpr typename std::enable_if<i == size<tuple>(), bool>::type
|
||||||
until(const tuple &a,
|
until(const tuple &a,
|
||||||
const tuple &b,
|
const tuple &b,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -72,7 +75,7 @@ until(const tuple &a,
|
||||||
template<size_t i = 0,
|
template<size_t i = 0,
|
||||||
class tuple,
|
class tuple,
|
||||||
class function>
|
class function>
|
||||||
typename std::enable_if<i < size<tuple>(), bool>::type
|
inline typename std::enable_if<i < size<tuple>(), bool>::type
|
||||||
until(const tuple &a,
|
until(const tuple &a,
|
||||||
const tuple &b,
|
const tuple &b,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
@ -85,9 +88,10 @@ until(const tuple &a,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i>
|
ssize_t i>
|
||||||
typename std::enable_if<(i < 0), bool>::type
|
constexpr typename std::enable_if<(i < 0), bool>::type
|
||||||
runtil(const tuple &t,
|
runtil(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -95,9 +99,10 @@ runtil(const tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i>
|
ssize_t i>
|
||||||
typename std::enable_if<(i < 0), bool>::type
|
constexpr typename std::enable_if<(i < 0), bool>::type
|
||||||
runtil(tuple &t,
|
runtil(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
|
noexcept
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +110,7 @@ runtil(tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i = size<tuple>() - 1>
|
ssize_t i = size<tuple>() - 1>
|
||||||
typename std::enable_if<i < size<tuple>(), bool>::type
|
inline typename std::enable_if<i < size<tuple>(), bool>::type
|
||||||
runtil(const tuple &t,
|
runtil(const tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
@ -117,7 +122,7 @@ runtil(const tuple &t,
|
||||||
template<class tuple,
|
template<class tuple,
|
||||||
class function,
|
class function,
|
||||||
ssize_t i = size<tuple>() - 1>
|
ssize_t i = size<tuple>() - 1>
|
||||||
typename std::enable_if<i < size<tuple>(), bool>::type
|
inline typename std::enable_if<i < size<tuple>(), bool>::type
|
||||||
runtil(tuple &t,
|
runtil(tuple &t,
|
||||||
function&& f)
|
function&& f)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue