Skip to content

Commit

Permalink
sjparser: remove (s_)union.h and corresponding test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
mmd-osm committed Jul 6, 2024
1 parent 8d06054 commit 56a0484
Show file tree
Hide file tree
Showing 43 changed files with 92 additions and 3,328 deletions.
2 changes: 2 additions & 0 deletions contrib/sjparser/README.contrib
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,7 @@ List of changes to sjparser:
* if key appears multiple times, last one wins
* Include error location in error message
* Typo fixes
* Removed union.h and s_union.h, as well as standalone/embedded (s_)union test cases



4 changes: 1 addition & 3 deletions contrib/sjparser/library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ set_property(TARGET sjparser PROPERTY SJPARSER_HEADERS
sjparser/array.h
sjparser/yajl_parser.h
sjparser/s_auto_object.h
sjparser/s_union.h
sjparser/parser.h
sjparser/union.h
sjparser/member.h
sjparser/options.h

Expand All @@ -46,7 +44,7 @@ setup_compilation_options(sjparser)

target_link_libraries(sjparser PUBLIC ${YAJL_LIB})

target_include_directories(sjparser PUBLIC
target_include_directories(sjparser PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:include>
)
Expand Down
2 changes: 0 additions & 2 deletions contrib/sjparser/library/documentation/Doxyfile.in
Original file line number Diff line number Diff line change
Expand Up @@ -802,9 +802,7 @@ INPUT = @SJPARSER_SOURCE_DIR@/sjparser/s_custom_object.h \
@SJPARSER_SOURCE_DIR@/sjparser/array.h \
@SJPARSER_SOURCE_DIR@/sjparser/yajl_parser.h \
@SJPARSER_SOURCE_DIR@/sjparser/s_auto_object.h \
@SJPARSER_SOURCE_DIR@/sjparser/s_union.h \
@SJPARSER_SOURCE_DIR@/sjparser/parser.h \
@SJPARSER_SOURCE_DIR@/sjparser/union.h \
@SJPARSER_SOURCE_DIR@/sjparser/member.h \
@SJPARSER_SOURCE_DIR@/sjparser/options.h \
@CUT_README@
Expand Down
10 changes: 5 additions & 5 deletions contrib/sjparser/library/sjparser/array.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#pragma once

#include "internals/array_parser.h"

#include <functional>

#include "internals/array_parser.h"

namespace SJParser {

/** @brief %Array parser.
Expand Down Expand Up @@ -103,11 +103,11 @@ template <typename ParserT> class Array : public ArrayParser {
Callback _on_finish;
};

template <typename ParserT> Array(Array<ParserT> &&)->Array<Array<ParserT>>;
template <typename ParserT> Array(Array<ParserT> &&) -> Array<Array<ParserT>>;

template <typename ParserT> Array(Array<ParserT> &)->Array<Array<ParserT> &>;
template <typename ParserT> Array(Array<ParserT> &) -> Array<Array<ParserT> &>;

template <typename ParserT> Array(ParserT &&)->Array<ParserT>;
template <typename ParserT> Array(ParserT &&) -> Array<ParserT>;

/****************************** Implementations *******************************/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************************/

#include "array_parser.h"

#include "dispatcher.h"

namespace SJParser {
Expand Down
1 change: 1 addition & 0 deletions contrib/sjparser/library/sjparser/internals/dispatcher.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************************/

#include "dispatcher.h"

#include "token_parser.h"

namespace SJParser {
Expand Down
4 changes: 2 additions & 2 deletions contrib/sjparser/library/sjparser/internals/dispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#pragma once

#include "token_parser.h"

#include <deque>
#include <functional>
#include <string>

#include "token_parser.h"

namespace SJParser {

class Dispatcher {
Expand Down
4 changes: 2 additions & 2 deletions contrib/sjparser/library/sjparser/internals/ignore.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#pragma once

#include "token_parser.h"

#include <list>

#include "token_parser.h"

namespace SJParser {

class Ignore : public TokenParser {
Expand Down
36 changes: 10 additions & 26 deletions contrib/sjparser/library/sjparser/internals/key_value_parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ class KeyValueParser : public TokenParser {
template <std::size_t n>
static constexpr bool has_value_type = IsStorageParser<ParserType<n>>;

using ParsersArrayType = std::array<TokenParser *, sizeof...(ParserTs)>;
using ParsersMapType = std::unordered_map<InternalNameType, TokenParser *>;

// Returns ValueType<n> if it is available, otherwise ParserType<n>
Expand Down Expand Up @@ -113,23 +112,21 @@ class KeyValueParser : public TokenParser {
MemberParsers(MemberParsers &&other) noexcept = default;
MemberParsers &operator=(MemberParsers &&other) noexcept = default;

MemberParsers(ParsersArrayType &parsers_array, ParsersMapType &parsers_map,
MemberParsers(ParsersMapType &parsers_map,
std::tuple<Member<NameT, ParserTs>...> &members)
: mbr_parsers(to_member_parser_tuple(members)) {
registerParsers(parsers_array, parsers_map);
registerParsers(parsers_map);
}

template <size_t n> [[nodiscard]] auto &get() {
return std::get<n>(mbr_parsers);
}

void registerParsers(ParsersArrayType &parsers_array,
ParsersMapType &parsers_map);
void registerParsers(ParsersMapType &parsers_map);

private:
template <typename ParserT>
void registerParser(ParserT &parser, NameT &name, int i,
ParsersArrayType &parsers_array,
void registerParser(ParserT &parser, NameT &name,
ParsersMapType &parsers_map);

void check_duplicate(bool inserted, NameT &name);
Expand All @@ -146,12 +143,10 @@ class KeyValueParser : public TokenParser {
std::tuple<MemberParser<ParserTs>...> mbr_parsers;
};

[[nodiscard]] auto &parsersArray();
[[nodiscard]] auto &parsersMap();
[[nodiscard]] auto &memberParsers();

private:
ParsersArrayType _parsers_array;
ParsersMapType _parsers_map;
MemberParsers _member_parsers;
Ignore _ignore_parser;
Expand All @@ -163,8 +158,7 @@ class KeyValueParser : public TokenParser {
template <typename NameT, typename... ParserTs>
KeyValueParser<NameT, ParserTs...>::KeyValueParser(
std::tuple<Member<NameT, ParserTs>...> members, ObjectOptions options)
: _member_parsers(_parsers_array, _parsers_map, members),
_options{options} {}
: _member_parsers(_parsers_map, members), _options{options} {}

template <typename NameT, typename... ParserTs>
KeyValueParser<NameT, ParserTs...>::KeyValueParser(
Expand All @@ -173,7 +167,7 @@ KeyValueParser<NameT, ParserTs...>::KeyValueParser(
_member_parsers{std::move(other._member_parsers)},
_ignore_parser{std::move(other._ignore_parser)},
_options{other._options} {
_member_parsers.registerParsers(_parsers_array, _parsers_map);
_member_parsers.registerParsers(_parsers_map);
}

template <typename NameT, typename... ParserTs>
Expand All @@ -182,7 +176,7 @@ KeyValueParser<NameT, ParserTs...>::operator=(KeyValueParser &&other) noexcept {
TokenParser::operator=(std::move(other));
_member_parsers = std::move(other._member_parsers);
_parsers_map.clear();
_member_parsers.registerParsers(_parsers_array, _parsers_map);
_member_parsers.registerParsers(_parsers_map);
_ignore_parser = std::move(other._ignore_parser);
_options = std::move(other._options);

Expand Down Expand Up @@ -282,11 +276,6 @@ KeyValueParser<NameT, ParserTs...>::pop() {
return std::move(member.parser.pop());
}

template <typename NameT, typename... ParserTs>
auto &KeyValueParser<NameT, ParserTs...>::parsersArray() {
return _parsers_array;
}

template <typename NameT, typename... ParserTs>
auto &KeyValueParser<NameT, ParserTs...>::parsersMap() {
return _parsers_map;
Expand All @@ -299,25 +288,20 @@ auto &KeyValueParser<NameT, ParserTs...>::memberParsers() {

template <typename NameT, typename... ParserTs>
void KeyValueParser<NameT, ParserTs...>::MemberParsers::registerParsers(
ParsersArrayType &parsers_array, ParsersMapType &parsers_map) {
ParsersMapType &parsers_map) {
parsers_map.clear();

std::apply(
[&](auto &&...xs) {
int i = 0;
((registerParser(xs.parser, xs.name, i++, parsers_array, parsers_map)),
...);
((registerParser(xs.parser, xs.name, parsers_map)), ...);
},
mbr_parsers);
}

template <typename NameT, typename... ParserTs>
template <typename ParserT>
void KeyValueParser<NameT, ParserTs...>::MemberParsers::registerParser(
ParserT &parser, NameT &name, int i, ParsersArrayType &parsers_array,
ParsersMapType &parsers_map) {
parsers_array[i] = &parser;

ParserT &parser, NameT &name, ParsersMapType &parsers_map) {
auto [_, inserted] = parsers_map.insert({name, &parser});
std::ignore = _;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************************/

#include "token_parser.h"

#include "dispatcher.h"

namespace SJParser {
Expand Down
10 changes: 5 additions & 5 deletions contrib/sjparser/library/sjparser/map.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#pragma once

#include <functional>

#include "internals/dispatcher.h"
#include "internals/token_parser.h"

#include <functional>

namespace SJParser {

/** @brief %Map parser.
Expand Down Expand Up @@ -145,11 +145,11 @@ template <typename ParserT> class Map : public TokenParser {
Callback _on_finish;
};

template <typename ParserT> Map(Map<ParserT> &&)->Map<Map<ParserT>>;
template <typename ParserT> Map(Map<ParserT> &&) -> Map<Map<ParserT>>;

template <typename ParserT> Map(Map<ParserT> &)->Map<Map<ParserT> &>;
template <typename ParserT> Map(Map<ParserT> &) -> Map<Map<ParserT> &>;

template <typename ParserT> Map(ParserT &&)->Map<ParserT>;
template <typename ParserT> Map(ParserT &&) -> Map<ParserT>;

/****************************** Implementations *******************************/

Expand Down
26 changes: 14 additions & 12 deletions contrib/sjparser/library/sjparser/member.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#pragma once

#include <type_traits>

#include "internals/default_value.h"
#include "internals/traits.h"

Expand Down Expand Up @@ -112,39 +113,40 @@ template <typename NameT, typename ParserT> struct Member {
};

template <typename ParserT>
Member(const char *, ParserT &&)->Member<std::string, ParserT>;
Member(const char *, ParserT &&) -> Member<std::string, ParserT>;

template <typename ParserT> Member(int, ParserT &&)->Member<int64_t, ParserT>;
template <typename ParserT> Member(int, ParserT &&) -> Member<int64_t, ParserT>;

template <typename ParserT> Member(float, ParserT &&)->Member<double, ParserT>;
template <typename ParserT>
Member(float, ParserT &&) -> Member<double, ParserT>;

template <typename NameT, typename ParserT>
Member(NameT, ParserT &&)->Member<NameT, ParserT>;
Member(NameT, ParserT &&) -> Member<NameT, ParserT>;

template <typename ParserT>
Member(const char *, ParserT &&, Presence)->Member<std::string, ParserT>;
Member(const char *, ParserT &&, Presence) -> Member<std::string, ParserT>;

template <typename ParserT>
Member(int, ParserT &&, Presence)->Member<int64_t, ParserT>;
Member(int, ParserT &&, Presence) -> Member<int64_t, ParserT>;

template <typename ParserT>
Member(float, ParserT &&, Presence)->Member<double, ParserT>;
Member(float, ParserT &&, Presence) -> Member<double, ParserT>;

template <typename NameT, typename ParserT>
Member(NameT, ParserT &&, Presence)->Member<NameT, ParserT>;
Member(NameT, ParserT &&, Presence) -> Member<NameT, ParserT>;

template <typename ParserT, typename ValueT>
Member(const char *, ParserT &&, Presence, ValueT)
->Member<std::string, ParserT>;
-> Member<std::string, ParserT>;

template <typename ParserT, typename ValueT>
Member(int, ParserT &&, Presence, ValueT)->Member<int64_t, ParserT>;
Member(int, ParserT &&, Presence, ValueT) -> Member<int64_t, ParserT>;

template <typename ParserT, typename ValueT>
Member(float, ParserT &&, Presence, ValueT)->Member<double, ParserT>;
Member(float, ParserT &&, Presence, ValueT) -> Member<double, ParserT>;

template <typename NameT, typename ParserT, typename ValueT>
Member(NameT, ParserT &&, Presence, ValueT)->Member<NameT, ParserT>;
Member(NameT, ParserT &&, Presence, ValueT) -> Member<NameT, ParserT>;

/****************************** Implementations *******************************/

Expand Down
14 changes: 6 additions & 8 deletions contrib/sjparser/library/sjparser/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

#pragma once

#include "internals/key_value_parser.h"

#include <functional>

#include "internals/key_value_parser.h"

namespace SJParser {

/** @brief %Object parser.
Expand Down Expand Up @@ -156,8 +156,7 @@ class Object : public KeyValueParser<std::string, ParserTs...> {
*
* @return Reference to n-th member parser.
*/
[[nodiscard]] template <size_t n>
ParserType<n> &parser();
[[nodiscard]] template <size_t n> ParserType<n> &parser();

/** @brief Get the member parsed value and unset the member parser.
*
Expand All @@ -171,8 +170,7 @@ class Object : public KeyValueParser<std::string, ParserTs...> {
* @throw std::runtime_error thrown if the member parser value is unset (no
* value was parsed or #pop was called for the member parser).
*/
template <size_t n>
ValueType<n> &&pop();
template <size_t n> ValueType<n> &&pop();
#endif

protected:
Expand Down Expand Up @@ -206,11 +204,11 @@ namespace std {
*/

template <typename... ParserTs>
struct tuple_size<SJParser::Object<ParserTs...>> // NOLINT
struct tuple_size<SJParser::Object<ParserTs...>> // NOLINT
: std::integral_constant<std::size_t, sizeof...(ParserTs)> {};

template <std::size_t n, typename... ParserTs>
struct tuple_element<n, SJParser::Object<ParserTs...>> { // NOLINT
struct tuple_element<n, SJParser::Object<ParserTs...>> { // NOLINT
using type =
decltype(std::declval<SJParser::Object<ParserTs...>>().template get<n>());
};
Expand Down
2 changes: 1 addition & 1 deletion contrib/sjparser/library/sjparser/parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ class Parser : public ImplHolder::type {
ParserT _parser;
};

template <typename ParserT> Parser(ParserT &&)->Parser<ParserT>;
template <typename ParserT> Parser(ParserT &&) -> Parser<ParserT>;

/****************************** Implementations *******************************/

Expand Down
Loading

0 comments on commit 56a0484

Please sign in to comment.