COMMS
Template library intended to help with implementation of communication protocols.
Loading...
Searching...
No Matches
fields_access.h
1//
2// Copyright 2016 - 2026 (C). Alex Robenko. All rights reserved.
3//
4// SPDX-License-Identifier: MPL-2.0
5//
6// This Source Code Form is subject to the terms of the Mozilla Public
7// License, v. 2.0. If a copy of the MPL was not distributed with this
8// file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#pragma once
11
12#include "comms/details/base_detection.h"
13#include "comms/details/gen_enum.h"
14#include "comms/details/macro_common.h"
15
16#include <tuple>
17
18#ifdef COMMS_MUST_DEFINE_BASE
19#define COMMS_FIELD_VALUE_ACCESS_FUNC typename Base::ValueType& value()
20#define COMMS_FIELD_VALUE_ACCESS_CONST_FUNC const typename Base::ValueType& value() const
21#define COMMS_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) \
22 typename std::tuple_element<COMMS_CONCATENATE(FieldIdx_, n_), typename Base::T_>::type& COMMS_CONCATENATE(field_, n_)()
23#define COMMS_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) \
24 const typename std::tuple_element<COMMS_CONCATENATE(FieldIdx_, n_), typename Base::T_>::type& COMMS_CONCATENATE(field_, n_)() const
25#define COMMS_MSG_FIELDS_ACCESS_FUNC \
26 typename Base::AllFields& fields()
27#define COMMS_MSG_FIELDS_ACCESS_CONST_FUNC \
28 const typename Base::AllFields& fields() const
29
30#else // #ifdef COMMS_MUST_DEFINE_BASE
31#define COMMS_FIELD_VALUE_ACCESS_FUNC FUNC_AUTO_REF_RETURN(value, decltype(comms::field::toFieldBase(*this).value()))
32#define COMMS_FIELD_VALUE_ACCESS_CONST_FUNC FUNC_AUTO_REF_RETURN_CONST(value, decltype(comms::field::toFieldBase(*this).value()))
33#define COMMS_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) FUNC_AUTO_REF_RETURN(COMMS_CONCATENATE(field_, n_), decltype(std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(t_)))
34#define COMMS_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) FUNC_AUTO_REF_RETURN_CONST(COMMS_CONCATENATE(field_, n_), decltype(std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(t_)))
35#define COMMS_MSG_FIELDS_ACCESS_FUNC FUNC_AUTO_REF_RETURN(fields, decltype(comms::toMessageBase(*this).fields()))
36#define COMMS_MSG_FIELDS_ACCESS_CONST_FUNC FUNC_AUTO_REF_RETURN_CONST(fields, decltype(comms::toMessageBase(*this).fields()))
37#endif // #ifdef COMMS_MUST_DEFINE_BASE
38
39#define COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
40 COMMS_ACCESS_MEMBER_FIELD_FUNC(T_, t_, n_) {\
41 return std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(t_); \
42 } \
43 COMMS_ACCESS_MEMBER_FIELD_CONST_FUNC(T_, t_, n_) {\
44 return std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(t_); \
45 }
46
47#define COMMS_FIELD_ACC_FUNC_1(T_, t_, n_) COMMS_FIELD_ACC_FUNC(T_, t_, n_)
48#define COMMS_FIELD_ACC_FUNC_2(T_, t_, n_, ...) \
49 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
50 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_1(T_, t_, __VA_ARGS__))
51#define COMMS_FIELD_ACC_FUNC_3(T_, t_, n_, ...) \
52 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
53 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_2(T_, t_, __VA_ARGS__))
54#define COMMS_FIELD_ACC_FUNC_4(T_, t_, n_, ...) \
55 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
56 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_3(T_, t_, __VA_ARGS__))
57#define COMMS_FIELD_ACC_FUNC_5(T_, t_, n_, ...) \
58 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
59 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_4(T_, t_, __VA_ARGS__))
60#define COMMS_FIELD_ACC_FUNC_6(T_, t_, n_, ...) \
61 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
62 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_5(T_, t_, __VA_ARGS__))
63#define COMMS_FIELD_ACC_FUNC_7(T_, t_, n_, ...) \
64 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
65 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_6(T_, t_, __VA_ARGS__))
66#define COMMS_FIELD_ACC_FUNC_8(T_, t_, n_, ...) \
67 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
68 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_7(T_, t_, __VA_ARGS__))
69#define COMMS_FIELD_ACC_FUNC_9(T_, t_, n_, ...) \
70 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
71 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_8(T_, t_, __VA_ARGS__))
72#define COMMS_FIELD_ACC_FUNC_10(T_, t_, n_, ...) \
73 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
74 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_9(T_, t_, __VA_ARGS__))
75#define COMMS_FIELD_ACC_FUNC_11(T_, t_, n_, ...) \
76 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
77 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_10(T_, t_, __VA_ARGS__))
78#define COMMS_FIELD_ACC_FUNC_12(T_, t_, n_, ...) \
79 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
80 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_11(T_, t_, __VA_ARGS__))
81#define COMMS_FIELD_ACC_FUNC_13(T_, t_, n_, ...) \
82 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
83 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_12(T_, t_, __VA_ARGS__))
84#define COMMS_FIELD_ACC_FUNC_14(T_, t_, n_, ...) \
85 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
86 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_13(T_, t_, __VA_ARGS__))
87#define COMMS_FIELD_ACC_FUNC_15(T_, t_, n_, ...) \
88 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
89 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_14(T_, t_, __VA_ARGS__))
90#define COMMS_FIELD_ACC_FUNC_16(T_, t_, n_, ...) \
91 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
92 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_15(T_, t_, __VA_ARGS__))
93#define COMMS_FIELD_ACC_FUNC_17(T_, t_, n_, ...) \
94 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
95 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_16(T_, t_, __VA_ARGS__))
96#define COMMS_FIELD_ACC_FUNC_18(T_, t_, n_, ...) \
97 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
98 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_17(T_, t_, __VA_ARGS__))
99#define COMMS_FIELD_ACC_FUNC_19(T_, t_, n_, ...) \
100 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
101 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_18(T_, t_, __VA_ARGS__))
102#define COMMS_FIELD_ACC_FUNC_20(T_, t_, n_, ...) \
103 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
104 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_19(T_, t_, __VA_ARGS__))
105#define COMMS_FIELD_ACC_FUNC_21(T_, t_, n_, ...) \
106 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
107 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_20(T_, t_, __VA_ARGS__))
108#define COMMS_FIELD_ACC_FUNC_22(T_, t_, n_, ...) \
109 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
110 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_21(T_, t_, __VA_ARGS__))
111#define COMMS_FIELD_ACC_FUNC_23(T_, t_, n_, ...) \
112 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
113 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_22(T_, t_, __VA_ARGS__))
114#define COMMS_FIELD_ACC_FUNC_24(T_, t_, n_, ...) \
115 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
116 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_23(T_, t_, __VA_ARGS__))
117#define COMMS_FIELD_ACC_FUNC_25(T_, t_, n_, ...) \
118 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
119 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_24(T_, t_, __VA_ARGS__))
120#define COMMS_FIELD_ACC_FUNC_26(T_, t_, n_, ...) \
121 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
122 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_25(T_, t_, __VA_ARGS__))
123#define COMMS_FIELD_ACC_FUNC_27(T_, t_, n_, ...) \
124 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
125 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_26(T_, t_, __VA_ARGS__))
126#define COMMS_FIELD_ACC_FUNC_28(T_, t_, n_, ...) \
127 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
128 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_27(T_, t_, __VA_ARGS__))
129#define COMMS_FIELD_ACC_FUNC_29(T_, t_, n_, ...) \
130 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
131 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_28(T_, t_, __VA_ARGS__))
132#define COMMS_FIELD_ACC_FUNC_30(T_, t_, n_, ...) \
133 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
134 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_29(T_, t_, __VA_ARGS__))
135#define COMMS_FIELD_ACC_FUNC_31(T_, t_, n_, ...) \
136 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
137 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_30(T_, t_, __VA_ARGS__))
138#define COMMS_FIELD_ACC_FUNC_32(T_, t_, n_, ...) \
139 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
140 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_31(T_, t_, __VA_ARGS__))
141#define COMMS_FIELD_ACC_FUNC_33(T_, t_, n_, ...) \
142 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
143 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_32(T_, t_, __VA_ARGS__))
144#define COMMS_FIELD_ACC_FUNC_34(T_, t_, n_, ...) \
145 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
146 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_33(T_, t_, __VA_ARGS__))
147#define COMMS_FIELD_ACC_FUNC_35(T_, t_, n_, ...) \
148 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
149 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_34(T_, t_, __VA_ARGS__))
150#define COMMS_FIELD_ACC_FUNC_36(T_, t_, n_, ...) \
151 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
152 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_35(T_, t_, __VA_ARGS__))
153#define COMMS_FIELD_ACC_FUNC_37(T_, t_, n_, ...) \
154 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
155 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_36(T_, t_, __VA_ARGS__))
156#define COMMS_FIELD_ACC_FUNC_38(T_, t_, n_, ...) \
157 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
158 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_37(T_, t_, __VA_ARGS__))
159#define COMMS_FIELD_ACC_FUNC_39(T_, t_, n_, ...) \
160 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
161 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_38(T_, t_, __VA_ARGS__))
162#define COMMS_FIELD_ACC_FUNC_40(T_, t_, n_, ...) \
163 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
164 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_39(T_, t_, __VA_ARGS__))
165#define COMMS_FIELD_ACC_FUNC_41(T_, t_, n_, ...) \
166 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
167 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_40(T_, t_, __VA_ARGS__))
168#define COMMS_FIELD_ACC_FUNC_42(T_, t_, n_, ...) \
169 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
170 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_41(T_, t_, __VA_ARGS__))
171#define COMMS_FIELD_ACC_FUNC_43(T_, t_, n_, ...) \
172 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
173 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_42(T_, t_, __VA_ARGS__))
174#define COMMS_FIELD_ACC_FUNC_44(T_, t_, n_, ...) \
175 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
176 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_43(T_, t_, __VA_ARGS__))
177#define COMMS_FIELD_ACC_FUNC_45(T_, t_, n_, ...) \
178 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
179 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_44(T_, t_, __VA_ARGS__))
180#define COMMS_FIELD_ACC_FUNC_46(T_, t_, n_, ...) \
181 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
182 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_45(T_, t_, __VA_ARGS__))
183#define COMMS_FIELD_ACC_FUNC_47(T_, t_, n_, ...) \
184 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
185 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_46(T_, t_, __VA_ARGS__))
186#define COMMS_FIELD_ACC_FUNC_48(T_, t_, n_, ...) \
187 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
188 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_47(T_, t_, __VA_ARGS__))
189#define COMMS_FIELD_ACC_FUNC_49(T_, t_, n_, ...) \
190 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
191 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_48(T_, t_, __VA_ARGS__))
192#define COMMS_FIELD_ACC_FUNC_50(T_, t_, n_, ...) \
193 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
194 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_49(T_, t_, __VA_ARGS__))
195#define COMMS_FIELD_ACC_FUNC_51(T_, t_, n_, ...) \
196 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
197 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_49(T_, t_, __VA_ARGS__))
198#define COMMS_FIELD_ACC_FUNC_52(T_, t_, n_, ...) \
199 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
200 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_51(T_, t_, __VA_ARGS__))
201#define COMMS_FIELD_ACC_FUNC_53(T_, t_, n_, ...) \
202 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
203 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_52(T_, t_, __VA_ARGS__))
204#define COMMS_FIELD_ACC_FUNC_54(T_, t_, n_, ...) \
205 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
206 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_53(T_, t_, __VA_ARGS__))
207#define COMMS_FIELD_ACC_FUNC_55(T_, t_, n_, ...) \
208 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
209 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_54(T_, t_, __VA_ARGS__))
210#define COMMS_FIELD_ACC_FUNC_56(T_, t_, n_, ...) \
211 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
212 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_55(T_, t_, __VA_ARGS__))
213#define COMMS_FIELD_ACC_FUNC_57(T_, t_, n_, ...) \
214 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
215 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_56(T_, t_, __VA_ARGS__))
216#define COMMS_FIELD_ACC_FUNC_58(T_, t_, n_, ...) \
217 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
218 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_57(T_, t_, __VA_ARGS__))
219#define COMMS_FIELD_ACC_FUNC_59(T_, t_, n_, ...) \
220 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
221 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_58(T_, t_, __VA_ARGS__))
222#define COMMS_FIELD_ACC_FUNC_60(T_, t_, n_, ...) \
223 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
224 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_59(T_, t_, __VA_ARGS__))
225#define COMMS_FIELD_ACC_FUNC_61(T_, t_, n_, ...) \
226 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
227 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_60(T_, t_, __VA_ARGS__))
228#define COMMS_FIELD_ACC_FUNC_62(T_, t_, n_, ...) \
229 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
230 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_61(T_, t_, __VA_ARGS__))
231#define COMMS_FIELD_ACC_FUNC_63(T_, t_, n_, ...) \
232 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
233 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_62(T_, t_, __VA_ARGS__))
234#define COMMS_FIELD_ACC_FUNC_64(T_, t_, n_, ...) \
235 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
236 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_63(T_, t_, __VA_ARGS__))
237#define COMMS_FIELD_ACC_FUNC_65(T_, t_, n_, ...) \
238 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
239 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_64(T_, t_, __VA_ARGS__))
240#define COMMS_FIELD_ACC_FUNC_66(T_, t_, n_, ...) \
241 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
242 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_65(T_, t_, __VA_ARGS__))
243#define COMMS_FIELD_ACC_FUNC_67(T_, t_, n_, ...) \
244 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
245 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_66(T_, t_, __VA_ARGS__))
246#define COMMS_FIELD_ACC_FUNC_68(T_, t_, n_, ...) \
247 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
248 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_67(T_, t_, __VA_ARGS__))
249#define COMMS_FIELD_ACC_FUNC_69(T_, t_, n_, ...) \
250 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
251 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_68(T_, t_, __VA_ARGS__))
252#define COMMS_FIELD_ACC_FUNC_70(T_, t_, n_, ...) \
253 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
254 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_69(T_, t_, __VA_ARGS__))
255#define COMMS_FIELD_ACC_FUNC_71(T_, t_, n_, ...) \
256 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
257 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_70(T_, t_, __VA_ARGS__))
258#define COMMS_FIELD_ACC_FUNC_72(T_, t_, n_, ...) \
259 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
260 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_71(T_, t_, __VA_ARGS__))
261#define COMMS_FIELD_ACC_FUNC_73(T_, t_, n_, ...) \
262 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
263 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_72(T_, t_, __VA_ARGS__))
264#define COMMS_FIELD_ACC_FUNC_74(T_, t_, n_, ...) \
265 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
266 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_73(T_, t_, __VA_ARGS__))
267#define COMMS_FIELD_ACC_FUNC_75(T_, t_, n_, ...) \
268 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
269 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_74(T_, t_, __VA_ARGS__))
270#define COMMS_FIELD_ACC_FUNC_76(T_, t_, n_, ...) \
271 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
272 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_75(T_, t_, __VA_ARGS__))
273#define COMMS_FIELD_ACC_FUNC_77(T_, t_, n_, ...) \
274 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
275 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_76(T_, t_, __VA_ARGS__))
276#define COMMS_FIELD_ACC_FUNC_78(T_, t_, n_, ...) \
277 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
278 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_77(T_, t_, __VA_ARGS__))
279#define COMMS_FIELD_ACC_FUNC_79(T_, t_, n_, ...) \
280 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
281 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_78(T_, t_, __VA_ARGS__))
282#define COMMS_FIELD_ACC_FUNC_80(T_, t_, n_, ...) \
283 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
284 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_79(T_, t_, __VA_ARGS__))
285#define COMMS_FIELD_ACC_FUNC_81(T_, t_, n_, ...) \
286 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
287 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_80(T_, t_, __VA_ARGS__))
288#define COMMS_FIELD_ACC_FUNC_82(T_, t_, n_, ...) \
289 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
290 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_81(T_, t_, __VA_ARGS__))
291#define COMMS_FIELD_ACC_FUNC_83(T_, t_, n_, ...) \
292 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
293 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_82(T_, t_, __VA_ARGS__))
294#define COMMS_FIELD_ACC_FUNC_84(T_, t_, n_, ...) \
295 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
296 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_83(T_, t_, __VA_ARGS__))
297#define COMMS_FIELD_ACC_FUNC_85(T_, t_, n_, ...) \
298 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
299 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_84(T_, t_, __VA_ARGS__))
300#define COMMS_FIELD_ACC_FUNC_86(T_, t_, n_, ...) \
301 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
302 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_85(T_, t_, __VA_ARGS__))
303#define COMMS_FIELD_ACC_FUNC_87(T_, t_, n_, ...) \
304 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
305 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_86(T_, t_, __VA_ARGS__))
306#define COMMS_FIELD_ACC_FUNC_88(T_, t_, n_, ...) \
307 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
308 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_87(T_, t_, __VA_ARGS__))
309#define COMMS_FIELD_ACC_FUNC_89(T_, t_, n_, ...) \
310 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
311 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_88(T_, t_, __VA_ARGS__))
312#define COMMS_FIELD_ACC_FUNC_90(T_, t_, n_, ...) \
313 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
314 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_89(T_, t_, __VA_ARGS__))
315#define COMMS_FIELD_ACC_FUNC_91(T_, t_, n_, ...) \
316 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
317 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_90(T_, t_, __VA_ARGS__))
318#define COMMS_FIELD_ACC_FUNC_92(T_, t_, n_, ...) \
319 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
320 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_91(T_, t_, __VA_ARGS__))
321#define COMMS_FIELD_ACC_FUNC_93(T_, t_, n_, ...) \
322 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
323 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_92(T_, t_, __VA_ARGS__))
324#define COMMS_FIELD_ACC_FUNC_94(T_, t_, n_, ...) \
325 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
326 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_93(T_, t_, __VA_ARGS__))
327#define COMMS_FIELD_ACC_FUNC_95(T_, t_, n_, ...) \
328 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
329 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_94(T_, t_, __VA_ARGS__))
330#define COMMS_FIELD_ACC_FUNC_96(T_, t_, n_, ...) \
331 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
332 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_95(T_, t_, __VA_ARGS__))
333#define COMMS_FIELD_ACC_FUNC_97(T_, t_, n_, ...) \
334 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
335 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_96(T_, t_, __VA_ARGS__))
336#define COMMS_FIELD_ACC_FUNC_98(T_, t_, n_, ...) \
337 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
338 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_97(T_, t_, __VA_ARGS__))
339#define COMMS_FIELD_ACC_FUNC_99(T_, t_, n_, ...) \
340 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
341 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_98(T_, t_, __VA_ARGS__))
342#define COMMS_FIELD_ACC_FUNC_100(T_, t_, n_, ...) \
343 COMMS_FIELD_ACC_FUNC(T_, t_, n_) \
344 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_99(T_, t_, __VA_ARGS__))
345
346#define COMMS_CHOOSE_FIELD_ACC_FUNC_(N, T_, t_, ...) COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_ ## N(T_, t_, __VA_ARGS__))
347#define COMMS_CHOOSE_FIELD_ACC_FUNC(N, T_, t_, ...) COMMS_EXPAND(COMMS_CHOOSE_FIELD_ACC_FUNC_(N, T_, t_, __VA_ARGS__))
348#define COMMS_DO_FIELD_ACC_FUNC(T_, t_, ...) \
349 COMMS_EXPAND(COMMS_CHOOSE_FIELD_ACC_FUNC(COMMS_NUM_ARGS(__VA_ARGS__), T_, t_, __VA_ARGS__))
350
351#define COMMS_DEFINE_FIELD_ENUM(...) COMMS_EXPAND(COMMS_DEFINE_ENUM(FieldIdx, __VA_ARGS__));
352
353// ----------------------------------------------
354
355#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
356 typename std::tuple_element<COMMS_CONCATENATE(FieldIdx_, n_), ValueType>::type& COMMS_CONCATENATE(field_, n_)() {\
357 return std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(value()); \
358 } \
359 const typename std::tuple_element<COMMS_CONCATENATE(FieldIdx_, n_), ValueType>::type& COMMS_CONCATENATE(field_, n_)() const {\
360 return std::get<COMMS_CONCATENATE(FieldIdx_, n_)>(value()); \
361 }
362
363#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_1(n_) COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_)
364#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_2(n_, ...) \
365 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
366 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_1(__VA_ARGS__))
367#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_3(n_, ...) \
368 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
369 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_2(__VA_ARGS__))
370#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_4(n_, ...) \
371 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
372 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_3(__VA_ARGS__))
373#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_5(n_, ...) \
374 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
375 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_4(__VA_ARGS__))
376#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_6(n_, ...) \
377 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
378 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_5(__VA_ARGS__))
379#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_7(n_, ...) \
380 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
381 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_6(__VA_ARGS__))
382#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_8(n_, ...) \
383 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
384 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_7(__VA_ARGS__))
385#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_9(n_, ...) \
386 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
387 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_8(__VA_ARGS__))
388#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_10(n_, ...) \
389 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
390 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_9(__VA_ARGS__))
391#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_11(n_, ...) \
392 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
393 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_10(__VA_ARGS__))
394#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_12(n_, ...) \
395 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
396 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_11(__VA_ARGS__))
397#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_13(n_, ...) \
398 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
399 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_12(__VA_ARGS__))
400#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_14(n_, ...) \
401 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
402 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_13(__VA_ARGS__))
403#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_15(n_, ...) \
404 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
405 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_14(__VA_ARGS__))
406#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_16(n_, ...) \
407 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
408 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_15(__VA_ARGS__))
409#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_17(n_, ...) \
410 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
411 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_16(__VA_ARGS__))
412#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_18(n_, ...) \
413 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
414 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_17(__VA_ARGS__))
415#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_19(n_, ...) \
416 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
417 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_18(__VA_ARGS__))
418#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_20(n_, ...) \
419 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
420 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_19(__VA_ARGS__))
421#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_21(n_, ...) \
422 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
423 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_20(__VA_ARGS__))
424#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_22(n_, ...) \
425 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
426 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_21(__VA_ARGS__))
427#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_23(n_, ...) \
428 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
429 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_22(__VA_ARGS__))
430#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_24(n_, ...) \
431 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
432 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_23(__VA_ARGS__))
433#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_25(n_, ...) \
434 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
435 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_24(__VA_ARGS__))
436#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_26(n_, ...) \
437 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
438 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_25(__VA_ARGS__))
439#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_27(n_, ...) \
440 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
441 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_26(__VA_ARGS__))
442#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_28(n_, ...) \
443 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
444 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_27(__VA_ARGS__))
445#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_29(n_, ...) \
446 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
447 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_28(__VA_ARGS__))
448#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_30(n_, ...) \
449 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
450 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_29(__VA_ARGS__))
451#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_31(n_, ...) \
452 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
453 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_30(__VA_ARGS__))
454#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_32(n_, ...) \
455 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
456 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_31(__VA_ARGS__))
457#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_33(n_, ...) \
458 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
459 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_32(__VA_ARGS__))
460#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_34(n_, ...) \
461 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
462 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_33(__VA_ARGS__))
463#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_35(n_, ...) \
464 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
465 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_34(__VA_ARGS__))
466#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_36(n_, ...) \
467 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
468 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_35(__VA_ARGS__))
469#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_37(n_, ...) \
470 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
471 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_36(__VA_ARGS__))
472#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_38(n_, ...) \
473 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
474 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_37(__VA_ARGS__))
475#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_39(n_, ...) \
476 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
477 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_38(__VA_ARGS__))
478#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_40(n_, ...) \
479 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
480 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_39(__VA_ARGS__))
481#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_41(n_, ...) \
482 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
483 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_40(__VA_ARGS__))
484#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_42(n_, ...) \
485 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
486 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_41(__VA_ARGS__))
487#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_43(n_, ...) \
488 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
489 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_42(__VA_ARGS__))
490#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_44(n_, ...) \
491 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
492 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_43(__VA_ARGS__))
493#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_45(n_, ...) \
494 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
495 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_44(__VA_ARGS__))
496#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_46(n_, ...) \
497 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
498 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_45(__VA_ARGS__))
499#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_47(n_, ...) \
500 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
501 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_46(__VA_ARGS__))
502#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_48(n_, ...) \
503 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
504 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_47(__VA_ARGS__))
505#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_49(n_, ...) \
506 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
507 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_48(__VA_ARGS__))
508#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_50(n_, ...) \
509 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
510 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_49(__VA_ARGS__))
511#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_51(n_, ...) \
512 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
513 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_50(__VA_ARGS__))
514#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_52(n_, ...) \
515 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
516 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_51(__VA_ARGS__))
517#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_53(n_, ...) \
518 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
519 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_52(__VA_ARGS__))
520#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_54(n_, ...) \
521 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
522 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_53(__VA_ARGS__))
523#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_55(n_, ...) \
524 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
525 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_54(__VA_ARGS__))
526#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_56(n_, ...) \
527 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
528 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_55(__VA_ARGS__))
529#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_57(n_, ...) \
530 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
531 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_56(__VA_ARGS__))
532#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_58(n_, ...) \
533 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
534 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_57(__VA_ARGS__))
535#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_59(n_, ...) \
536 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
537 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_58(__VA_ARGS__))
538#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_60(n_, ...) \
539 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
540 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_59(__VA_ARGS__))
541#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_61(n_, ...) \
542 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
543 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_60(__VA_ARGS__))
544#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_62(n_, ...) \
545 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
546 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_61(__VA_ARGS__))
547#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_63(n_, ...) \
548 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
549 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_62(__VA_ARGS__))
550#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_64(n_, ...) \
551 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
552 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_63(__VA_ARGS__))
553#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_65(n_, ...) \
554 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
555 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_64(__VA_ARGS__))
556#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_66(n_, ...) \
557 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
558 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_65(__VA_ARGS__))
559#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_67(n_, ...) \
560 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
561 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_66(__VA_ARGS__))
562#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_68(n_, ...) \
563 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
564 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_67(__VA_ARGS__))
565#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_69(n_, ...) \
566 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
567 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_68(__VA_ARGS__))
568#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_70(n_, ...) \
569 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
570 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_69(__VA_ARGS__))
571#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_71(n_, ...) \
572 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
573 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_70(__VA_ARGS__))
574#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_72(n_, ...) \
575 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
576 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_71(__VA_ARGS__))
577#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_73(n_, ...) \
578 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
579 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_72(__VA_ARGS__))
580#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_74(n_, ...) \
581 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
582 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_73(__VA_ARGS__))
583#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_75(n_, ...) \
584 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
585 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_74(__VA_ARGS__))
586#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_76(n_, ...) \
587 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
588 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_75(__VA_ARGS__))
589#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_77(n_, ...) \
590 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
591 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_76(__VA_ARGS__))
592#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_78(n_, ...) \
593 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
594 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_77(__VA_ARGS__))
595#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_79(n_, ...) \
596 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
597 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_78(__VA_ARGS__))
598#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_80(n_, ...) \
599 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
600 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_79(__VA_ARGS__))
601#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_81(n_, ...) \
602 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
603 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_80(__VA_ARGS__))
604#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_82(n_, ...) \
605 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
606 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_81(__VA_ARGS__))
607#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_83(n_, ...) \
608 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
609 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_82(__VA_ARGS__))
610#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_84(n_, ...) \
611 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
612 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_83(__VA_ARGS__))
613#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_85(n_, ...) \
614 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
615 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_84(__VA_ARGS__))
616#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_86(n_, ...) \
617 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
618 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_85(__VA_ARGS__))
619#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_87(n_, ...) \
620 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
621 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_86(__VA_ARGS__))
622#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_88(n_, ...) \
623 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
624 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_87(__VA_ARGS__))
625#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_89(n_, ...) \
626 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
627 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_88(__VA_ARGS__))
628#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_90(n_, ...) \
629 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
630 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_89(__VA_ARGS__))
631#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_91(n_, ...) \
632 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
633 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_90(__VA_ARGS__))
634#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_92(n_, ...) \
635 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
636 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_91(__VA_ARGS__))
637#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_93(n_, ...) \
638 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
639 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_92(__VA_ARGS__))
640#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_94(n_, ...) \
641 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
642 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_93(__VA_ARGS__))
643#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_95(n_, ...) \
644 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
645 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_94(__VA_ARGS__))
646#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_96(n_, ...) \
647 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
648 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_95(__VA_ARGS__))
649#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_97(n_, ...) \
650 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
651 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_96(__VA_ARGS__))
652#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_98(n_, ...) \
653 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
654 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_97(__VA_ARGS__))
655#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_99(n_, ...) \
656 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
657 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_98(__VA_ARGS__))
658#define COMMS_FIELD_ACC_FUNC_NOTEMPLATE_100(n_, ...) \
659 COMMS_FIELD_ACC_FUNC_NOTEMPLATE(n_) \
660 COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_99(__VA_ARGS__))
661
662#define COMMS_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE_(N, ...) COMMS_EXPAND(COMMS_FIELD_ACC_FUNC_NOTEMPLATE_ ## N(__VA_ARGS__))
663#define COMMS_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE(N, ...) COMMS_EXPAND(COMMS_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE_(N, __VA_ARGS__))
664#define COMMS_DO_FIELD_ACC_FUNC_NOTEMPLATE(...) \
665 COMMS_EXPAND(COMMS_CHOOSE_FIELD_ACC_FUNC_NOTEMPLATE(COMMS_NUM_ARGS(__VA_ARGS__), __VA_ARGS__))
666
667// ----------------------------------------------
668
669#define COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
670 using COMMS_CONCATENATE(P_, n_) = typename std::tuple_element<COMMS_CONCATENATE(pref_, n_), T_>::type;
671
672#define COMMS_FIELD_TYPEDEF_1(T_, P_, pref_, n_) COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_)
673#define COMMS_FIELD_TYPEDEF_2(T_, P_, pref_, n_, ...) \
674 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
675 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_1(T_, P_, pref_, __VA_ARGS__))
676#define COMMS_FIELD_TYPEDEF_3(T_, P_, pref_, n_, ...) \
677 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
678 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_2(T_, P_, pref_, __VA_ARGS__))
679#define COMMS_FIELD_TYPEDEF_4(T_, P_, pref_, n_, ...) \
680 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
681 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_3(T_, P_, pref_, __VA_ARGS__))
682#define COMMS_FIELD_TYPEDEF_5(T_, P_, pref_, n_, ...) \
683 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
684 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_4(T_, P_, pref_, __VA_ARGS__))
685#define COMMS_FIELD_TYPEDEF_6(T_, P_, pref_, n_, ...) \
686 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
687 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_5(T_, P_, pref_, __VA_ARGS__))
688#define COMMS_FIELD_TYPEDEF_7(T_, P_, pref_, n_, ...) \
689 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
690 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_6(T_, P_, pref_, __VA_ARGS__))
691#define COMMS_FIELD_TYPEDEF_8(T_, P_, pref_, n_, ...) \
692 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
693 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_7(T_, P_, pref_, __VA_ARGS__))
694#define COMMS_FIELD_TYPEDEF_9(T_, P_, pref_, n_, ...) \
695 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
696 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_8(T_, P_, pref_, __VA_ARGS__))
697#define COMMS_FIELD_TYPEDEF_10(T_, P_, pref_, n_, ...) \
698 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
699 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_9(T_, P_, pref_, __VA_ARGS__))
700#define COMMS_FIELD_TYPEDEF_11(T_, P_, pref_, n_, ...) \
701 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
702 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_10(T_, P_, pref_, __VA_ARGS__))
703#define COMMS_FIELD_TYPEDEF_12(T_, P_, pref_, n_, ...) \
704 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
705 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_11(T_, P_, pref_, __VA_ARGS__))
706#define COMMS_FIELD_TYPEDEF_13(T_, P_, pref_, n_, ...) \
707 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
708 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_12(T_, P_, pref_, __VA_ARGS__))
709#define COMMS_FIELD_TYPEDEF_14(T_, P_, pref_, n_, ...) \
710 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
711 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_13(T_, P_, pref_, __VA_ARGS__))
712#define COMMS_FIELD_TYPEDEF_15(T_, P_, pref_, n_, ...) \
713 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
714 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_14(T_, P_, pref_, __VA_ARGS__))
715#define COMMS_FIELD_TYPEDEF_16(T_, P_, pref_, n_, ...) \
716 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
717 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_15(T_, P_, pref_, __VA_ARGS__))
718#define COMMS_FIELD_TYPEDEF_17(T_, P_, pref_, n_, ...) \
719 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
720 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_16(T_, P_, pref_, __VA_ARGS__))
721#define COMMS_FIELD_TYPEDEF_18(T_, P_, pref_, n_, ...) \
722 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
723 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_17(T_, P_, pref_, __VA_ARGS__))
724#define COMMS_FIELD_TYPEDEF_19(T_, P_, pref_, n_, ...) \
725 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
726 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_18(T_, P_, pref_, __VA_ARGS__))
727#define COMMS_FIELD_TYPEDEF_20(T_, P_, pref_, n_, ...) \
728 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
729 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_19(T_, P_, pref_, __VA_ARGS__))
730#define COMMS_FIELD_TYPEDEF_21(T_, P_, pref_, n_, ...) \
731 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
732 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_20(T_, P_, pref_, __VA_ARGS__))
733#define COMMS_FIELD_TYPEDEF_22(T_, P_, pref_, n_, ...) \
734 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
735 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_21(T_, P_, pref_, __VA_ARGS__))
736#define COMMS_FIELD_TYPEDEF_23(T_, P_, pref_, n_, ...) \
737 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
738 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_22(T_, P_, pref_, __VA_ARGS__))
739#define COMMS_FIELD_TYPEDEF_24(T_, P_, pref_, n_, ...) \
740 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
741 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_23(T_, P_, pref_, __VA_ARGS__))
742#define COMMS_FIELD_TYPEDEF_25(T_, P_, pref_, n_, ...) \
743 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
744 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_24(T_, P_, pref_, __VA_ARGS__))
745#define COMMS_FIELD_TYPEDEF_26(T_, P_, pref_, n_, ...) \
746 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
747 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_25(T_, P_, pref_, __VA_ARGS__))
748#define COMMS_FIELD_TYPEDEF_27(T_, P_, pref_, n_, ...) \
749 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
750 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_26(T_, P_, pref_, __VA_ARGS__))
751#define COMMS_FIELD_TYPEDEF_28(T_, P_, pref_, n_, ...) \
752 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
753 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_27(T_, P_, pref_, __VA_ARGS__))
754#define COMMS_FIELD_TYPEDEF_29(T_, P_, pref_, n_, ...) \
755 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
756 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_28(T_, P_, pref_, __VA_ARGS__))
757#define COMMS_FIELD_TYPEDEF_30(T_, P_, pref_, n_, ...) \
758 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
759 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_29(T_, P_, pref_, __VA_ARGS__))
760#define COMMS_FIELD_TYPEDEF_31(T_, P_, pref_, n_, ...) \
761 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
762 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_30(T_, P_, pref_, __VA_ARGS__))
763#define COMMS_FIELD_TYPEDEF_32(T_, P_, pref_, n_, ...) \
764 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
765 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_31(T_, P_, pref_, __VA_ARGS__))
766#define COMMS_FIELD_TYPEDEF_33(T_, P_, pref_, n_, ...) \
767 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
768 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_32(T_, P_, pref_, __VA_ARGS__))
769#define COMMS_FIELD_TYPEDEF_34(T_, P_, pref_, n_, ...) \
770 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
771 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_33(T_, P_, pref_, __VA_ARGS__))
772#define COMMS_FIELD_TYPEDEF_35(T_, P_, pref_, n_, ...) \
773 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
774 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_34(T_, P_, pref_, __VA_ARGS__))
775#define COMMS_FIELD_TYPEDEF_36(T_, P_, pref_, n_, ...) \
776 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
777 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_35(T_, P_, pref_, __VA_ARGS__))
778#define COMMS_FIELD_TYPEDEF_37(T_, P_, pref_, n_, ...) \
779 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
780 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_36(T_, P_, pref_, __VA_ARGS__))
781#define COMMS_FIELD_TYPEDEF_38(T_, P_, pref_, n_, ...) \
782 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
783 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_37(T_, P_, pref_, __VA_ARGS__))
784#define COMMS_FIELD_TYPEDEF_39(T_, P_, pref_, n_, ...) \
785 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
786 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_38(T_, P_, pref_, __VA_ARGS__))
787#define COMMS_FIELD_TYPEDEF_40(T_, P_, pref_, n_, ...) \
788 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
789 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_39(T_, P_, pref_, __VA_ARGS__))
790#define COMMS_FIELD_TYPEDEF_41(T_, P_, pref_, n_, ...) \
791 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
792 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_40(T_, P_, pref_, __VA_ARGS__))
793#define COMMS_FIELD_TYPEDEF_42(T_, P_, pref_, n_, ...) \
794 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
795 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_41(T_, P_, pref_, __VA_ARGS__))
796#define COMMS_FIELD_TYPEDEF_43(T_, P_, pref_, n_, ...) \
797 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
798 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_42(T_, P_, pref_, __VA_ARGS__))
799#define COMMS_FIELD_TYPEDEF_44(T_, P_, pref_, n_, ...) \
800 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
801 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_43(T_, P_, pref_, __VA_ARGS__))
802#define COMMS_FIELD_TYPEDEF_45(T_, P_, pref_, n_, ...) \
803 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
804 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_44(T_, P_, pref_, __VA_ARGS__))
805#define COMMS_FIELD_TYPEDEF_46(T_, P_, pref_, n_, ...) \
806 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
807 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_45(T_, P_, pref_, __VA_ARGS__))
808#define COMMS_FIELD_TYPEDEF_47(T_, P_, pref_, n_, ...) \
809 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
810 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_46(T_, P_, pref_, __VA_ARGS__))
811#define COMMS_FIELD_TYPEDEF_48(T_, P_, pref_, n_, ...) \
812 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
813 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_47(T_, P_, pref_, __VA_ARGS__))
814#define COMMS_FIELD_TYPEDEF_49(T_, P_, pref_, n_, ...) \
815 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
816 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_48(T_, P_, pref_, __VA_ARGS__))
817#define COMMS_FIELD_TYPEDEF_50(T_, P_, pref_, n_, ...) \
818 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
819 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_49(T_, P_, pref_, __VA_ARGS__))
820#define COMMS_FIELD_TYPEDEF_51(T_, P_, pref_, n_, ...) \
821 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
822 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_50(T_, P_, pref_, __VA_ARGS__))
823#define COMMS_FIELD_TYPEDEF_52(T_, P_, pref_, n_, ...) \
824 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
825 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_51(T_, P_, pref_, __VA_ARGS__))
826#define COMMS_FIELD_TYPEDEF_53(T_, P_, pref_, n_, ...) \
827 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
828 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_52(T_, P_, pref_, __VA_ARGS__))
829#define COMMS_FIELD_TYPEDEF_54(T_, P_, pref_, n_, ...) \
830 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
831 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_53(T_, P_, pref_, __VA_ARGS__))
832#define COMMS_FIELD_TYPEDEF_55(T_, P_, pref_, n_, ...) \
833 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
834 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_54(T_, P_, pref_, __VA_ARGS__))
835#define COMMS_FIELD_TYPEDEF_56(T_, P_, pref_, n_, ...) \
836 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
837 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_55(T_, P_, pref_, __VA_ARGS__))
838#define COMMS_FIELD_TYPEDEF_57(T_, P_, pref_, n_, ...) \
839 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
840 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_56(T_, P_, pref_, __VA_ARGS__))
841#define COMMS_FIELD_TYPEDEF_58(T_, P_, pref_, n_, ...) \
842 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
843 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_57(T_, P_, pref_, __VA_ARGS__))
844#define COMMS_FIELD_TYPEDEF_59(T_, P_, pref_, n_, ...) \
845 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
846 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_58(T_, P_, pref_, __VA_ARGS__))
847#define COMMS_FIELD_TYPEDEF_60(T_, P_, pref_, n_, ...) \
848 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
849 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_59(T_, P_, pref_, __VA_ARGS__))
850#define COMMS_FIELD_TYPEDEF_61(T_, P_, pref_, n_, ...) \
851 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
852 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_60(T_, P_, pref_, __VA_ARGS__))
853#define COMMS_FIELD_TYPEDEF_62(T_, P_, pref_, n_, ...) \
854 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
855 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_61(T_, P_, pref_, __VA_ARGS__))
856#define COMMS_FIELD_TYPEDEF_63(T_, P_, pref_, n_, ...) \
857 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
858 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_62(T_, P_, pref_, __VA_ARGS__))
859#define COMMS_FIELD_TYPEDEF_64(T_, P_, pref_, n_, ...) \
860 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
861 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_63(T_, P_, pref_, __VA_ARGS__))
862#define COMMS_FIELD_TYPEDEF_65(T_, P_, pref_, n_, ...) \
863 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
864 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_64(T_, P_, pref_, __VA_ARGS__))
865#define COMMS_FIELD_TYPEDEF_66(T_, P_, pref_, n_, ...) \
866 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
867 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_65(T_, P_, pref_, __VA_ARGS__))
868#define COMMS_FIELD_TYPEDEF_67(T_, P_, pref_, n_, ...) \
869 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
870 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_66(T_, P_, pref_, __VA_ARGS__))
871#define COMMS_FIELD_TYPEDEF_68(T_, P_, pref_, n_, ...) \
872 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
873 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_67(T_, P_, pref_, __VA_ARGS__))
874#define COMMS_FIELD_TYPEDEF_69(T_, P_, pref_, n_, ...) \
875 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
876 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_68(T_, P_, pref_, __VA_ARGS__))
877#define COMMS_FIELD_TYPEDEF_70(T_, P_, pref_, n_, ...) \
878 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
879 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_69(T_, P_, pref_, __VA_ARGS__))
880#define COMMS_FIELD_TYPEDEF_71(T_, P_, pref_, n_, ...) \
881 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
882 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_70(T_, P_, pref_, __VA_ARGS__))
883#define COMMS_FIELD_TYPEDEF_72(T_, P_, pref_, n_, ...) \
884 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
885 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_71(T_, P_, pref_, __VA_ARGS__))
886#define COMMS_FIELD_TYPEDEF_73(T_, P_, pref_, n_, ...) \
887 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
888 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_72(T_, P_, pref_, __VA_ARGS__))
889#define COMMS_FIELD_TYPEDEF_74(T_, P_, pref_, n_, ...) \
890 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
891 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_73(T_, P_, pref_, __VA_ARGS__))
892#define COMMS_FIELD_TYPEDEF_75(T_, P_, pref_, n_, ...) \
893 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
894 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_74(T_, P_, pref_, __VA_ARGS__))
895#define COMMS_FIELD_TYPEDEF_76(T_, P_, pref_, n_, ...) \
896 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
897 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_75(T_, P_, pref_, __VA_ARGS__))
898#define COMMS_FIELD_TYPEDEF_77(T_, P_, pref_, n_, ...) \
899 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
900 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_76(T_, P_, pref_, __VA_ARGS__))
901#define COMMS_FIELD_TYPEDEF_78(T_, P_, pref_, n_, ...) \
902 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
903 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_77(T_, P_, pref_, __VA_ARGS__))
904#define COMMS_FIELD_TYPEDEF_79(T_, P_, pref_, n_, ...) \
905 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
906 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_78(T_, P_, pref_, __VA_ARGS__))
907#define COMMS_FIELD_TYPEDEF_80(T_, P_, pref_, n_, ...) \
908 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
909 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_79(T_, P_, pref_, __VA_ARGS__))
910#define COMMS_FIELD_TYPEDEF_81(T_, P_, pref_, n_, ...) \
911 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
912 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_80(T_, P_, pref_, __VA_ARGS__))
913#define COMMS_FIELD_TYPEDEF_82(T_, P_, pref_, n_, ...) \
914 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
915 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_81(T_, P_, pref_, __VA_ARGS__))
916#define COMMS_FIELD_TYPEDEF_83(T_, P_, pref_, n_, ...) \
917 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
918 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_82(T_, P_, pref_, __VA_ARGS__))
919#define COMMS_FIELD_TYPEDEF_84(T_, P_, pref_, n_, ...) \
920 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
921 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_83(T_, P_, pref_, __VA_ARGS__))
922#define COMMS_FIELD_TYPEDEF_85(T_, P_, pref_, n_, ...) \
923 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
924 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_84(T_, P_, pref_, __VA_ARGS__))
925#define COMMS_FIELD_TYPEDEF_86(T_, P_, pref_, n_, ...) \
926 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
927 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_85(T_, P_, pref_, __VA_ARGS__))
928#define COMMS_FIELD_TYPEDEF_87(T_, P_, pref_, n_, ...) \
929 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
930 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_86(T_, P_, pref_, __VA_ARGS__))
931#define COMMS_FIELD_TYPEDEF_88(T_, P_, pref_, n_, ...) \
932 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
933 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_87(T_, P_, pref_, __VA_ARGS__))
934#define COMMS_FIELD_TYPEDEF_89(T_, P_, pref_, n_, ...) \
935 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
936 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_88(T_, P_, pref_, __VA_ARGS__))
937#define COMMS_FIELD_TYPEDEF_90(T_, P_, pref_, n_, ...) \
938 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
939 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_89(T_, P_, pref_, __VA_ARGS__))
940#define COMMS_FIELD_TYPEDEF_91(T_, P_, pref_, n_, ...) \
941 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
942 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_90(T_, P_, pref_, __VA_ARGS__))
943#define COMMS_FIELD_TYPEDEF_92(T_, P_, pref_, n_, ...) \
944 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
945 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_91(T_, P_, pref_, __VA_ARGS__))
946#define COMMS_FIELD_TYPEDEF_93(T_, P_, pref_, n_, ...) \
947 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
948 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_92(T_, P_, pref_, __VA_ARGS__))
949#define COMMS_FIELD_TYPEDEF_94(T_, P_, pref_, n_, ...) \
950 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
951 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_93(T_, P_, pref_, __VA_ARGS__))
952#define COMMS_FIELD_TYPEDEF_95(T_, P_, pref_, n_, ...) \
953 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
954 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_94(T_, P_, pref_, __VA_ARGS__))
955#define COMMS_FIELD_TYPEDEF_96(T_, P_, pref_, n_, ...) \
956 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
957 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_95(T_, P_, pref_, __VA_ARGS__))
958#define COMMS_FIELD_TYPEDEF_97(T_, P_, pref_, n_, ...) \
959 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
960 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_96(T_, P_, pref_, __VA_ARGS__))
961#define COMMS_FIELD_TYPEDEF_98(T_, P_, pref_, n_, ...) \
962 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
963 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_97(T_, P_, pref_, __VA_ARGS__))
964#define COMMS_FIELD_TYPEDEF_99(T_, P_, pref_, n_, ...) \
965 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
966 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_98(T_, P_, pref_, __VA_ARGS__))
967#define COMMS_FIELD_TYPEDEF_100(T_, P_, pref_, n_, ...) \
968 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
969 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_99(T_, P_, pref_, __VA_ARGS__))
970#define COMMS_FIELD_TYPEDEF_101(T_, P_, pref_, n_, ...) \
971 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
972 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_100(T_, P_, pref_, __VA_ARGS__))
973#define COMMS_FIELD_TYPEDEF_102(T_, P_, pref_, n_, ...) \
974 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
975 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_101(T_, P_, pref_, __VA_ARGS__))
976#define COMMS_FIELD_TYPEDEF_103(T_, P_, pref_, n_, ...) \
977 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
978 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_102(T_, P_, pref_, __VA_ARGS__))
979#define COMMS_FIELD_TYPEDEF_104(T_, P_, pref_, n_, ...) \
980 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
981 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_103(T_, P_, pref_, __VA_ARGS__))
982#define COMMS_FIELD_TYPEDEF_105(T_, P_, pref_, n_, ...) \
983 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
984 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_104(T_, P_, pref_, __VA_ARGS__))
985#define COMMS_FIELD_TYPEDEF_106(T_, P_, pref_, n_, ...) \
986 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
987 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_105(T_, P_, pref_, __VA_ARGS__))
988#define COMMS_FIELD_TYPEDEF_107(T_, P_, pref_, n_, ...) \
989 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
990 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_106(T_, P_, pref_, __VA_ARGS__))
991#define COMMS_FIELD_TYPEDEF_108(T_, P_, pref_, n_, ...) \
992 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
993 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_107(T_, P_, pref_, __VA_ARGS__))
994#define COMMS_FIELD_TYPEDEF_109(T_, P_, pref_, n_, ...) \
995 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
996 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_108(T_, P_, pref_, __VA_ARGS__))
997#define COMMS_FIELD_TYPEDEF_110(T_, P_, pref_, n_, ...) \
998 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
999 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_109(T_, P_, pref_, __VA_ARGS__))
1000#define COMMS_FIELD_TYPEDEF_111(T_, P_, pref_, n_, ...) \
1001 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1002 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_110(T_, P_, pref_, __VA_ARGS__))
1003#define COMMS_FIELD_TYPEDEF_112(T_, P_, pref_, n_, ...) \
1004 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1005 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_111(T_, P_, pref_, __VA_ARGS__))
1006#define COMMS_FIELD_TYPEDEF_113(T_, P_, pref_, n_, ...) \
1007 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1008 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_112(T_, P_, pref_, __VA_ARGS__))
1009#define COMMS_FIELD_TYPEDEF_114(T_, P_, pref_, n_, ...) \
1010 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1011 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_113(T_, P_, pref_, __VA_ARGS__))
1012#define COMMS_FIELD_TYPEDEF_115(T_, P_, pref_, n_, ...) \
1013 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1014 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_114(T_, P_, pref_, __VA_ARGS__))
1015#define COMMS_FIELD_TYPEDEF_116(T_, P_, pref_, n_, ...) \
1016 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1017 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_115(T_, P_, pref_, __VA_ARGS__))
1018#define COMMS_FIELD_TYPEDEF_117(T_, P_, pref_, n_, ...) \
1019 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1020 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_116(T_, P_, pref_, __VA_ARGS__))
1021#define COMMS_FIELD_TYPEDEF_118(T_, P_, pref_, n_, ...) \
1022 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1023 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_117(T_, P_, pref_, __VA_ARGS__))
1024#define COMMS_FIELD_TYPEDEF_119(T_, P_, pref_, n_, ...) \
1025 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1026 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_118(T_, P_, pref_, __VA_ARGS__))
1027#define COMMS_FIELD_TYPEDEF_120(T_, P_, pref_, n_, ...) \
1028 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1029 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_119(T_, P_, pref_, __VA_ARGS__))
1030#define COMMS_FIELD_TYPEDEF_121(T_, P_, pref_, n_, ...) \
1031 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1032 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_120(T_, P_, pref_, __VA_ARGS__))
1033#define COMMS_FIELD_TYPEDEF_122(T_, P_, pref_, n_, ...) \
1034 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1035 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_121(T_, P_, pref_, __VA_ARGS__))
1036#define COMMS_FIELD_TYPEDEF_123(T_, P_, pref_, n_, ...) \
1037 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1038 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_122(T_, P_, pref_, __VA_ARGS__))
1039#define COMMS_FIELD_TYPEDEF_124(T_, P_, pref_, n_, ...) \
1040 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1041 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_123(T_, P_, pref_, __VA_ARGS__))
1042#define COMMS_FIELD_TYPEDEF_125(T_, P_, pref_, n_, ...) \
1043 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1044 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_124(T_, P_, pref_, __VA_ARGS__))
1045#define COMMS_FIELD_TYPEDEF_126(T_, P_, pref_, n_, ...) \
1046 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1047 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_125(T_, P_, pref_, __VA_ARGS__))
1048#define COMMS_FIELD_TYPEDEF_127(T_, P_, pref_, n_, ...) \
1049 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1050 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_126(T_, P_, pref_, __VA_ARGS__))
1051#define COMMS_FIELD_TYPEDEF_128(T_, P_, pref_, n_, ...) \
1052 COMMS_FIELD_TYPEDEF(T_, P_, pref_, n_) \
1053 COMMS_EXPAND(COMMS_FIELD_TYPEDEF_127(T_, P_, pref_, __VA_ARGS__))
1054
1055#define COMMS_CHOOSE_FIELD_TYPEDEF_(N, T_, P_, pref_, ...) COMMS_EXPAND(COMMS_FIELD_TYPEDEF_ ## N(T_, P_, pref_, __VA_ARGS__))
1056#define COMMS_CHOOSE_FIELD_TYPEDEF(N, T_, P_, pref_, ...) COMMS_EXPAND(COMMS_CHOOSE_FIELD_TYPEDEF_(N, T_, P_, pref_, __VA_ARGS__))
1057#define COMMS_DO_FIELD_TYPEDEF(T_, P_, pref_, ...) \
1058 COMMS_EXPAND(COMMS_CHOOSE_FIELD_TYPEDEF(COMMS_NUM_ARGS(__VA_ARGS__), T_, P_, pref_, __VA_ARGS__))
1059