mirror of
https://github.com/matrix-construct/construct
synced 2024-10-03 06:08:52 +02:00
ircd::json: Split tuple key() suite.
This commit is contained in:
parent
9d2a796f17
commit
52de335c8f
2 changed files with 53 additions and 34 deletions
52
include/ircd/json/tuple/key.h
Normal file
52
include/ircd/json/tuple/key.h
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
// Matrix Construct
|
||||||
|
//
|
||||||
|
// Copyright (C) Matrix Construct Developers, Authors & Contributors
|
||||||
|
// Copyright (C) 2016-2018 Jason Volk <jason@zemos.net>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice is present in all copies. The
|
||||||
|
// full license for this software is available in the LICENSE file.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#define HAVE_IRCD_JSON_TUPLE_KEY_H
|
||||||
|
|
||||||
|
namespace ircd {
|
||||||
|
namespace json {
|
||||||
|
|
||||||
|
template<class tuple,
|
||||||
|
size_t i>
|
||||||
|
constexpr enable_if_tuple<tuple, const char *const &>
|
||||||
|
key()
|
||||||
|
{
|
||||||
|
return tuple_element<tuple, i>::key;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class tuple,
|
||||||
|
size_t i>
|
||||||
|
constexpr typename std::enable_if<i == tuple::size(), const char *>::type
|
||||||
|
key(const size_t &j)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class tuple,
|
||||||
|
size_t i = 0>
|
||||||
|
constexpr typename std::enable_if<i < tuple::size(), const char *>::type
|
||||||
|
key(const size_t &j)
|
||||||
|
{
|
||||||
|
return j == i?
|
||||||
|
tuple_element<tuple, i>::key:
|
||||||
|
key<tuple, i + 1>(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<size_t i,
|
||||||
|
class tuple>
|
||||||
|
enable_if_tuple<tuple, const char *const &>
|
||||||
|
key(const tuple &t)
|
||||||
|
{
|
||||||
|
return std::get<i>(t).key;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace json
|
||||||
|
} // namespace ircd
|
|
@ -121,43 +121,10 @@ size()
|
||||||
return tuple_size<tuple>::value;
|
return tuple_size<tuple>::value;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class tuple,
|
|
||||||
size_t i>
|
|
||||||
constexpr enable_if_tuple<tuple, const char *const &>
|
|
||||||
key()
|
|
||||||
{
|
|
||||||
return tuple_element<tuple, i>::key;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class tuple,
|
|
||||||
size_t i>
|
|
||||||
constexpr typename std::enable_if<i == tuple::size(), const char *>::type
|
|
||||||
key(const size_t &j)
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class tuple,
|
|
||||||
size_t i = 0>
|
|
||||||
constexpr typename std::enable_if<i < tuple::size(), const char *>::type
|
|
||||||
key(const size_t &j)
|
|
||||||
{
|
|
||||||
return j == i?
|
|
||||||
tuple_element<tuple, i>::key:
|
|
||||||
key<tuple, i + 1>(j);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<size_t i,
|
|
||||||
class tuple>
|
|
||||||
enable_if_tuple<tuple, const char *const &>
|
|
||||||
key(const tuple &t)
|
|
||||||
{
|
|
||||||
return std::get<i>(t).key;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace json
|
} // namespace json
|
||||||
} // namespace ircd
|
} // namespace ircd
|
||||||
|
|
||||||
|
#include "key.h"
|
||||||
#include "indexof.h"
|
#include "indexof.h"
|
||||||
|
|
||||||
namespace ircd {
|
namespace ircd {
|
||||||
|
|
Loading…
Reference in a new issue