Skip to content

Commit e609922

Browse files
committed
sjparser: Remove NthTypes, simplify code
1 parent a3eee6e commit e609922

File tree

6 files changed

+39
-46
lines changed

6 files changed

+39
-46
lines changed

contrib/sjparser/library/sjparser/internals/key_value_parser.h

Lines changed: 31 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -63,41 +63,34 @@ class KeyValueParser : public TokenParser {
6363

6464
void onMember(InternalNameType member);
6565

66-
template <typename... ParserTDs>
67-
struct NthTypes {
68-
using Tuple = std::tuple<ParserTDs...>;
69-
static constexpr auto Size = sizeof...(ParserTDs);
66+
using ParserTupleType = std::tuple<ParserTs...>;
7067

71-
template <std::size_t N>
72-
using Nth = typename std::tuple_element<N, Tuple>::type;
68+
template <std::size_t n>
69+
using Nth = typename std::tuple_element<n, ParserTupleType>::type;
7370

74-
template <std::size_t N>
75-
using ParserType = std::decay_t<Nth<N>>;
71+
template <std::size_t n>
72+
using ParserType = std::decay_t<Nth<n>>;
7673

77-
template <std::size_t N, typename U = ParserType<N>>
78-
using ValueType = typename U::ValueType;
74+
template <std::size_t n, typename U = ParserType<n>>
75+
using ValueType = typename U::ValueType;
7976

80-
template <std::size_t N>
81-
static constexpr bool has_value_type = IsStorageParser<ParserType<N>>;
82-
};
77+
template <std::size_t n>
78+
static constexpr bool has_value_type = IsStorageParser<ParserType<n>>;
8379

84-
template <size_t n>
85-
using ParserType = typename NthTypes<ParserTs...>::template ParserType<n>;
80+
using ParsersArrayType = std::array<TokenParser *, sizeof...(ParserTs)>;
81+
using ParsersMapType = std::unordered_map<InternalNameType, TokenParser *>;
8682

87-
// Returns NthTypes<ParserTs...>::template ValueType<n> if it is
88-
// available, otherwise NthTypes<ParserTs...>::template ParserType<n>
89-
template <size_t n>[[nodiscard]] auto &get();
83+
// Returns ValueType<n> if it is available, otherwise ParserType<n>
84+
template <size_t n>
85+
[[nodiscard]] auto &get();
9086

9187
template <size_t n>
92-
[[nodiscard]] typename NthTypes<ParserTs...>::template ParserType<n> &parser();
88+
[[nodiscard]] ParserType<n> &parser();
9389

9490
template <size_t n>
95-
typename NthTypes<ParserTs...>::template ValueType<n> pop();
91+
ValueType<n> pop();
9692

9793
protected:
98-
using parsers_array_t = std::array<TokenParser *, sizeof...(ParserTs)>;
99-
using parsers_map_t = std::unordered_map<InternalNameType, TokenParser *>;
100-
10194
template <typename ParserT>
10295
struct MemberParser {
10396
MemberParser() = delete;
@@ -125,8 +118,8 @@ class KeyValueParser : public TokenParser {
125118
MemberParsers(MemberParsers&& other) noexcept = default;
126119
MemberParsers& operator=(MemberParsers&& other) noexcept = default;
127120

128-
MemberParsers(parsers_array_t& parsers_array,
129-
parsers_map_t& parsers_map,
121+
MemberParsers(ParsersArrayType& parsers_array,
122+
ParsersMapType& parsers_map,
130123
std::tuple<Member<NameT, ParserTs>...>& members)
131124
: mbr_parsers(to_member_parser_tuple(members)) {
132125
registerParsers(parsers_array, parsers_map);
@@ -137,13 +130,13 @@ class KeyValueParser : public TokenParser {
137130
return std::get<n>(mbr_parsers);
138131
}
139132

140-
void registerParsers(parsers_array_t& parsers_array, parsers_map_t& parsers_map);
133+
void registerParsers(ParsersArrayType& parsers_array, ParsersMapType& parsers_map);
141134

142135
private:
143136
template <typename ParserT>
144137
void registerParser(ParserT& parser, NameT& name, int i,
145-
parsers_array_t& parsers_array,
146-
parsers_map_t& parsers_map);
138+
ParsersArrayType& parsers_array,
139+
ParsersMapType& parsers_map);
147140

148141
void check_duplicate(bool inserted, NameT& name);
149142

@@ -164,8 +157,8 @@ class KeyValueParser : public TokenParser {
164157
[[nodiscard]] auto &memberParsers();
165158

166159
private:
167-
parsers_array_t _parsers_array;
168-
parsers_map_t _parsers_map;
160+
ParsersArrayType _parsers_array;
161+
ParsersMapType _parsers_map;
169162
MemberParsers _member_parsers;
170163
Ignore _ignore_parser;
171164
ObjectOptions _options;
@@ -258,7 +251,7 @@ template <size_t n>
258251
auto &KeyValueParser<NameT, ParserTs...>::get() {
259252
auto &member = _member_parsers.template get<n>();
260253

261-
if constexpr (NthTypes<ParserTs...>::template has_value_type<n>) {
254+
if constexpr (has_value_type<n>) {
262255
if (!member.parser.isSet() && member.default_value.value) {
263256
return static_cast<const typename decltype(
264257
member.default_value.value)::value_type &>(
@@ -273,14 +266,14 @@ auto &KeyValueParser<NameT, ParserTs...>::get() {
273266

274267
template <typename NameT, typename... ParserTs>
275268
template <size_t n>
276-
typename KeyValueParser<NameT, ParserTs...>::template NthTypes<ParserTs...>::template ParserType<n> &
269+
typename KeyValueParser<NameT, ParserTs...>::template ParserType<n> &
277270
KeyValueParser<NameT, ParserTs...>::parser() {
278271
return _member_parsers.template get<n>().parser;
279272
}
280273

281274
template <typename NameT, typename... ParserTs>
282275
template <size_t n>
283-
typename KeyValueParser<NameT, ParserTs...>::template NthTypes<ParserTs...>::template ValueType<n>
276+
typename KeyValueParser<NameT, ParserTs...>::template ValueType<n>
284277
KeyValueParser<NameT, ParserTs...>::pop() {
285278
auto &member = _member_parsers.template get<n>();
286279

@@ -312,8 +305,8 @@ auto &KeyValueParser<NameT, ParserTs...>::memberParsers() {
312305

313306
template <typename NameT, typename... ParserTs>
314307
void KeyValueParser<NameT, ParserTs...>::MemberParsers::registerParsers(
315-
parsers_array_t &parsers_array,
316-
parsers_map_t &parsers_map) {
308+
ParsersArrayType &parsers_array,
309+
ParsersMapType &parsers_map) {
317310

318311
parsers_map.clear();
319312

@@ -330,12 +323,12 @@ template <typename NameT, typename... ParserTs>
330323
template <typename ParserT>
331324
void KeyValueParser< NameT, ParserTs... >::MemberParsers::registerParser(
332325
ParserT &parser, NameT &name, int i,
333-
parsers_array_t &parsers_array,
334-
parsers_map_t &parsers_map) {
326+
ParsersArrayType &parsers_array,
327+
ParsersMapType &parsers_map) {
335328

336329
parsers_array[i] = &parser;
337330

338-
auto [_, inserted] = parsers_map.insert( { name, &parser });
331+
auto [_, inserted] = parsers_map.insert({ name, &parser });
339332
std::ignore = _;
340333

341334
check_duplicate(inserted, name);

contrib/sjparser/library/sjparser/object.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class Object : public KeyValueParser<std::string, ParserTs...> {
157157
* @return Reference to n-th member parser.
158158
*/
159159
[[nodiscard]] template <size_t n>
160-
typename NthTypes<ParserTs...>::template ParserType<n> &parser();
160+
ParserType<n> &parser();
161161

162162
/** @brief Get the member parsed value and unset the member parser.
163163
*
@@ -172,7 +172,7 @@ class Object : public KeyValueParser<std::string, ParserTs...> {
172172
* value was parsed or #pop was called for the member parser).
173173
*/
174174
template <size_t n>
175-
typename NthTypes<ParserTs...>::template ValueType<n> &&pop();
175+
ValueType<n> &&pop();
176176
#endif
177177

178178
protected:

contrib/sjparser/library/sjparser/s_auto_object.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ template <typename... ParserTs> class SAutoObject : public Object<ParserTs...> {
164164
* @return Reference to n-th member parser.
165165
*/
166166
[[nodiscard]] template <size_t n>
167-
typename NthTypes<ParserTs...>::template ParserType<n> &parser();
167+
ParserType<n> &parser();
168168
#endif
169169

170170
private:

contrib/sjparser/library/sjparser/s_custom_object.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class SCustomObject : public Object<ParserTs...> {
176176
* @return Reference to n-th member parser.
177177
*/
178178
[[nodiscard]] template <size_t n>
179-
typename NthTypes<ParserTs...>::template ParserType<n> &parser();
179+
ParserType<n> &parser();
180180
#endif
181181
using Object<ParserTs...>::get;
182182

@@ -202,7 +202,7 @@ class SCustomObject : public Object<ParserTs...> {
202202
* value was parsed or #pop was called for the member parser).
203203
*/
204204
template <size_t n>
205-
typename NthTypes<ParserTs...>::template ValueType<n> &&pop();
205+
ValueType<n> &&pop();
206206
#endif
207207
using Object<ParserTs...>::pop;
208208

contrib/sjparser/library/sjparser/s_union.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ class SUnion : public Union<TypeMemberT, ParserTs...> {
174174
* @return Reference to n-th member parser.
175175
*/
176176
[[nodiscard]] template <size_t n>
177-
typename NthTypes<ParserTs...>::template ParserType<n> &parser();
177+
ParserType<n> &parser();
178178
#endif
179179

180180
/** @brief Get the parsed value and unset the parser.

contrib/sjparser/library/sjparser/union.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ class Union : public KeyValueParser<TypeMemberT, ParserTs...> {
190190
* @return Reference to n-th member parser.
191191
*/
192192
[[nodiscard]] template <size_t n>
193-
typename NthTypes<ParserTs...>::template ParserType<n> &parser();
193+
ParserType<n> &parser();
194194

195195
/** @brief Get the member parsed value and unset the member parser.
196196
*
@@ -204,7 +204,7 @@ class Union : public KeyValueParser<TypeMemberT, ParserTs...> {
204204
* value was parsed or #pop was called for the member parser).
205205
*/
206206
template <size_t n>
207-
typename NthTypes<ParserTs...>::template ValueType<n> &&pop();
207+
ValueType<n> &&pop();
208208
#endif
209209

210210
protected:

0 commit comments

Comments
 (0)