Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -251,20 +251,30 @@ file(
)
list(FILTER IRIS_HEADERS EXCLUDE REGEX /include/iris/marshal[./])

file(GLOB IRIS_PP_HEADERS ${PROJECT_SOURCE_DIR}/include/iris/pp/*.hpp)
set(
IRIS_TUPLE_IMPL_GENERATE_DEPENDS
${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp
${IRIS_PP_HEADERS}
${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp.pre.in
${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp.post.in
${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/.clang-format
)

if(MSVC)
add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp
COMMAND ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.bat
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp
DEPENDS ${IRIS_TUPLE_IMPL_GENERATE_DEPENDS} ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.bat
VERBATIM
)
else()
add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/preprocessed/tuple_impl.hpp
COMMAND ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.sh
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
DEPENDS ${PROJECT_SOURCE_DIR}/include/iris/alloy/detail/tuple_impl.hpp
DEPENDS ${IRIS_TUPLE_IMPL_GENERATE_DEPENDS} ${PROJECT_SOURCE_DIR}/scripts/generate_tuple_members.sh
VERBATIM
)
endif()
Expand Down
13 changes: 3 additions & 10 deletions include/iris/alloy/adapt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@

#include <iris/type_list.hpp> // IWYU pragma: keep

#include <iris/pp/comma.hpp>
#include <iris/pp/seq.hpp>
#include <iris/pp/tuple.hpp>
#include <iris/pp/va.hpp>

namespace iris::alloy {

Expand All @@ -18,19 +16,14 @@ struct adaptor;

} // iris::alloy

#define IRIS_ZZ_ALLOY_ADAPT_STRUCT_I(index, data_member, class_name) \
IRIS_PP_COMMA_IF(index) & class_name::data_member
#define IRIS_ZZ_ALLOY_ADAPT_STRUCT_I(data_member, class_name) & class_name::data_member

#define IRIS_ALLOY_ADAPT_STRUCT(class_name, ...) \
template<> \
struct iris::alloy::adaptor<class_name> \
{ \
using getters_list = iris::constant_list< \
IRIS_PP_SEQ_FOR_EACH_WITH_INDEX( \
IRIS_PP_TUPLE_TO_SEQ((__VA_ARGS__)), \
IRIS_ZZ_ALLOY_ADAPT_STRUCT_I, \
class_name \
) \
IRIS_PP_VA_ENUM(IRIS_ZZ_ALLOY_ADAPT_STRUCT_I, class_name, __VA_ARGS__) \
>; \
};

Expand Down
26 changes: 12 additions & 14 deletions include/iris/marshal/adapt.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@

#include <iris/pp/tuple.hpp>
#include <iris/pp/seq.hpp>
#include <iris/pp/va.hpp>
#include <iris/pp/stringize.hpp>
#include <iris/pp/cat.hpp>
#include <iris/pp/arg.hpp>
#include <iris/pp/if.hpp>

#include <type_traits>

Expand Down Expand Up @@ -109,7 +111,7 @@ using setter_param_t = std::conditional_t<

#define IRIS_MARSHAL_FIELD_GET(maybe_paren_type, field_name, ...) \
IRIS_ZZ_MARSHAL_FIELD_DATA_MEMBER(maybe_paren_type, field_name, __VA_ARGS__) \
IRIS_PP_IF( \
IRIS_PP_IIF( \
IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \
IRIS_ZZ_MARSHAL_FIELD_BOOL_GET, \
IRIS_ZZ_MARSHAL_FIELD_GET_I \
Expand All @@ -121,7 +123,7 @@ using setter_param_t = std::conditional_t<

#define IRIS_MARSHAL_FIELD_GET_SET(maybe_paren_type, field_name, ...) \
IRIS_ZZ_MARSHAL_FIELD_DATA_MEMBER(maybe_paren_type, field_name, __VA_ARGS__) \
IRIS_PP_IF( \
IRIS_PP_IIF( \
IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \
IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \
IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \
Expand Down Expand Up @@ -162,7 +164,7 @@ using setter_param_t = std::conditional_t<
// pimpl declare

#define IRIS_ZZ_MARSHAL_PIMPL_FIELD_DECLARE_FIELD_I(maybe_paren_type, field_name, ...) \
IRIS_PP_IF( \
IRIS_PP_IIF( \
IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \
IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \
IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \
Expand Down Expand Up @@ -191,7 +193,7 @@ using setter_param_t = std::conditional_t<
#define IRIS_ZZ_MARSHAL_PIMPL_FIELD_VARIABLE(field_name) impl_->field_name

#define IRIS_ZZ_MARSHAL_PIMPL_FIELD_ACCESS_DEFINE_FIELD_I(class_name, maybe_paren_type, field_name, ...) \
IRIS_PP_IF( \
IRIS_PP_IIF( \
IRIS_PP_IS_PAREN( IRIS_PP_CAT_ONLY_TWO(IRIS_ZZ_MARSHAL_FIELD_TYPE_IS_, IRIS_PP_UNPAREN_IF_PAREN(maybe_paren_type)) ), \
IRIS_ZZ_MARSHAL_FIELD_BOOL_GET_SET, \
IRIS_ZZ_MARSHAL_FIELD_GET_SET_I \
Expand Down Expand Up @@ -249,32 +251,28 @@ using setter_param_t = std::conditional_t<
IRIS_ZZ_MARSHAL_SELECT_MEMBER_ACCESS(class_name, field_name, set) \
>{IRIS_PP_STRINGIZE(field_name)},

#define IRIS_ZZ_MARSHAL_ADAPT_I(class_name, field_defs) \
#define IRIS_ZZ_MARSHAL_ADAPT_I(class_name, fields_init) \
template<> \
struct iris::marshal::adapted_class_traits<class_name> \
{ \
inline static constexpr auto fields = ::iris::alloy::tuple{ \
IRIS_PP_SEQ_FOR_EACH( \
field_defs, \
IRIS_ZZ_MARSHAL_ADAPT_FIELD, \
class_name \
) \
fields_init \
}; \
};

#define IRIS_MARSHAL_ADAPT(class_name, ...) \
IRIS_ZZ_MARSHAL_ADAPT_I( \
class_name, \
IRIS_PP_TUPLE_TO_SEQ((__VA_ARGS__)) \
IRIS_PP_VA_FOR_EACH(IRIS_ZZ_MARSHAL_ADAPT_FIELD, class_name, __VA_ARGS__) \
)

#define IRIS_ZZ_MARSHAL_ADAPT_DEFS_EXTRACT_FIELD_NAME(field_def, macro_data) \
(IRIS_PP_TUPLE_ELEM(1, field_def))
#define IRIS_ZZ_MARSHAL_ADAPT_DEFS_FIELD(field_def, class_name) \
IRIS_ZZ_MARSHAL_ADAPT_FIELD(IRIS_PP_TUPLE_ELEM(1, field_def), class_name)

#define IRIS_MARSHAL_ADAPT_DEFS(class_name, field_defs) \
IRIS_ZZ_MARSHAL_ADAPT_I( \
class_name, \
IRIS_PP_SEQ_FOR_EACH(field_defs, IRIS_ZZ_MARSHAL_ADAPT_DEFS_EXTRACT_FIELD_NAME, ~) \
IRIS_PP_SEQ_FOR_EACH(field_defs, IRIS_ZZ_MARSHAL_ADAPT_DEFS_FIELD, class_name) \
)

} // iris::marshal
Expand Down
45 changes: 34 additions & 11 deletions include/iris/pp/add.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,42 @@
// SPDX-License-Identifier: MIT

#include <iris/pp/cat.hpp>
#include <iris/pp/decrement.hpp>
#include <iris/pp/increment.hpp>
#include <iris/pp/while.hpp>

#define IRIS_PP_ADD(a, b) IRIS_ZZ_PP_ADD_I_FIRST(IRIS_PP_WHILE((a, b), IRIS_ZZ_PP_ADD_I_PRED, IRIS_ZZ_PP_ADD_I_UPDATE))
#define IRIS_PP_ADD(a, b) IRIS_PP_CAT(IRIS_ZZ_PP_ADD_I_, b)(a)

#define IRIS_ZZ_PP_ADD_I_FIRST(state) IRIS_ZZ_PP_ADD_I_FIRST_I state
#define IRIS_ZZ_PP_ADD_I_FIRST_I(a, b) a

#define IRIS_ZZ_PP_ADD_I_PRED(state) IRIS_ZZ_PP_ADD_I_PRED_I state
#define IRIS_ZZ_PP_ADD_I_PRED_I(a, b) b

#define IRIS_ZZ_PP_ADD_I_UPDATE(state) IRIS_ZZ_PP_ADD_I_UPDATE_I state
#define IRIS_ZZ_PP_ADD_I_UPDATE_I(a, b) (IRIS_PP_INCREMENT(a), IRIS_PP_DECREMENT(b))
#define IRIS_ZZ_PP_ADD_I_0(a) a
#define IRIS_ZZ_PP_ADD_I_1(a) IRIS_ZZ_PP_ADD_I_0(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_2(a) IRIS_ZZ_PP_ADD_I_1(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_3(a) IRIS_ZZ_PP_ADD_I_2(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_4(a) IRIS_ZZ_PP_ADD_I_3(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_5(a) IRIS_ZZ_PP_ADD_I_4(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_6(a) IRIS_ZZ_PP_ADD_I_5(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_7(a) IRIS_ZZ_PP_ADD_I_6(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_8(a) IRIS_ZZ_PP_ADD_I_7(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_9(a) IRIS_ZZ_PP_ADD_I_8(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_10(a) IRIS_ZZ_PP_ADD_I_9(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_11(a) IRIS_ZZ_PP_ADD_I_10(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_12(a) IRIS_ZZ_PP_ADD_I_11(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_13(a) IRIS_ZZ_PP_ADD_I_12(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_14(a) IRIS_ZZ_PP_ADD_I_13(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_15(a) IRIS_ZZ_PP_ADD_I_14(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_16(a) IRIS_ZZ_PP_ADD_I_15(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_17(a) IRIS_ZZ_PP_ADD_I_16(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_18(a) IRIS_ZZ_PP_ADD_I_17(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_19(a) IRIS_ZZ_PP_ADD_I_18(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_20(a) IRIS_ZZ_PP_ADD_I_19(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_21(a) IRIS_ZZ_PP_ADD_I_20(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_22(a) IRIS_ZZ_PP_ADD_I_21(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_23(a) IRIS_ZZ_PP_ADD_I_22(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_24(a) IRIS_ZZ_PP_ADD_I_23(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_25(a) IRIS_ZZ_PP_ADD_I_24(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_26(a) IRIS_ZZ_PP_ADD_I_25(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_27(a) IRIS_ZZ_PP_ADD_I_26(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_28(a) IRIS_ZZ_PP_ADD_I_27(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_29(a) IRIS_ZZ_PP_ADD_I_28(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_30(a) IRIS_ZZ_PP_ADD_I_29(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_31(a) IRIS_ZZ_PP_ADD_I_30(IRIS_PP_INCREMENT(a))
#define IRIS_ZZ_PP_ADD_I_32(a) IRIS_ZZ_PP_ADD_I_31(IRIS_PP_INCREMENT(a))

#endif
Loading
Loading