1
1
#ifndef YOREL_YOMM2_DETAIL_HPP
2
2
#define YOREL_YOMM2_DETAIL_HPP
3
3
4
- #include < boost/assert.hpp>
5
- #include < boost/dynamic_bitset.hpp>
6
- #include < boost/mp11/algorithm.hpp>
7
- #include < boost/mp11/bind.hpp>
8
-
9
4
#include < yorel/yomm2/detail/static_list.hpp>
10
5
6
+ #include < boost/assert.hpp>
7
+
11
8
namespace yorel {
12
9
namespace yomm2 {
13
10
namespace detail {
@@ -25,7 +22,7 @@ template<class Policy, class TypeList>
25
22
struct type_id_list ;
26
23
27
24
template <class Policy , typename ... T>
28
- struct type_id_list <Policy, boost::mp11::mp_list <T...>> {
25
+ struct type_id_list <Policy, types <T...>> {
29
26
// If using deferred 'static_type', add an extra element in 'value',
30
27
// default-initialized to zero, indicating the ids need to be resolved. Set
31
28
// to 1 after this is done.
@@ -37,18 +34,18 @@ struct type_id_list<Policy, boost::mp11::mp_list<T...>> {
37
34
};
38
35
39
36
template <class Policy , typename ... T>
40
- type_id type_id_list<Policy, boost::mp11::mp_list <T...>>::value[values] = {
37
+ type_id type_id_list<Policy, types <T...>>::value[values] = {
41
38
collect_static_type_id<Policy, T>()...};
42
39
43
40
template <class Policy , typename ... T>
44
- type_id* type_id_list<Policy, boost::mp11::mp_list <T...>>::begin = value;
41
+ type_id* type_id_list<Policy, types <T...>>::begin = value;
45
42
46
43
template <class Policy , typename ... T>
47
- type_id* type_id_list<Policy, boost::mp11::mp_list <T...>>::end =
44
+ type_id* type_id_list<Policy, types <T...>>::end =
48
45
value + sizeof ...(T);
49
46
50
47
template <class Policy >
51
- struct type_id_list <Policy, boost::mp11::mp_list <>> {
48
+ struct type_id_list <Policy, types <>> {
52
49
static constexpr type_id* const begin = nullptr ;
53
50
static constexpr auto end = begin;
54
51
};
@@ -70,12 +67,12 @@ struct parameter_type_list;
70
67
71
68
template <typename ReturnType, typename ... ParameterTypes>
72
69
struct parameter_type_list <ReturnType(ParameterTypes...)> {
73
- using type = boost::mp11::mp_list <ParameterTypes...>;
70
+ using type = types <ParameterTypes...>;
74
71
};
75
72
76
73
template <typename ReturnType, typename ... ParameterTypes>
77
74
struct parameter_type_list <ReturnType (*)(ParameterTypes...)> {
78
- using type = boost::mp11::mp_list <ParameterTypes...>;
75
+ using type = types <ParameterTypes...>;
79
76
};
80
77
81
78
template <typename T>
@@ -139,14 +136,14 @@ template<class...>
139
136
struct class_declaration_aux ;
140
137
141
138
template <class Policy , class Class , typename ... Bases>
142
- struct class_declaration_aux <Policy, boost::mp11::mp_list <Class, Bases...>>
139
+ struct class_declaration_aux <Policy, types <Class, Bases...>>
143
140
: class_info {
144
141
class_declaration_aux () {
145
142
this ->type = collect_static_type_id<Policy, Class>();
146
143
this ->first_base =
147
- type_id_list<Policy, boost::mp11::mp_list <Bases...>>::begin;
144
+ type_id_list<Policy, types <Bases...>>::begin;
148
145
this ->last_base =
149
- type_id_list<Policy, boost::mp11::mp_list <Bases...>>::end;
146
+ type_id_list<Policy, types <Bases...>>::end;
150
147
Policy::classes.push_back (*this );
151
148
this ->is_abstract = std::is_abstract_v<Class>;
152
149
this ->static_vptr = &Policy::template static_vptr<Class>;
@@ -159,7 +156,7 @@ struct class_declaration_aux<Policy, boost::mp11::mp_list<Class, Bases...>>
159
156
160
157
template <typename ... Ts>
161
158
constexpr auto arity =
162
- boost::mp11::mp_count_if<boost::mp11::mp_list <Ts...>, is_virtual>::value;
159
+ boost::mp11::mp_count_if<types <Ts...>, is_virtual>::value;
163
160
164
161
inline definition_info::~definition_info () {
165
162
if (method) {
@@ -171,7 +168,7 @@ template<typename T>
171
168
struct is_policy_aux : std::is_base_of<policy::abstract_policy, T> {};
172
169
173
170
template <typename ... T>
174
- struct is_policy_aux <boost::mp11::mp_list <T...>> : std::false_type {};
171
+ struct is_policy_aux <types <T...>> : std::false_type {};
175
172
176
173
template <typename T>
177
174
constexpr bool is_policy = is_policy_aux<T>::value;
@@ -340,8 +337,8 @@ constexpr bool is_virtual_ptr = is_virtual_ptr_aux<T>::value;
340
337
template <class ... Ts>
341
338
using virtual_ptr_class = std::conditional_t <
342
339
sizeof ...(Ts) == 2 ,
343
- boost::mp11::mp_second<boost::mp11::mp_list <Ts..., void >>,
344
- boost::mp11::mp_first<boost::mp11::mp_list <Ts...>>>;
340
+ boost::mp11::mp_second<types <Ts..., void >>,
341
+ boost::mp11::mp_first<types <Ts...>>>;
345
342
346
343
template <class Policy , typename T>
347
344
struct argument_traits {
@@ -500,19 +497,19 @@ inline uintptr_t get_tip(const T& arg) {
500
497
501
498
template <typename ... Classes>
502
499
using get_policy = std::conditional_t <
503
- is_policy<boost::mp11::mp_back<boost::mp11::mp_list <Classes...>>>,
504
- boost::mp11::mp_back<boost::mp11::mp_list <Classes...>>,
500
+ is_policy<boost::mp11::mp_back<types <Classes...>>>,
501
+ boost::mp11::mp_back<types <Classes...>>,
505
502
YOMM2_DEFAULT_POLICY>;
506
503
507
504
template <typename ... Classes>
508
505
using remove_policy = std::conditional_t <
509
- is_policy<boost::mp11::mp_back<boost::mp11::mp_list <Classes...>>>,
510
- boost::mp11::mp_pop_back<boost::mp11::mp_list <Classes...>>,
511
- boost::mp11::mp_list <Classes...>>;
506
+ is_policy<boost::mp11::mp_back<types <Classes...>>>,
507
+ boost::mp11::mp_pop_back<types <Classes...>>,
508
+ types <Classes...>>;
512
509
513
510
template <class ... Ts>
514
511
using virtual_ptr_policy = std::conditional_t <
515
- sizeof ...(Ts) == 2 , boost::mp11::mp_first<boost::mp11::mp_list <Ts...>>,
512
+ sizeof ...(Ts) == 2 , boost::mp11::mp_first<types <Ts...>>,
516
513
YOMM2_DEFAULT_POLICY>;
517
514
518
515
// -----------------------------------------------------------------------------
@@ -526,12 +523,12 @@ template<
526
523
typename ... SPEC_PARAM>
527
524
struct thunk <
528
525
Policy, BASE_RETURN(BASE_PARAM...), SPEC,
529
- boost::mp11::mp_list <SPEC_PARAM...>> {
526
+ types <SPEC_PARAM...>> {
530
527
static BASE_RETURN fn (remove_virtual<BASE_PARAM>... arg) {
531
528
using base_type =
532
- boost::mp11::mp_first<boost::mp11::mp_list <BASE_PARAM...>>;
529
+ boost::mp11::mp_first<types <BASE_PARAM...>>;
533
530
using spec_type =
534
- boost::mp11::mp_first<boost::mp11::mp_list <SPEC_PARAM...>>;
531
+ boost::mp11::mp_first<types <SPEC_PARAM...>>;
535
532
return SPEC (
536
533
argument_traits<Policy, BASE_PARAM>::template cast<SPEC_PARAM>(
537
534
remove_virtual<BASE_PARAM>(arg))...);
@@ -563,51 +560,51 @@ struct member_function_thunk<F, R (C::*)(Args...)> {
563
560
// base. The direct and its direct and indirect proper bases are included. The
564
561
// runtime will extract the direct proper bases. See unit tests for an example.
565
562
template <typename ... Cs>
566
- using inheritance_map = boost::mp11::mp_list <boost::mp11::mp_push_front<
563
+ using inheritance_map = types <boost::mp11::mp_push_front<
567
564
boost::mp11::mp_filter_q<
568
565
boost::mp11::mp_bind_back<std::is_base_of, Cs>,
569
- boost::mp11::mp_list <Cs...>>,
566
+ types <Cs...>>,
570
567
Cs>...>;
571
568
572
569
template <class Policy , class ... Classes>
573
570
struct use_classes_aux ;
574
571
575
572
template <class Policy , class ... Classes>
576
- struct use_classes_aux <Policy, boost::mp11::mp_list <Classes...>> {
573
+ struct use_classes_aux <Policy, types <Classes...>> {
577
574
using type = boost::mp11::mp_apply<
578
575
std::tuple,
579
576
boost::mp11::mp_transform_q<
580
577
boost::mp11::mp_bind_front<class_declaration_aux, Policy>,
581
578
boost::mp11::mp_apply<
582
- inheritance_map, boost::mp11::mp_list <Classes...>>>>;
579
+ inheritance_map, types <Classes...>>>>;
583
580
};
584
581
585
582
template <class Policy , class ... Classes, class ... MoreClassLists>
586
583
struct use_classes_aux <
587
584
Policy,
588
- boost::mp11::mp_list<boost::mp11::mp_list <Classes...>, MoreClassLists...>>
585
+ types<types <Classes...>, MoreClassLists...>>
589
586
: use_classes_aux<
590
587
Policy,
591
588
boost::mp11::mp_append<
592
- boost::mp11::mp_list <Classes...>, MoreClassLists...>>
589
+ types <Classes...>, MoreClassLists...>>
593
590
594
591
{};
595
592
596
593
template <typename ... Ts>
597
594
using second_last = boost::mp11::mp_at_c<
598
- boost::mp11::mp_list <Ts...>,
599
- boost::mp11::mp_size<boost::mp11::mp_list <Ts...>>::value - 2 >;
595
+ types <Ts...>,
596
+ boost::mp11::mp_size<types <Ts...>>::value - 2 >;
600
597
601
598
template <class ... Classes>
602
599
using use_classes_macro = typename std::conditional_t <
603
600
is_policy<second_last<Classes...>>,
604
601
use_classes_aux<
605
602
second_last<Classes...>,
606
603
boost::mp11::mp_pop_back<
607
- boost::mp11::mp_pop_back<boost::mp11::mp_list <Classes...>>>>,
604
+ boost::mp11::mp_pop_back<types <Classes...>>>>,
608
605
use_classes_aux<
609
- boost::mp11::mp_back<boost::mp11::mp_list <Classes...>>,
610
- boost::mp11::mp_pop_back<boost::mp11::mp_list <Classes...>>>>::type;
606
+ boost::mp11::mp_back<types <Classes...>>,
607
+ boost::mp11::mp_pop_back<types <Classes...>>>>::type;
611
608
612
609
struct empty_base {};
613
610
0 commit comments