Flecs v4.1
A fast entity component system (ECS) for C & C++
Loading...
Searching...
No Matches
entity_component_tuple.hpp
Go to the documentation of this file.
1
6#pragma once
7
13namespace flecs
14{
15
21 template<std::size_t size, typename... Args>
22 struct tuple_builder {};
23
25 template<typename T, typename U>
26 struct tuple_2 {
27 T val1;
28 U val2;
29 };
30
32 template<typename... Args>
33 struct tuple_builder<2, Args...> {
34 using type = tuple_2<Args&...>;
35 using type_ptr = tuple_2<Args*...>;
36 using type_const = tuple_2<const Args&...>;
37 using type_const_ptr = tuple_2<const Args*...>;
38 };
39
41 template<typename T, typename U, typename V>
42 struct tuple_3 {
43 T val1;
44 U val2;
45 V val3;
46 };
47
49 template<typename... Args>
50 struct tuple_builder<3, Args...> {
51 using type = tuple_3<Args&...>;
52 using type_ptr = tuple_3<Args*...>;
53 using type_const = tuple_3<const Args&...>;
54 using type_const_ptr = tuple_3<const Args*...>;
55 };
56
58 template<typename T, typename U, typename V, typename W>
59 struct tuple_4 {
60 T val1;
61 U val2;
62 V val3;
63 W val4;
64 };
65
67 template<typename... Args>
68 struct tuple_builder<4, Args...> {
69 using type = tuple_4<Args&...>;
70 using type_ptr = tuple_4<Args*...>;
71 using type_const = tuple_4<const Args&...>;
72 using type_const_ptr = tuple_4<const Args*...>;
73 };
74
76 template<typename T, typename U, typename V, typename W, typename X>
77 struct tuple_5 {
78 T val1;
79 U val2;
80 V val3;
81 W val4;
82 X val5;
83 };
84
86 template<typename... Args>
87 struct tuple_builder<5, Args...> {
88 using type = tuple_5<Args&...>;
89 using type_ptr = tuple_5<Args*...>;
90 using type_const = tuple_5<const Args&...>;
91 using type_const_ptr = tuple_5<const Args*...>;
92 };
93
95 template<typename T, typename U, typename V, typename W, typename X, typename Y>
96 struct tuple_6 {
97 T val1;
98 U val2;
99 V val3;
103 };
104
106 template<typename... Args>
107 struct tuple_builder<6, Args...> {
108 using type = tuple_6<Args&...>;
109 using type_ptr = tuple_6<Args*...>;
110 using type_const = tuple_6<const Args&...>;
111 using type_const_ptr = tuple_6<const Args*...>;
112 };
113
115 template<typename T, typename U, typename V, typename W, typename X, typename Y, typename Z>
116 struct tuple_7 {
124 };
125
127 template<typename... Args>
128 struct tuple_builder<7, Args...> {
129 using type = tuple_7<Args&...>;
130 using type_ptr = tuple_7<Args*...>;
131 using type_const = tuple_7<const Args&...>;
132 using type_const_ptr = tuple_7<const Args*...>;
133 };
134
136 template<typename T, typename U, typename V, typename W, typename X, typename Y, typename Z, typename A>
137 struct tuple_8 {
146 };
147
149 template<typename... Args>
150 struct tuple_builder<8, Args...> {
151 using type = tuple_8<Args&...>;
152 using type_ptr = tuple_8<Args*...>;
153 using type_const = tuple_8<const Args&...>;
154 using type_const_ptr = tuple_8<const Args*...>;
155 };
156
157}
158
Tuple of 2 elements.
Tuple of 3 elements.
Tuple of 4 elements.
Tuple of 5 elements.
Tuple of 6 elements.
Tuple of 7 elements.
Tuple of 8 elements.
Builds tuple types for a given number of component types.