Skip to content

Commit a3cdad2

Browse files
authored
upgrade glaze support (#23)
Co-authored-by: Artur Bać <[email protected]>
1 parent 1ee1da8 commit a3cdad2

File tree

4 files changed

+105
-76
lines changed

4 files changed

+105
-76
lines changed

CMakeLists.txt

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,6 @@ set(CMAKE_CXX_EXTENSIONS OFF)
4242
message(STATUS "simple_enum version v${SIMPLE_ENUM_VERSION}")
4343

4444
include(cmake/get_cpm.cmake)
45-
46-
option(
47-
SIMPLE_ENUM_USE_GLAZE_3_1
48-
"Use Glaze version 3.1"
49-
OFF)
50-
option(
51-
SIMPLE_ENUM_USE_GLAZE_4_0
52-
"Use Glaze version 4.2"
53-
ON)
5445
option(
5546
SIMPLE_ENUM_ENABLE_TESTS
5647
"Enable unit tests"
@@ -60,23 +51,8 @@ option(
6051
"Enable cmake targets"
6152
ON)
6253

63-
if(SIMPLE_ENUM_USE_GLAZE_3_1)
64-
set(GLAZE_GIT_TAG "v3.4.3")
65-
elseif(SIMPLE_ENUM_USE_GLAZE_4_0)
66-
set(GLAZE_GIT_TAG "v4.2.2")
67-
else()
68-
message(FATAL_ERROR "Please select a Glaze version by setting USE_GLAZE_3_1, or SIMPLE_ENUM_USE_GLAZE_4_0")
69-
endif()
70-
7154
add_library(simple_enum INTERFACE)
7255

73-
if(SIMPLE_ENUM_USE_GLAZE_3_1)
74-
target_compile_definitions(simple_enum INTERFACE SIMPLE_ENUM_GLZ_3_1_x)
75-
elseif(SIMPLE_ENUM_USE_GLAZE_4_0)
76-
target_compile_definitions(simple_enum INTERFACE SIMPLE_ENUM_GLZ_3_1_x)
77-
else()
78-
message(FATAL_ERROR "Future, unimplemented")
79-
endif()
8056
target_compile_features(simple_enum INTERFACE cxx_std_23)
8157

8258
if(SIMPLE_ENUM_OPT_IN_STATIC_ASSERTS)
@@ -89,7 +65,7 @@ target_sources(
8965
HEADERS
9066
BASE_DIRS
9167
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
92-
$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>)
68+
$<INSTALL_INTERFACE:include>)
9369

9470
install(
9571
TARGETS simple_enum

include/simple_enum/core.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include <concepts>
77
#include <type_traits>
88

9-
#define SIMPLE_ENUM_NAME_VERSION "0.8.9"
9+
#define SIMPLE_ENUM_NAME_VERSION "0.8.10"
1010

1111
namespace simple_enum::inline v0_8
1212
{

include/simple_enum/glaze_json_enum_name.hpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,30 @@ static constexpr auto enum_values_array = []()
6262
return values;
6363
}();
6464

65+
#ifdef glaze_v4_2_3_tuple
66+
namespace glz_tuple_ns = glz;
67+
#else
68+
namespace glz_tuple_ns = glz::tuplet;
69+
#endif
6570
namespace detail
6671
{
6772

6873
template<typename... Args>
6974
constexpr auto convert_to_glz_enum(std::tuple<Args...> const & stdTuple)
7075
{
7176
return glz::detail::Enum{
72-
std::apply([](auto &&... args) { return glz::tuplet::tuple<std::decay_t<Args>...>{args...}; }, stdTuple)
77+
std::apply([](auto &&... args) { return glz_tuple_ns::tuple<std::decay_t<Args>...>{args...}; }, stdTuple)
7378
};
7479
}
7580

7681
template<typename enumeration_type, std::size_t... ix>
7782
constexpr auto glaze_tuple_pairs(std::index_sequence<ix...>)
7883
{
79-
return std::tuple_cat(std::make_tuple(
80-
detail::enum_name_at_index<enumeration_type>(ix), detail::enum_value_at_index<enumeration_type>(ix)
81-
)...);
84+
return std::tuple_cat(
85+
std::make_tuple(
86+
detail::enum_name_at_index<enumeration_type>(ix), detail::enum_value_at_index<enumeration_type>(ix)
87+
)...
88+
);
8289
}
8390

8491
template<typename enumeration_type>
@@ -135,8 +142,8 @@ struct from_json<enumeration_type>
135142
if(bool(ctx.error)) [[unlikely]]
136143
return;
137144

138-
cxx23::expected<enumeration_type, simple_enum::enum_cast_error> res{simple_enum::enum_cast<enumeration_type>(value)
139-
};
145+
cxx23::expected<enumeration_type, simple_enum::enum_cast_error> res{simple_enum::enum_cast<enumeration_type>(value
146+
)};
140147
if(!res.has_value()) [[unlikely]]
141148
{
142149
ctx.error = error_code::syntax_error;

tests/CMakeLists.txt

Lines changed: 90 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,82 @@
1-
add_library(simple_enum::simple_enum ALIAS simple_enum)
1+
add_library(
2+
simple_enum::simple_enum
3+
ALIAS
4+
simple_enum)
25

3-
#----------------------------------------------------------------
6+
# ----------------------------------------------------------------
47
# boost-ext/ut
5-
#----------------------------------------------------------------
6-
CPMAddPackage(
8+
# ----------------------------------------------------------------
9+
cpmaddpackage(
710
ut
8-
GITHUB_REPOSITORY arturbac/ut-ext
9-
GIT_TAG v2.0.1_7
10-
)
11+
GITHUB_REPOSITORY
12+
arturbac/ut-ext
13+
GIT_TAG
14+
v2.0.1_7)
1115
find_package(ut-ext REQUIRED)
12-
if(SIMPLE_ENUM_ENABLE_TIME_TRACE AND (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "AppleClang"))
16+
if(SIMPLE_ENUM_ENABLE_TIME_TRACE
17+
AND (CMAKE_CXX_COMPILER_ID
18+
MATCHES
19+
"Clang"
20+
OR CMAKE_CXX_COMPILER_ID
21+
MATCHES
22+
"AppleClang"
23+
))
1324
# external dependencies only for comparison benchmarking
14-
CPMAddPackage(
15-
NAME magic_enum
16-
GITHUB_REPOSITORY Neargye/magic_enum
17-
GIT_TAG v0.9.5
18-
GIT_SHALLOW TRUE
19-
)
25+
cpmaddpackage(
26+
NAME
27+
magic_enum
28+
GITHUB_REPOSITORY
29+
Neargye/magic_enum
30+
GIT_TAG
31+
v0.9.5
32+
GIT_SHALLOW
33+
TRUE)
2034
find_package(magic_enum REQUIRED)
2135

22-
CPMAddPackage(
23-
Name reflect
24-
GITHUB_REPOSITORY boost-ext/reflect
25-
GIT_TAG main
26-
GIT_SHALLOW TRUE
27-
)
36+
cpmaddpackage(
37+
Name
38+
reflect
39+
GITHUB_REPOSITORY
40+
boost-ext/reflect
41+
GIT_TAG
42+
main
43+
GIT_SHALLOW
44+
TRUE)
2845

2946
add_library(reflect INTERFACE)
3047
target_include_directories(reflect SYSTEM INTERFACE ${reflect_SOURCE_DIR})
3148
target_compile_definitions(reflect INTERFACE REFLECT_DISABLE_STATIC_ASSERT_TESTS)
32-
add_library(reflect::reflect ALIAS reflect)
49+
add_library(
50+
reflect::reflect
51+
ALIAS
52+
reflect)
3353
find_package(reflect REQUIRED)
3454
endif()
3555

36-
#----------------------------------------------------------------
56+
# ----------------------------------------------------------------
3757
# glaze
38-
#----------------------------------------------------------------
39-
CPMAddPackage(
40-
glaze
41-
GITHUB_REPOSITORY stephenberry/glaze
42-
GIT_TAG ${GLAZE_GIT_TAG}
43-
GIT_SHALLOW TRUE
44-
)
58+
# ----------------------------------------------------------------
59+
60+
# set(GLAZE_GIT_TAG "v4.2.2")
61+
if(NOT
62+
DEFINED
63+
GLAZE_GIT_TAG)
64+
set(GLAZE_GIT_TAG "main")
65+
endif()
66+
67+
if(NOT
68+
TARGET
69+
glaze::glaze)
70+
71+
cpmaddpackage(
72+
glaze
73+
GITHUB_REPOSITORY
74+
stephenberry/glaze
75+
GIT_TAG
76+
${GLAZE_GIT_TAG}
77+
GIT_SHALLOW
78+
TRUE)
79+
endif()
4580

4681
add_ut_test(test_simple_enum.cc)
4782
target_compile_definitions(test_simple_enum PRIVATE BOOST_UT_DISABLE_MODULE)
@@ -58,18 +93,33 @@ target_compile_definitions(enum_index_ut PRIVATE BOOST_UT_DISABLE_MODULE)
5893
add_ut_test(generic_error_category_ut.cc)
5994
target_compile_definitions(generic_error_category_ut PRIVATE BOOST_UT_DISABLE_MODULE)
6095

61-
if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "13")
62-
OR (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "16")
63-
OR (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
64-
)
96+
if((CMAKE_CXX_COMPILER_ID
97+
STREQUAL
98+
"GNU"
99+
AND CMAKE_CXX_COMPILER_VERSION
100+
VERSION_GREATER_EQUAL
101+
"13"
102+
)
103+
OR (CMAKE_CXX_COMPILER_ID
104+
STREQUAL
105+
"Clang"
106+
AND CMAKE_CXX_COMPILER_VERSION
107+
VERSION_GREATER_EQUAL
108+
"16"
109+
)
110+
OR (CMAKE_CXX_COMPILER_ID
111+
STREQUAL
112+
"MSVC"))
65113
add_ut_test(std_format_ut.cc)
66114
endif()
67115

68-
CPMAddPackage(
69-
NAME fmt
70-
GITHUB_REPOSITORY fmtlib/fmt
71-
GIT_TAG 11.1.2
72-
)
116+
cpmaddpackage(
117+
NAME
118+
fmt
119+
GITHUB_REPOSITORY
120+
fmtlib/fmt
121+
GIT_TAG
122+
11.1.2)
73123

74124
# find_package(fmt REQUIRED)
75125
add_ut_test(fmtlib_format_ut.cc)
@@ -80,12 +130,8 @@ if(NOT MSVC)
80130
target_link_libraries(glaze_enum_name_ut PRIVATE glaze::glaze)
81131
# glaze causes objects to grow over 4GB on msvc
82132
# https://developercommunity.visualstudio.com/t/Memory-Explosion:-compiler-limit:-objec/10795558
83-
# target_compile_options(glaze_enum_name_ut PRIVATE
84-
# "/bigobj"
85-
# "/Zm500" # Increased memory allocation
86-
# "/Os" # Favor small code size
87-
# )
88-
# target_link_options(glaze_enum_name_ut PRIVATE "/LARGEADDRESSAWARE")
133+
# target_compile_options(glaze_enum_name_ut PRIVATE "/bigobj" "/Zm500" # Increased memory allocation "/Os" #
134+
# Favor small code size ) target_link_options(glaze_enum_name_ut PRIVATE "/LARGEADDRESSAWARE")
89135
endif()
90136

91137
add_executable(diagnostics EXCLUDE_FROM_ALL)

0 commit comments

Comments
 (0)