Ariles
Loading...
Searching...
No Matches
std_tuple.h
Go to the documentation of this file.
1/**
2 @file
3 @author Alexander Sherikov
4
5 @copyright 2026 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6 (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7
8 @brief
9*/
10
11#pragma once
12
13#include <tuple>
14#include <type_traits>
15#include <string>
16#include "../internal/helpers.h"
17
18
19namespace ariles2
20{
21 namespace read
22 {
23 namespace impl
24 {
25 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
27 t_Visitor &visitor,
28 std::tuple<t_Args...> &entry,
29 const typename t_Visitor::Parameters &param,
30 std::index_sequence<t_Indices...>)
31 {
32 (visitor.visitMapEntry(std::get<t_Indices>(entry), "tuple_" + std::to_string(t_Indices), param, true),
33 ...);
34 }
35 } // namespace impl
36
37 template <class t_Visitor, typename... t_Args>
38 void apply_read(t_Visitor &visitor, std::tuple<t_Args...> &entry, const typename t_Visitor::Parameters &param)
39 {
41 CPPUT_UNUSED_ARG(param);
42
43 visitor.startMap(visitor.SIZE_LIMIT_EQUAL, sizeof...(t_Args));
44 impl::apply_read(visitor, entry, param, std::index_sequence_for<t_Args...>{});
45 visitor.endMap();
46 }
47 } // namespace read
48} // namespace ariles2
49
50
51namespace ariles2
52{
53 namespace write
54 {
55 namespace impl
56 {
57 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
59 t_Visitor &writer,
60 const std::tuple<t_Args...> &entry,
61 const typename t_Visitor::Parameters &param,
62 std::index_sequence<t_Indices...>)
63 {
64 (writer.visitMapEntry(std::get<t_Indices>(entry), "tuple_" + std::to_string(t_Indices), param), ...);
65 }
66 } // namespace impl
67
68 template <class t_Visitor, typename... t_Args>
70 t_Visitor &writer,
71 const std::tuple<t_Args...> &entry,
72 const typename t_Visitor::Parameters &param)
73 {
75 CPPUT_UNUSED_ARG(param);
76
77 writer.startMap(param, sizeof...(t_Args));
78 impl::apply_write(writer, entry, param, std::index_sequence_for<t_Args...>{});
79 writer.endMap();
80 }
81 } // namespace write
82} // namespace ariles2
83
84
85namespace ariles2
86{
87 namespace compare
88 {
89 namespace impl
90 {
91 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
93 t_Visitor &visitor,
94 const std::tuple<t_Args...> &left,
95 const std::tuple<t_Args...> &right,
96 const typename t_Visitor::Parameters &param,
97 std::index_sequence<t_Indices...>)
98 {
99 (apply_compare(visitor, std::get<t_Indices>(left), std::get<t_Indices>(right), param), ...);
100 }
101 } // namespace impl
102
103 template <class t_Visitor, typename... t_Args>
105 t_Visitor &visitor,
106 const std::tuple<t_Args...> &left,
107 const std::tuple<t_Args...> &right,
108 const typename t_Visitor::Parameters &param)
109 {
111 CPPUT_UNUSED_ARG(param);
112
113 impl::apply_compare(visitor, left, right, param, std::index_sequence_for<t_Args...>{});
114 }
115 } // namespace compare
116} // namespace ariles2
117
118
119namespace ariles2
120{
121 namespace defaults
122 {
123 namespace impl
124 {
125 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
127 const t_Visitor &visitor,
128 std::tuple<t_Args...> &entry,
129 const typename t_Visitor::Parameters &param,
130 std::index_sequence<t_Indices...>)
131 {
132 (apply_defaults(visitor, std::get<t_Indices>(entry), param), ...);
133 }
134 } // namespace impl
135
136 template <class t_Visitor, typename... t_Args>
138 const t_Visitor &visitor,
139 std::tuple<t_Args...> &entry,
140 const typename t_Visitor::Parameters &param)
141 {
143 CPPUT_UNUSED_ARG(param);
144
145 impl::apply_defaults(visitor, entry, param, std::index_sequence_for<t_Args...>{});
146 }
147 } // namespace defaults
148} // namespace ariles2
149
150
151namespace ariles2
152{
153 namespace process
154 {
155 namespace impl
156 {
157 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
159 const t_Visitor &visitor,
160 std::tuple<t_Args...> &entry,
161 const typename t_Visitor::Parameters &param,
162 std::index_sequence<t_Indices...>)
163 {
164 (apply_process(visitor, std::get<t_Indices>(entry), param), ...);
165 }
166 } // namespace impl
167
168 template <class t_Visitor, typename... t_Args>
170 const t_Visitor &visitor,
171 std::tuple<t_Args...> &entry,
172 const typename t_Visitor::Parameters &param)
173 {
175 CPPUT_UNUSED_ARG(param);
176
177 impl::apply_process(visitor, entry, param, std::index_sequence_for<t_Args...>{});
178 }
179 } // namespace process
180} // namespace ariles2
181
182
183namespace ariles2
184{
185 namespace copyfrom
186 {
187 namespace impl
188 {
189 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
191 t_Visitor &visitor,
192 std::tuple<t_Args...> &left,
193 const std::tuple<t_Args...> &right,
194 const typename t_Visitor::Parameters &param,
195 std::index_sequence<t_Indices...>)
196 {
197 (apply_copyfrom(visitor, std::get<t_Indices>(left), std::get<t_Indices>(right), param), ...);
198 }
199 } // namespace impl
200
201 template <class t_Visitor, typename... t_Args>
203 t_Visitor &visitor,
204 std::tuple<t_Args...> &left,
205 const std::tuple<t_Args...> &right,
206 const typename t_Visitor::Parameters &param)
207 {
209 impl::apply_copyfrom(visitor, left, right, param, std::index_sequence_for<t_Args...>{});
210 }
211 } // namespace copyfrom
212
213
214 namespace copyto
215 {
216 namespace impl
217 {
218 template <class t_Visitor, std::size_t... t_Indices, typename... t_Args>
220 t_Visitor &visitor,
221 const std::tuple<t_Args...> &left,
222 std::tuple<t_Args...> &right,
223 const typename t_Visitor::Parameters &param,
224 std::index_sequence<t_Indices...>)
225 {
226 (apply_copyto(visitor, std::get<t_Indices>(left), std::get<t_Indices>(right), param), ...);
227 }
228 } // namespace impl
229
230 template <class t_Visitor, typename... t_Args>
232 t_Visitor &visitor,
233 const std::tuple<t_Args...> &left,
234 std::tuple<t_Args...> &right,
235 const typename t_Visitor::Parameters &param)
236 {
238 impl::apply_copyto(visitor, left, right, param, std::index_sequence_for<t_Args...>{});
239 }
240 } // namespace copyto
241} // namespace ariles2
#define CPPUT_UNUSED_ARG(parameter)
Definition misc.h:19
void apply_compare(t_Visitor &visitor, const std::tuple< t_Args... > &left, const std::tuple< t_Args... > &right, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:92
void apply_compare(t_Visitor &visitor, const t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:140
void apply_copyfrom(t_Visitor &visitor, std::tuple< t_Args... > &left, const std::tuple< t_Args... > &right, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:190
void apply_copyfrom(t_Visitor &visitor, t_Left &left, const t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:307
void apply_copyto(t_Visitor &visitor, const std::tuple< t_Args... > &left, std::tuple< t_Args... > &right, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:219
void apply_copyto(t_Visitor &visitor, const t_Left &left, t_Right &right, const typename t_Visitor::Parameters &param)
Definition basic.h:353
void apply_defaults(const t_Visitor &visitor, std::tuple< t_Args... > &entry, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:126
void apply_defaults(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param, ARILES2_IS_BASE_ENABLER(ariles2::defaults::Base, t_Entry))
Definition basic.h:232
void apply_process(const t_Visitor &visitor, std::tuple< t_Args... > &entry, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:158
void apply_process(const t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &param)
Definition basic.h:289
void apply_read(t_Visitor &visitor, std::tuple< t_Args... > &entry, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:26
void apply_read(t_Visitor &visitor, t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::read::Base, t_Entry))
Definition basic.h:21
void apply_write(t_Visitor &writer, const std::tuple< t_Args... > &entry, const typename t_Visitor::Parameters &param, std::index_sequence< t_Indices... >)
Definition std_tuple.h:58
void apply_write(t_Visitor &writer, const t_Entry &entry, const typename t_Visitor::Parameters &parameters, ARILES2_IS_BASE_ENABLER(ariles2::write::Base, t_Entry))
Definition basic.h:82
#define CPPUT_TRACE_FUNCTION
Definition trace.h:126