26 return (
static_cast<const BaseClass&
>(arg).size() + ...);
30 return concatenate(
static_cast<BaseClass&
>(arg).get_all()...);
34 return concatenate(
static_cast<const BaseClass&
>(arg).get_all()...);
44#define VARARGS_TO_STRING(...) #__VA_ARGS__
46#define DEFINE_REF_VIEW(...) \
47 [[nodiscard]] auto get_all() \
49 return RefArray<std::remove_reference_t<DataType>, _members_size>{ __VA_ARGS__ }; \
51 [[nodiscard]] auto get_all() const \
53 return RefArray<const std::remove_reference_t<DataType>, _members_size>{ __VA_ARGS__ }; \
63#define DEFINE_FLAVOR_MEMBERS(DataType, ...) \
64 __VA_OPT__(DataType __VA_ARGS__;) \
65 static constexpr size_t _members_size = std::tuple_size_v<decltype(std::make_tuple(__VA_ARGS__))>; \
66 DEFINE_REF_VIEW(__VA_ARGS__) \
67 static const std::vector<std::string>& get_labels() \
69 static const std::vector<std::string> labels = \
70 bb::detail::split_and_trim(VARARGS_TO_STRING(__VA_ARGS__), ','); \
73 static constexpr std::size_t size() \
75 return _members_size; \
78#define DEFINE_COMPOUND_GET_ALL(...) \
79 [[nodiscard]] auto get_all() \
81 return bb::detail::_concatenate_base_class_get_all<decltype(*this), __VA_ARGS__>(*this); \
83 [[nodiscard]] auto get_all() const \
85 return bb::detail::_concatenate_base_class_get_all_const<decltype(*this), __VA_ARGS__>(*this); \
87 constexpr std::size_t size() const \
89 return bb::detail::_sum_base_class_size<decltype(*this), __VA_ARGS__>(*this); \
91 static const std::vector<std::string>& get_labels() \
93 static const auto labels = bb::detail::_static_concatenate_base_class_get_labels<__VA_ARGS__>(); \
auto _static_concatenate_base_class_get_labels()
auto _concatenate_base_class_get_all(T &arg)
constexpr std::size_t _sum_base_class_size(const T &arg)
auto _concatenate_base_class_get_all_const(const T &arg)
RefArray< T,(Ns+...)> constexpr concatenate(const RefArray< T, Ns > &... ref_arrays)
Concatenates multiple RefArray objects into a single RefArray.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept