devela/data/table/value/macros/
define_all.rs

1// devela::data::table::value::macros::define_all
2//!
3//
4
5/// Defines all sizes.
6///
7/// # Features
8/// Specific sizes are feature-gated with the corresponding `_value*` feature.
9///
10/// # Arms
11/// - all_sizes:
12/// - single_size:
13macro_rules! define_data_value_type_raw {
14    (
15    // Defines all sizes at the same time.
16    //
17    // This arm receives all the types ordered by size,
18    // classified according to the following groupings,
19    // where # represents the number of bits:
20    //
21    // - copy@#:              (name, type),*
22    // - copy@#_dep:          (doc, name, type, dep1, dep2),*
23    // - copy@#_ptr:          (doc, name, type, ptr),*
24    // - copy@#_ptrdep:       (doc, name, type, ptr, dep1, dep2),*
25    // - noncopy@#:           (doc, name, type),*
26    // - noncopy@#_dep:       (doc, name, type, dep1, dep2),*
27    // - noncopy@#_ptr:       (doc, name, type, ptr),*
28    // - noncopy@#_ptrdep:    (doc, name, type, ptr, dep1, dep2),*
29    //
30    // where:
31    // - the `copy` prefix indicates the types are `Copy`,
32    //   otherwise the `noncopy` prefix is used.
33    // - `nB` indicates the number of bytes of the types in the current group.
34    // - the `dep` suffix indicates a dependency on 2 features (dep1 & dep2)
35    //   (pass the same dependency twice in order to only depend on one).
36    // - the `ptr` suffix indicates a dependency on a specific pointer size.
37    //
38    // The `single_size` arm is called making sure each size contains
39    // all variants with a size less than or equal to the current size.
40
41    all_sizes: v: $Value:ident, t: $Type:ident, r: $Raw:ident,
42
43    // 8-bit / 1-Byte
44    copy@8: $(
45        $C_doc_8:literal, $C_name_8:ident, $C_type_8:ty,
46        [def:$C_def_8:stmt],
47        )*
48    copy@8_dep: $(
49        $C_doc_8_dep:literal, $C_name_8_dep:ident, $C_type_8_dep:ty,
50        $C_dep1_8_dep:literal, $C_dep2_8_dep:literal,
51        [def:$C_def_8_dep:stmt],
52        )*
53    copy@8_ptr: $(
54        $C_doc_8_ptr:literal, $C_name_8_ptr:ident, $C_type_8_ptr:ty,
55        $C_ptr_8_ptr:meta,
56        [def:$C_def_8_ptr:stmt],
57        )*
58    copy@8_ptrdep: $(
59        $C_doc_8_ptrdep:literal, $C_name_8_ptrdep:ident, $C_type_8_ptrdep:ty,
60        $C_ptrdep_8_ptrdep:meta,
61        [def:$C_def_8_ptrdep:stmt],
62        )*
63
64    noncopy@8: $(
65        $N_doc_8:literal, $N_name_8:ident, $N_type_8:ty,
66        [def:$N_def_8:stmt],
67        )*
68    noncopy@8_dep: $(
69        $N_doc_8_dep:literal, $N_name_8_dep:ident, $N_type_8_dep:ty,
70        $N_dep2_8_dep:literal,
71        [def:$N_def_8_dep:stmt],
72        )*
73    noncopy@8_ptr: $(
74        $N_doc_8_ptr:literal, $N_name_8_ptr:ident, $N_type_8_ptr:ty,
75        $N_ptr_8_ptr:meta,
76        [def:$N_def_8_ptr:stmt],
77        )*
78    noncopy@8_ptrdep: $(
79        $N_doc_8_ptrdep:literal, $N_name_8_ptrdep:ident, $N_type_8_ptrdep:ty,
80        $N_ptr_8_ptrdep:meta,
81        $N_dep1_8_ptrdep:literal, $N_dep2_8_ptrdep:literal
82        [def:$N_def_8_ptrdep:stmt],
83        ),*
84
85    // 16-bit / 2-Byte
86    copy@16: $(
87        $C_doc_16:literal, $C_name_16:ident, $C_type_16:ty,
88        [def:$C_def_16:stmt],
89        )*
90    copy@16_dep: $(
91        $C_doc_16_dep:literal, $C_name_16_dep:ident, $C_type_16_dep:ty,
92        $C_dep1_16_dep:literal, $C_dep2_16_dep:literal,
93        [def:$C_def_16_dep:stmt],
94        )*
95    copy@16_ptr: $(
96        $C_doc_16_ptr:literal, $C_name_16_ptr:ident, $C_type_16_ptr:ty,
97        $C_ptr_16_ptr:meta,
98        [def:$C_def_16_ptr:stmt],
99        )*
100    copy@16_ptrdep: $(
101        $C_doc_16_ptrdep:literal, $C_name_16_ptrdep:ident, $C_type_16_ptrdep:ty,
102        $C_ptrdep_16_ptrdep:meta,
103        [def:$C_def_16_ptrdep:stmt],
104        )*
105
106    noncopy@16: $(
107        $N_doc_16:literal, $N_name_16:ident, $N_type_16:ty,
108        [def:$N_def_16:stmt],
109        )*
110    noncopy@16_dep: $(
111        $N_doc_16_dep:literal, $N_name_16_dep:ident, $N_type_16_dep:ty,
112        $N_dep1_16_dep:literal,
113        [def:$N_def_16_dep:stmt],
114        )*
115    noncopy@16_ptr: $(
116        $N_doc_16_ptr:literal, $N_name_16_ptr:ident, $N_type_16_ptr:ty,
117        $N_ptr_16_ptr:meta,
118        [def:$N_def_16_ptr:stmt],
119        )*
120    noncopy@16_ptrdep: $(
121        $N_doc_16_ptrdep:literal, $N_name_16_ptrdep:ident, $N_type_16_ptrdep:ty,
122        $N_ptr_16_ptrdep:meta,
123        $N_dep1_16_ptrdep:literal, $N_dep2_16_ptrdep:literal,
124        [def:$N_def_16_ptrdep:stmt],
125        )*
126
127    // 32-bit / 4-Byte
128    copy@32: $(
129        $C_doc_32:literal, $C_name_32:ident, $C_type_32:ty,
130        [def:$C_def_32:stmt],
131        )*
132    copy@32_dep: $(
133        $C_doc_32_dep:literal, $C_name_32_dep:ident, $C_type_32_dep:ty,
134        $C_dep1_32_dep:literal, $C_dep2_32_dep:literal,
135        [def:$C_def_32_dep:stmt],
136        )*
137    copy@32_ptr: $(
138        $C_doc_32_ptr:literal, $C_name_32_ptr:ident, $C_type_32_ptr:ty,
139        $C_ptr_32_ptr:meta,
140        [def:$C_def_32_ptr:stmt],
141        )*
142    copy@32_ptrdep: $(
143        $C_doc_32_ptrdep:literal, $C_name_32_ptrdep:ident, $C_type_32_ptrdep:ty,
144        $C_ptrdep_32_ptrdep:meta,
145        [def:$C_def_32_ptrdep:stmt],
146        )*
147
148    noncopy@32: $(
149        $N_doc_32:literal, $N_name_32:ident, $N_type_32:ty,
150        [def:$N_def_32:stmt],
151        )*
152    noncopy@32_dep: $(
153        $N_doc_32_dep:literal, $N_name_32_dep:ident, $N_type_32_dep:ty,
154        $N_dep1_32_dep:literal, $N_dep2_32_dep:literal,
155        [def:$N_def_32_dep:stmt],
156        )*
157    noncopy@32_ptr: $(
158        $N_doc_32_ptr:literal, $N_name_32_ptr:ident, $N_type_32_ptr:ty,
159        $N_ptr_32_ptr:meta,
160        [def:$N_def_32_ptr:stmt],
161        )*
162    noncopy@32_ptrdep: $(
163        $N_doc_32_ptrdep:literal, $N_name_32_ptrdep:ident, $N_type_32_ptrdep:ty,
164        $N_ptr_32_ptrdep:meta,
165        $N_dep1_32_ptrdep:literal, $N_dep2_32_ptrdep:literal,
166        [def:$N_def_32_ptrdep:stmt],
167        )*
168
169    // 64-bit / 8-Byte
170    copy@64: $(
171        $C_doc_64:literal, $C_name_64:ident, $C_type_64:ty,
172        [def:$C_def_64:stmt],
173        )*
174    copy@64_dep: $(
175        $C_doc_64_dep:literal, $C_name_64_dep:ident, $C_type_64_dep:ty,
176        $C_dep1_64_dep:literal, $C_dep2_64_dep:literal,
177        [def:$C_def_64_dep:stmt],
178        )*
179    copy@64_ptr: $(
180        $C_doc_64_ptr:literal, $C_name_64_ptr:ident, $C_type_64_ptr:ty,
181        $C_ptr_64_ptr:meta,
182        [def:$C_def_64_ptr:stmt],
183        )*
184    copy@64_ptrdep: $(
185        $C_doc_64_ptrdep:literal, $C_name_64_ptrdep:ident, $C_type_64_ptrdep:ty,
186        $C_ptrdep_64_ptrdep:meta,
187        [def:$C_def_64_ptrdep:stmt],
188        )*
189
190    noncopy@64: $(
191        $N_doc_64:literal, $N_name_64:ident, $N_type_64:ty,
192        [def:$N_def_64:stmt],
193        )*
194    noncopy@64_dep: $(
195        $N_doc_64_dep:literal, $N_name_64_dep:ident, $N_type_64_dep:ty,
196        $N_dep1_64_dep:literal, $N_dep2_64_dep:literal,
197        [def:$N_def_64_dep:stmt],
198        )*
199    noncopy@64_ptr: $(
200        $N_doc_64_ptr:literal, $N_name_64_ptr:ident, $N_type_64_ptr:ty,
201        $N_ptr_64_ptr:meta,
202        [def:$N_def_64_ptr:stmt],
203        )*
204    noncopy@64_ptrdep: $(
205        $N_doc_64_ptrdep:literal, $N_name_64_ptrdep:ident, $N_type_64_ptrdep:ty,
206        $N_ptr_64_ptrdep:meta,
207        $N_dep1_64_ptrdep:literal, $N_dep2_64_ptrdep:literal,
208        [def:$N_def_64_ptrdep:stmt],
209        )*
210
211    // 128-bit / 16-Byte
212    copy@128: $(
213        $C_doc_128:literal, $C_name_128:ident, $C_type_128:ty,
214        [def:$C_def_128:stmt],
215        )*
216    copy@128_dep: $(
217        $C_doc_128_dep:literal, $C_name_128_dep:ident, $C_type_128_dep:ty,
218        $C_dep1_128_dep:literal, $C_dep2_128_dep:literal,
219        [def:$C_def_128_dep:stmt],
220        )*
221    copy@128_ptr: $(
222        $C_doc_128_ptr:literal, $C_name_128_ptr:ident, $C_type_128_ptr:ty,
223        $C_ptr_128_ptr:meta,
224        [def:$C_def_128_ptr:stmt],
225        )*
226    copy@128_ptrdep: $(
227        $C_doc_128_ptrdep:literal, $C_name_128_ptrdep:ident, $C_type_128_ptrdep:ty,
228        $C_ptrdep_128_ptrdep:meta,
229        [def:$C_def_128_ptrdep:stmt],
230        )*
231
232    noncopy@128: $(
233        $N_doc_128:literal, $N_name_128:ident, $N_type_128:ty,
234        [def:$N_def_128:stmt],
235        )*
236    noncopy@128_dep: $(
237        $N_doc_128_dep:literal, $N_name_128_dep:ident, $N_type_128_dep:ty,
238        $N_dep1_128_dep:literal, $N_dep2_128_dep:literal,
239        [def:$N_def_128_dep:stmt],
240        )*
241    noncopy@128_ptr: $(
242        $N_doc_128_ptr:literal, $N_name_128_ptr:ident, $N_type_128_ptr:ty,
243        $N_ptr_128_ptr:meta,
244        [def:$N_def_128_ptr:stmt],
245        )*
246    noncopy@128_ptrdep: $(
247        $N_doc_128_ptrdep:literal, $N_name_128_ptrdep:ident, $N_type_128_ptrdep:ty,
248        $N_ptr_128_ptrdep:meta,
249        $N_dep1_128_ptrdep:literal, $N_dep2_128_ptrdep:literal,
250        [def:$N_def_128_ptrdep:stmt],
251        )*
252
253    // 256-bit / 32-Byte
254    copy@256: $(
255        $C_doc_256:literal, $C_name_256:ident, $C_type_256:ty,
256        [def:$C_def_256:stmt],
257        )*
258    copy@256_dep: $(
259        $C_doc_256_dep:literal, $C_name_256_dep:ident, $C_type_256_dep:ty,
260        $C_dep1_256_dep:literal, $C_dep2_256_dep:literal,
261        [def:$C_def_256_dep:stmt],
262        )*
263    copy@256_ptr: $(
264        $C_doc_256_ptr:literal, $C_name_256_ptr:ident, $C_type_256_ptr:ty,
265        $C_ptr_256_ptr:meta,
266        [def:$C_def_256_ptr:stmt],
267        )*
268    copy@256_ptrdep: $(
269        $C_doc_256_ptrdep:literal, $C_name_256_ptrdep:ident, $C_type_256_ptrdep:ty,
270        $C_ptrdep_256_ptrdep:meta,
271        [def:$C_def_256_ptrdep:stmt],
272        )*
273
274    noncopy@256: $(
275        $N_doc_256:literal, $N_name_256:ident, $N_type_256:ty,
276        [def:$N_def_256:stmt],
277        )*
278    noncopy@256_dep: $(
279        $N_doc_256_dep:literal, $N_name_256_dep:ident, $N_type_256_dep:ty,
280        $N_dep1_256_dep:literal, $N_dep2_256_dep:literal,
281        [def:$N_def_256_dep:stmt],
282        )*
283    noncopy@256_ptr: $(
284        $N_doc_256_ptr:literal, $N_name_256_ptr:ident, $N_type_256_ptr:ty,
285        $N_ptr_256_ptr:meta,
286        [def:$N_def_256_ptr:stmt],
287        )*
288    noncopy@256_ptrdep: $(
289        $N_doc_256_ptrdep:literal, $N_name_256_ptrdep:ident, $N_type_256_ptrdep:ty,
290        $N_ptr_256_ptrdep:meta,
291        $N_dep1_256_ptrdep:literal, $N_dep2_256_ptrdep:literal,
292        [def:$N_def_256_ptrdep:stmt],
293        )*
294
295    // 512-bit / 64-Byte
296    copy@512: $(
297        $C_doc_512:literal, $C_name_512:ident, $C_type_512:ty,
298        [def:$C_def_512:stmt],
299        )*
300    copy@512_dep: $(
301        $C_doc_512_dep:literal, $C_name_512_dep:ident, $C_type_512_dep:ty,
302        $C_dep1_512_dep:literal, $C_dep2_512_dep:literal,
303        [def:$C_def_512_dep:stmt],
304        )*
305    copy@512_ptr: $(
306        $C_doc_512_ptr:literal, $C_name_512_ptr:ident, $C_type_512_ptr:ty,
307        $C_ptr_512_ptr:meta,
308        [def:$C_def_512_ptr:stmt],
309        )*
310    copy@512_ptrdep: $(
311        $C_doc_512_ptrdep:literal, $C_name_512_ptrdep:ident, $C_type_512_ptrdep:ty,
312        $C_ptrdep_512_ptrdep:meta,
313        [def:$C_def_512_ptrdep:stmt],
314        )*
315
316    noncopy@512: $(
317        $N_doc_512:literal, $N_name_512:ident, $N_type_512:ty,
318        [def:$N_def_512:stmt],
319        )*
320    noncopy@512_dep: $(
321        $N_doc_512_dep:literal, $N_name_512_dep:ident, $N_type_512_dep:ty,
322        $N_dep1_512_dep:literal, $N_dep2_512_dep:literal,
323        [def:$N_def_512_dep:stmt],
324        )*
325    noncopy@512_ptr: $(
326        $N_doc_512_ptr:literal, $N_name_512_ptr:ident, $N_type_512_ptr:ty,
327        $N_ptr_512_ptr:meta,
328        [def:$N_def_512_ptr:stmt],
329        )*
330    noncopy@512_ptrdep: $(
331        $N_doc_512_ptrdep:literal, $N_name_512_ptrdep:ident, $N_type_512_ptrdep:ty,
332        $N_ptr_512_ptrdep:meta,
333        $N_dep1_512_ptrdep:literal, $N_dep2_512_ptrdep:literal,
334        [def:$N_def_512_ptrdep:stmt],
335        )*
336
337    // 1024-bit / 128-Byte
338    copy@1024: $(
339        $C_doc_1264:literal, $C_name_1264:ident, $C_type_1264:ty,
340        [def:$C_def_1024:stmt],
341        )*
342    copy@1024_dep: $(
343        $C_doc_1024_dep:literal, $C_name_1024_dep:ident, $C_type_1024_dep:ty,
344        $C_dep1_1024_dep:literal, $C_dep2_1024_dep:literal,
345        [def:$C_def_1024_dep:stmt],
346        )*
347    copy@1024_ptr: $(
348        $C_doc_1024_ptr:literal, $C_name_1024_ptr:ident, $C_type_1024_ptr:ty,
349        $C_ptr_1024_ptr:meta,
350        [def:$C_def_1024_ptr:stmt],
351        )*
352    copy@1024_ptrdep: $(
353        $C_doc_1024_ptrdep:literal, $C_name_1024_ptrdep:ident, $C_type_1024_ptrdep:ty,
354        $C_ptrdep_1024_ptrdep:meta,
355        [def:$C_def_1024_ptrdep:stmt],
356        )*
357
358    noncopy@1024: $(
359        $N_doc_1264:literal, $N_name_1264:ident, $N_type_1264:ty,
360        [def:$N_def_1264:stmt],
361        )*
362    noncopy@1024_dep: $(
363        $N_doc_1024_dep:literal, $N_name_1024_dep:ident, $N_type_1024_dep:ty,
364        $N_dep1_1024_dep:literal, $N_dep2_1024_dep:literal,
365        [def:$N_def_1024_dep:stmt],
366        )*
367    noncopy@1024_ptr: $(
368        $N_doc_1024_ptr:literal, $N_name_1024_ptr:ident, $N_type_1024_ptr:ty,
369        $N_ptr_1024_ptr:meta,
370        [def:$N_def_1024_ptr:stmt],
371        )*
372    noncopy@1024_ptrdep: $(
373        $N_doc_1024_ptrdep:literal, $N_name_1024_ptrdep:ident, $N_type_1024_ptrdep:ty,
374        $N_ptr_1024_ptrdep:meta,
375        $N_dep1_1024_ptrdep:literal, $N_dep2_1024_ptrdep:literal,
376        [def:$N_def_1024_ptrdep:stmt],
377        )*
378
379    ) => {
380        // 8-bit / 1-Byte
381        #[cfg(feature = "_value8")]
382        $crate::define_data_value_type_raw! {
383            single_size: $Value, $Type, $Raw, size: 8, feature: "_value8",
384
385            copy:
386                $( $C_doc_8, $C_name_8, $C_type_8,
387                   [def:$C_def_8]
388                )* ;
389            copy@dep:
390                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
391                   $C_dep1_8_dep, $C_dep2_8_dep,
392                   [def:$C_def_8_dep]
393                )* ;
394            copy@ptr:
395                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
396                   $C_ptr_8_ptr,
397                   [def:$C_def_8_ptr]
398                )* ;
399            copy@ptrdep:
400                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
401                   $C_ptrdep_8_ptrdep,
402                   [def:$C_def_8_ptrdep]
403                )* ;
404
405            noncopy:
406                $( $N_doc_8, $N_name_8, $N_type_8,
407                   [def:$N_def_8]
408                )* ;
409            noncopy@dep:
410                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
411                   $N_dep1_8_dep, $N_dep2_8_dep,
412                   [def:$N_def_8_dep]
413                )* ;
414            noncopy@ptr:
415                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
416                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
417                   [def:$N_def_8_ptr]
418                )* ;
419            noncopy@ptrdep:
420                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
421                   $N_ptr_8_ptrdep,
422                   $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
423                   [def:$N_def_8_ptrdep]
424                )* ;
425        }
426        // 16-bit / 2-Byte
427        #[cfg(feature = "_value16")]
428        $crate::define_data_value_type_raw! {
429            single_size: $Value, $Type, $Raw, size: 16, feature: "_value16",
430
431            copy:
432                $( $C_doc_8, $C_name_8, $C_type_8,
433                   [def:$C_def_8]
434                )*
435                $( $C_doc_16, $C_name_16, $C_type_16,
436                   [def:$C_def_16]
437                )* ;
438            copy@dep:
439                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
440                   $C_dep1_8_dep, $C_dep2_8_dep,
441                   [def:$C_def_8_dep]
442                )*
443                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
444                   $C_dep1_16_dep, $C_dep2_16_dep,
445                   [def:$C_def_16_dep]
446                )* ;
447            copy@ptr:
448                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
449                   $C_ptr_8_ptr,
450                   [def:$C_def_8_ptr]
451                )*
452                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
453                   $C_ptr_16_ptr,
454                   [def:$C_def_16_ptr]
455                )* ;
456            copy@ptrdep:
457                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
458                   $C_ptrdep_8_ptrdep,
459                   [def:$C_def_8_ptrdep]
460                )*
461                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
462                   $C_ptrdep_16_ptrdep,
463                   [def:$C_def_16_ptrdep]
464                )* ;
465
466            noncopy:
467                $( $N_doc_8, $N_name_8, $N_type_8,
468                   [def:$N_def_8]
469                )*
470                $( $N_doc_16, $N_name_16, $N_type_16,
471                   [def:$N_def_16]
472                )* ;
473            noncopy@dep:
474                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
475                   $N_dep1_8_dep, $N_dep2_8_dep,
476                   [def:$N_def_8_dep]
477                )*
478                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
479                   $N_dep1_16_dep, $N_dep2_16_dep,
480                   [def:$N_def_16_dep]
481                )* ;
482            noncopy@ptr:
483                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
484                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
485                   [def:$N_def_8_ptr]
486                )*
487                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
488                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
489                   [def:$N_def_16_ptr]
490                )* ;
491            noncopy@ptrdep:
492                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
493                   $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
494                   [def:$N_def_8_ptrdep]
495                )*
496                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
497                   $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
498                   [def:$N_def_16_ptrdep]
499                )* ;
500        }
501        // 32-bit / 4-Byte
502        #[cfg(feature = "_value32")]
503        $crate::define_data_value_type_raw! {
504            single_size: $Value, $Type, $Raw, size: 32, feature: "_value32",
505
506            copy:
507                $( $C_doc_8, $C_name_8, $C_type_8,
508                   [def:$C_def_8]
509                )*
510                $( $C_doc_16, $C_name_16, $C_type_16,
511                   [def:$C_def_16]
512                )*
513                $( $C_doc_32, $C_name_32, $C_type_32,
514                   [def:$C_def_32]
515                )* ;
516            copy@dep:
517                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
518                   $C_dep1_8_dep, $C_dep2_8_dep,
519                   [def:$C_def_8_dep]
520                )*
521                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
522                   $C_dep1_16_dep, $C_dep2_16_dep,
523                   [def:$C_def_16_dep]
524                )*
525                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
526                   $C_dep1_32_dep, $C_dep2_32_dep,
527                   [def:$C_def_32_dep]
528                )* ;
529            copy@ptr:
530                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
531                   $C_ptr_8_ptr,
532                   [def:$C_def_8_ptr]
533                )*
534                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
535                   $C_ptr_16_ptr,
536                   [def:$C_def_16_ptr]
537                )*
538                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
539                   $C_ptr_32_ptr,
540                   [def:$C_def_32_ptr]
541                )* ;
542            copy@ptrdep:
543                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
544                   $C_ptrdep_8_ptrdep,
545                   [def:$C_def_8_ptrdep]
546                )*
547                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
548                   $C_ptrdep_16_ptrdep,
549                   [def:$C_def_16_ptrdep]
550                )*
551                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
552                   $C_ptrdep_32_ptrdep,
553                   [def:$C_def_32_ptrdep]
554                )* ;
555
556            noncopy:
557                $( $N_doc_8, $N_name_8, $N_type_8,
558                   [def:$N_def_8]
559                )*
560                $( $N_doc_16, $N_name_16, $N_type_16,
561                   [def:$N_def_16]
562                )*
563                $( $N_doc_32, $N_name_32, $N_type_32,
564                   [def:$N_def_32]
565                )* ;
566            noncopy@dep:
567                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
568                   $N_dep1_8_dep, $N_dep2_8_dep,
569                   [def:$N_def_8_dep]
570                )*
571                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
572                   $N_dep1_16_dep, $N_dep2_16_dep,
573                   [def:$N_def_16_dep]
574                )*
575                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
576                   $N_dep1_32_dep, $N_dep2_32_dep,
577                   [def:$N_def_32_dep]
578                )* ;
579            noncopy@ptr:
580                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
581                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
582                   [def:$N_def_8_ptr]
583                )*
584                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
585                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
586                   [def:$N_def_16_ptr]
587                )*
588                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
589                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
590                   [def:$N_def_32_ptr]
591                )* ;
592            noncopy@ptrdep:
593                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
594                   $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
595                   [def:$N_def_8_ptrdep]
596                )*
597                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
598                   $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
599                   [def:$N_def_16_ptrdep]
600                )*
601                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
602                   $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
603                   [def:$N_def_32_ptrdep]
604                )* ;
605        }
606        // 64-bit / 8-Byte
607        #[cfg(feature = "_value64")]
608        $crate::define_data_value_type_raw! {
609            single_size: $Value, $Type, $Raw, size: 64, feature: "_value64",
610
611            copy:
612                $( $C_doc_8, $C_name_8, $C_type_8,
613                   [def:$C_def_8]
614                )*
615                $( $C_doc_16, $C_name_16, $C_type_16,
616                   [def:$C_def_16]
617                )*
618                $( $C_doc_32, $C_name_32, $C_type_32,
619                   [def:$C_def_32]
620                )*
621                $( $C_doc_64, $C_name_64, $C_type_64,
622                   [def:$C_def_64]
623                )* ;
624            copy@dep:
625                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
626                   $C_dep1_8_dep, $C_dep2_8_dep,
627                   [def:$C_def_8_dep]
628                )*
629                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
630                   $C_dep1_16_dep, $C_dep2_16_dep,
631                   [def:$C_def_16_dep]
632                )*
633                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
634                   $C_dep1_32_dep, $C_dep2_32_dep,
635                   [def:$C_def_32_dep]
636                )*
637                $( $C_doc_64_dep, $C_name_64_dep, $C_type_64_dep,
638                   $C_dep1_64_dep, $C_dep2_64_dep,
639                   [def:$C_def_64_dep]
640                )* ;
641            copy@ptr:
642                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
643                   $C_ptr_8_ptr,
644                   [def:$C_def_8_ptr]
645                )*
646                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
647                   $C_ptr_16_ptr,
648                   [def:$C_def_16_ptr]
649                )*
650                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
651                   $C_ptr_32_ptr,
652                   [def:$C_def_32_ptr]
653                )*
654                $( $C_doc_64_ptr, $C_name_64_ptr, $C_type_64_ptr,
655                   $C_ptr_64_ptr,
656                   [def:$C_def_64_ptr]
657                )* ;
658            copy@ptrdep:
659                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
660                   $C_ptrdep_8_ptrdep,
661                   [def:$C_def_8_ptrdep]
662                )*
663                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
664                   $C_ptrdep_16_ptrdep,
665                   [def:$C_def_16_ptrdep]
666                )*
667                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
668                   $C_ptrdep_32_ptrdep,
669                   [def:$C_def_32_ptrdep]
670                )*
671                $( $C_doc_64_ptrdep, $C_name_64_ptrdep, $C_type_64_ptrdep,
672                   $C_ptrdep_64_ptrdep,
673                   [def:$C_def_64_ptrdep]
674                ),* ;
675
676            noncopy:
677                $( $N_doc_8, $N_name_8, $N_type_8,
678                   [def:$N_def_8]
679                )*
680                $( $N_doc_16, $N_name_16, $N_type_16,
681                   [def:$N_def_16]
682                )*
683                $( $N_doc_32, $N_name_32, $N_type_32,
684                   [def:$N_def_32]
685                )*
686                $( $N_doc_64, $N_name_64, $N_type_64,
687                   [def:$N_def_64]
688                )* ;
689
690            noncopy@dep:
691                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
692                   $N_dep1_8_dep, $N_dep2_8_dep,
693                   [def:$N_def_8_dep]
694                )*
695                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
696                   $N_dep1_16_dep, $N_dep2_16_dep,
697                   [def:$N_def_16_dep]
698                )*
699                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
700                   $N_dep1_32_dep, $N_dep2_32_dep,
701                   [def:$N_def_32_dep]
702                )*
703                $( $N_doc_64_dep, $N_name_64_dep, $N_type_64_dep,
704                   $N_dep1_64_dep, $N_dep2_64_dep,
705                   [def:$N_def_64_dep]
706                )* ;
707            noncopy@ptr:
708                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
709                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
710                   [def:$N_def_8_ptr]
711                )*
712                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
713                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
714                   [def:$N_def_16_ptr]
715                )*
716                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
717                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
718                   [def:$N_def_32_ptr]
719                )*
720                $( $N_doc_64_ptr, $N_name_64_ptr, $N_type_64_ptr,
721                   $N_ptr_64_ptr, $N_dep1_64_ptr, $N_dep2_64_ptr,
722                   [def:$N_def_64_ptr]
723                )* ;
724            noncopy@ptrdep:
725                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
726                   $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
727                   [def:$N_def_8_ptrdep]
728                )*
729                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
730                   $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
731                   [def:$N_def_16_ptrdep]
732                )*
733                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
734                   $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
735                   [def:$N_def_32_ptrdep]
736                )*
737                $( $N_doc_64_ptrdep, $N_name_64_ptrdep, $N_type_64_ptrdep,
738                   $N_ptr_64_ptrdep, $N_dep1_64_ptrdep, $N_dep2_64_ptrdep,
739                   [def:$N_def_64_ptrdep]
740                )* ;
741        }
742        // 128-bit / 16-Byte
743        #[cfg(feature = "_value128")]
744        $crate::define_data_value_type_raw! {
745            single_size: $Value, $Type, $Raw, size: 128, feature: "_value128",
746
747            copy:
748                $( $C_doc_8, $C_name_8, $C_type_8,
749                   [def:$C_def_8]
750                )*
751                $( $C_doc_16, $C_name_16, $C_type_16,
752                   [def:$C_def_16]
753                )*
754                $( $C_doc_32, $C_name_32, $C_type_32,
755                   [def:$C_def_32]
756                )*
757                $( $C_doc_64, $C_name_64, $C_type_64,
758                   [def:$C_def_64]
759                )*
760                $( $C_doc_128, $C_name_128, $C_type_128,
761                   [def:$C_def_128]
762                )* ;
763            copy@dep:
764                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
765                   $C_dep1_8_dep, $C_dep2_8_dep,
766                   [def:$C_def_8_dep]
767                )*
768                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
769                   $C_dep1_16_dep, $C_dep2_16_dep,
770                   [def:$C_def_16_dep]
771                )*
772                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
773                   $C_dep1_32_dep, $C_dep2_32_dep,
774                   [def:$C_def_32_dep]
775                )*
776                $( $C_doc_64_dep, $C_name_64_dep, $C_type_64_dep,
777                   $C_dep1_64_dep, $C_dep2_64_dep,
778                   [def:$C_def_64_dep]
779                )*
780                $( $C_doc_128_dep, $C_name_128_dep, $C_type_128_dep,
781                   $C_dep1_128_dep, $C_dep2_128_dep,
782                   [def:$C_def_128_dep]
783                )* ;
784            copy@ptr:
785                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
786                   $C_ptr_8_ptr,
787                   [def:$C_def_8_ptr]
788                )*
789                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
790                   $C_ptr_16_ptr,
791                   [def:$C_def_16_ptr]
792                )*
793                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
794                   $C_ptr_32_ptr,
795                   [def:$C_def_32_ptr]
796                )*
797                $( $C_doc_64_ptr, $C_name_64_ptr, $C_type_64_ptr,
798                   $C_ptr_64_ptr,
799                   [def:$C_def_64_ptr]
800                )*
801                $( $C_doc_128_ptr, $C_name_128_ptr, $C_type_128_ptr,
802                   $C_ptr_128_ptr,
803                   [def:$C_def_128_ptr]
804                )* ;
805            copy@ptrdep:
806                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
807                   $C_ptrdep_8_ptrdep,
808                   [def:$C_def_8_ptrdep]
809                )*
810                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
811                   $C_ptrdep_16_ptrdep,
812                   [def:$C_def_16_ptrdep]
813                )*
814                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
815                   $C_ptrdep_32_ptrdep,
816                   [def:$C_def_32_ptrdep]
817                )*
818                $( $C_doc_64_ptrdep, $C_name_64_ptrdep, $C_type_64_ptrdep,
819                   $C_ptrdep_64_ptrdep,
820                   [def:$C_def_64_ptrdep]
821                )*
822                $( $C_doc_128_ptrdep, $C_name_128_ptrdep, $C_type_128_ptrdep,
823                   $C_ptrdep_128_ptrdep,
824                   [def:$C_def_128_ptrdep]
825                )* ;
826
827            noncopy:
828                $( $N_doc_8, $N_name_8, $N_type_8,
829                   [def:$N_def_8]
830                )*
831                $( $N_doc_16, $N_name_16, $N_type_16,
832                   [def:$N_def_16]
833                )*
834                $( $N_doc_32, $N_name_32, $N_type_32,
835                   [def:$N_def_32]
836                )*
837                $( $N_doc_64, $N_name_64, $N_type_64,
838                   [def:$N_def_64]
839                )*
840                $( $N_doc_128, $N_name_128, $N_type_128,
841                   [def:$N_def_128]
842                )* ;
843            noncopy@dep:
844                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
845                   $N_dep1_8_dep, $N_dep2_8_dep,
846                   [def:$N_def_8_dep]
847                )*
848                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
849                   $N_dep1_16_dep, $N_dep2_16_dep,
850                   [def:$N_def_16_dep]
851                )*
852                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
853                   $N_dep1_32_dep, $N_dep2_32_dep,
854                   [def:$N_def_32_dep]
855                )*
856                $( $N_doc_64_dep, $N_name_64_dep, $N_type_64_dep,
857                   $N_dep1_64_dep, $N_dep2_64_dep,
858                   [def:$N_def_64_dep]
859                )*
860                $( $N_doc_128_dep, $N_name_128_dep, $N_type_128_dep,
861                   $N_dep1_128_dep, $N_dep2_128_dep,
862                   [def:$N_def_128_dep]
863                )* ;
864            noncopy@ptr:
865                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
866                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
867                   [def:$N_def_8_ptr]
868                )*
869                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
870                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
871                   [def:$N_def_16_ptr]
872                )*
873                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
874                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
875                   [def:$N_def_32_ptr]
876                )*
877                $( $N_doc_64_ptr, $N_name_64_ptr, $N_type_64_ptr,
878                   $N_ptr_64_ptr, $N_dep1_64_ptr, $N_dep2_64_ptr,
879                   [def:$N_def_64_ptr]
880                )*
881                $( $N_doc_128_ptr, $N_name_128_ptr, $N_type_128_ptr,
882                   $N_ptr_128_ptr, $N_dep1_128_ptr, $N_dep2_128_ptr,
883                   [def:$N_def_128_ptr]
884                )* ;
885            noncopy@ptrdep:
886                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
887                    $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
888                   [def:$N_def_8_ptrdep]
889                )*
890                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
891                    $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
892                   [def:$N_def_16_ptrdep]
893                )*
894                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
895                    $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
896                   [def:$N_def_32_ptrdep]
897                )*
898                $( $N_doc_64_ptrdep, $N_name_64_ptrdep, $N_type_64_ptrdep,
899                    $N_ptr_64_ptrdep, $N_dep1_64_ptrdep, $N_dep2_64_ptrdep,
900                   [def:$N_def_64_ptrdep]
901                )*
902                $( $N_doc_128_ptrdep, $N_name_128_ptrdep, $N_type_128_ptrdep,
903                    $N_ptr_128_ptrdep, $N_dep1_128_ptrdep, $N_dep2_128_ptrdep,
904                   [def:$N_def_128_ptrdep]
905                )* ;
906        }
907        // 256-bit / 32-Byte
908        #[cfg(feature = "_value256")]
909        $crate::define_data_value_type_raw! {
910            single_size: $Value, $Type, $Raw, size: 256, feature: "_value256",
911
912            copy:
913                $( $C_doc_8, $C_name_8, $C_type_8,
914                   [def:$C_def_8]
915                )*
916                $( $C_doc_16, $C_name_16, $C_type_16,
917                   [def:$C_def_16]
918                )*
919                $( $C_doc_32, $C_name_32, $C_type_32,
920                   [def:$C_def_32]
921                )*
922                $( $C_doc_64, $C_name_64, $C_type_64,
923                   [def:$C_def_64]
924                )*
925                $( $C_doc_128, $C_name_128, $C_type_128,
926                   [def:$C_def_128]
927                )*
928                $( $C_doc_256, $C_name_256, $C_type_256,
929                   [def:$C_def_256]
930                )* ;
931            copy@dep:
932                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
933                   $C_dep1_8_dep, $C_dep2_8_dep,
934                   [def:$C_def_8_dep]
935                )*
936                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
937                   $C_dep1_16_dep, $C_dep2_16_dep,
938                   [def:$C_def_16_dep]
939                )*
940                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
941                   $C_dep1_32_dep, $C_dep2_32_dep,
942                   [def:$C_def_32_dep]
943                )*
944                $( $C_doc_64_dep, $C_name_64_dep, $C_type_64_dep,
945                   $C_dep1_64_dep, $C_dep2_64_dep,
946                   [def:$C_def_64_dep]
947                )*
948                $( $C_doc_128_dep, $C_name_128_dep, $C_type_128_dep,
949                   $C_dep1_128_dep, $C_dep2_128_dep,
950                   [def:$C_def_128_dep]
951                )*
952                $( $C_doc_256_dep, $C_name_256_dep, $C_type_256_dep,
953                   $C_dep1_256_dep, $C_dep2_256_dep,
954                   [def:$C_def_256_dep]
955                )* ;
956            copy@ptr:
957                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
958                   $C_ptr_8_ptr,
959                   [def:$C_def_8_ptr]
960                )*
961                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
962                   $C_ptr_16_ptr,
963                   [def:$C_def_16_ptr]
964                )*
965                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
966                   $C_ptr_32_ptr,
967                   [def:$C_def_32_ptr]
968                )*
969                $( $C_doc_64_ptr, $C_name_64_ptr, $C_type_64_ptr,
970                   $C_ptr_64_ptr,
971                   [def:$C_def_64_ptr]
972                )*
973                $( $C_doc_128_ptr, $C_name_128_ptr, $C_type_128_ptr,
974                   $C_ptr_128_ptr,
975                   [def:$C_def_128_ptr]
976                )*
977                $( $C_doc_256_ptr, $C_name_256_ptr, $C_type_256_ptr,
978                   $C_ptr_256_ptr,
979                   [def:$C_def_256_ptr]
980                )* ;
981            copy@ptrdep:
982                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
983                   $C_ptrdep_8_ptrdep,
984                   [def:$C_def_8_ptrdep]
985                )*
986                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
987                   $C_ptrdep_16_ptrdep,
988                   [def:$C_def_16_ptrdep]
989                )*
990                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
991                   $C_ptrdep_32_ptrdep,
992                   [def:$C_def_32_ptrdep]
993                )*
994                $( $C_doc_64_ptrdep, $C_name_64_ptrdep, $C_type_64_ptrdep,
995                   $C_ptrdep_64_ptrdep,
996                   [def:$C_def_64_ptrdep]
997                )*
998                $( $C_doc_128_ptrdep, $C_name_128_ptrdep, $C_type_128_ptrdep,
999                   $C_ptrdep_128_ptrdep,
1000                   [def:$C_def_128_ptrdep]
1001                )*
1002                $( $C_doc_256_ptrdep, $C_name_256_ptrdep, $C_type_256_ptrdep,
1003                   $C_ptrdep_256_ptrdep,
1004                   [def:$C_def_256_ptrdep]
1005                )* ;
1006
1007            noncopy:
1008                $( $N_doc_8, $N_name_8, $N_type_8,
1009                   [def:$N_def_8]
1010                )*
1011                $( $N_doc_16, $N_name_16, $N_type_16,
1012                   [def:$N_def_16]
1013                )*
1014                $( $N_doc_32, $N_name_32, $N_type_32,
1015                   [def:$N_def_32]
1016                )*
1017                $( $N_doc_64, $N_name_64, $N_type_64,
1018                   [def:$N_def_64]
1019                )*
1020                $( $N_doc_128, $N_name_128, $N_type_128,
1021                   [def:$N_def_128]
1022                )*
1023                $( $N_doc_256, $N_name_256, $N_type_256,
1024                   [def:$N_def_256]
1025                )* ;
1026            noncopy@dep:
1027                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
1028                   $N_dep1_8_dep, $N_dep2_8_dep,
1029                   [def:$N_def_8_dep]
1030                )*
1031                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
1032                   $N_dep1_16_dep, $N_dep2_16_dep,
1033                   [def:$N_def_16_dep]
1034                )*
1035                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
1036                   $N_dep1_32_dep, $N_dep2_32_dep,
1037                   [def:$N_def_32_dep]
1038                )*
1039                $( $N_doc_64_dep, $N_name_64_dep, $N_type_64_dep,
1040                   $N_dep1_64_dep, $N_dep2_64_dep,
1041                   [def:$N_def_64_dep]
1042                )*
1043                $( $N_doc_128_dep, $N_name_128_dep, $N_type_128_dep,
1044                   $N_dep1_128_dep, $N_dep2_128_dep,
1045                   [def:$N_def_128_dep]
1046                )*
1047                $( $N_doc_256_dep, $N_name_256_dep, $N_type_256_dep,
1048                   $N_dep1_256_dep, $N_dep2_256_dep,
1049                   [def:$N_def_256_dep]
1050                )* ;
1051            noncopy@ptr:
1052                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
1053                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
1054                   [def:$N_def_8_ptr]
1055                )*
1056                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
1057                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
1058                   [def:$N_def_16_ptr]
1059                )*
1060                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
1061                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
1062                   [def:$N_def_32_ptr]
1063                )*
1064                $( $N_doc_64_ptr, $N_name_64_ptr, $N_type_64_ptr,
1065                   $N_ptr_64_ptr, $N_dep1_64_ptr, $N_dep2_64_ptr,
1066                   [def:$N_def_64_ptr]
1067                )*
1068                $( $N_doc_128_ptr, $N_name_128_ptr, $N_type_128_ptr,
1069                   $N_ptr_128_ptr, $N_dep1_128_ptr, $N_dep2_128_ptr,
1070                   [def:$N_def_128_ptr]
1071                )*
1072                $( $N_doc_256_ptr, $N_name_256_ptr, $N_type_256_ptr,
1073                   $N_ptr_256_ptr, $N_dep1_256_ptr, $N_dep2_256_ptr,
1074                   [def:$N_def_256_ptr]
1075                )* ;
1076            noncopy@ptrdep:
1077                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
1078                  $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
1079                   [def:$N_def_8_ptrdep]
1080                )*
1081                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
1082                  $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
1083                   [def:$N_def_16_ptrdep]
1084                )*
1085                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
1086                  $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
1087                   [def:$N_def_32_ptrdep]
1088                )*
1089                $( $N_doc_64_ptrdep, $N_name_64_ptrdep, $N_type_64_ptrdep,
1090                  $N_ptr_64_ptrdep, $N_dep1_64_ptrdep, $N_dep2_64_ptrdep,
1091                   [def:$N_def_64_ptrdep]
1092                )*
1093                $( $N_doc_128_ptrdep, $N_name_128_ptrdep, $N_type_128_ptrdep,
1094                  $N_ptr_128_ptrdep, $N_dep1_128_ptrdep, $N_dep2_128_ptrdep,
1095                   [def:$N_def_128_ptrdep]
1096                )*
1097                $( $N_doc_256_ptrdep, $N_name_256_ptrdep, $N_type_256_ptrdep,
1098                   $N_ptr_256_ptrdep, $N_dep1_256_ptrdep, $N_dep2_256_ptrdep,
1099                   [def:$N_def_256_ptrdep]
1100                )* ;
1101        }
1102        // 512-bit / 64-Byte
1103        #[cfg(feature = "_value512")]
1104        $crate::define_data_value_type_raw! {
1105            single_size: $Value, $Type, $Raw, size: 512, feature: "_value512",
1106
1107            copy:
1108                $( $C_doc_8, $C_name_8, $C_type_8,
1109                   [def:$C_def_8]
1110                )*
1111                $( $C_doc_16, $C_name_16, $C_type_16,
1112                   [def:$C_def_16]
1113                )*
1114                $( $C_doc_32, $C_name_32, $C_type_32,
1115                   [def:$C_def_32]
1116                )*
1117                $( $C_doc_64, $C_name_64, $C_type_64,
1118                   [def:$C_def_64]
1119                )*
1120                $( $C_doc_128, $C_name_128, $C_type_128,
1121                   [def:$C_def_128]
1122                )*
1123                $( $C_doc_256, $C_name_256, $C_type_256,
1124                   [def:$C_def_256]
1125                )*
1126                $( $C_doc_512, $C_name_512, $C_type_512,
1127                   [def:$C_def_512]
1128                )* ;
1129            copy@dep:
1130                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
1131                   $C_dep1_8_dep, $C_dep2_8_dep,
1132                   [def:$C_def_8_dep]
1133                )*
1134                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
1135                   $C_dep1_16_dep, $C_dep2_16_dep,
1136                   [def:$C_def_16_dep]
1137                )*
1138                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
1139                   $C_dep1_32_dep, $C_dep2_32_dep,
1140                   [def:$C_def_32_dep]
1141                )*
1142                $( $C_doc_64_dep, $C_name_64_dep, $C_type_64_dep,
1143                   $C_dep1_64_dep, $C_dep2_64_dep,
1144                   [def:$C_def_64_dep]
1145                )*
1146                $( $C_doc_128_dep, $C_name_128_dep, $C_type_128_dep,
1147                   $C_dep1_128_dep, $C_dep2_128_dep,
1148                   [def:$C_def_128_dep]
1149                )*
1150                $( $C_doc_256_dep, $C_name_256_dep, $C_type_256_dep,
1151                   $C_dep1_256_dep, $C_dep2_256_dep,
1152                   [def:$C_def_256_dep]
1153                )*
1154                $( $C_doc_512_dep, $C_name_512_dep, $C_type_512_dep,
1155                   $C_dep1_512_dep, $C_dep2_512_dep,
1156                   [def:$C_def_512_dep]
1157                )* ;
1158            copy@ptr:
1159                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
1160                   $C_ptr_8_ptr,
1161                   [def:$C_def_8_ptr]
1162                )*
1163                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
1164                   $C_ptr_16_ptr,
1165                   [def:$C_def_16_ptr]
1166                )*
1167                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
1168                   $C_ptr_32_ptr,
1169                   [def:$C_def_32_ptr]
1170                )*
1171                $( $C_doc_64_ptr, $C_name_64_ptr, $C_type_64_ptr,
1172                   $C_ptr_64_ptr,
1173                   [def:$C_def_64_ptr]
1174                )*
1175                $( $C_doc_128_ptr, $C_name_128_ptr, $C_type_128_ptr,
1176                   $C_ptr_128_ptr,
1177                   [def:$C_def_128_ptr]
1178                )*
1179                $( $C_doc_256_ptr, $C_name_256_ptr, $C_type_256_ptr,
1180                   $C_ptr_256_ptr,
1181                   [def:$C_def_256_ptr]
1182                )*
1183                $( $C_doc_512_ptr, $C_name_512_ptr, $C_type_512_ptr,
1184                   $C_ptr_512_ptr,
1185                   [def:$C_def_512_ptr]
1186                )* ;
1187            copy@ptrdep:
1188                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
1189                   $C_ptrdep_8_ptrdep,
1190                   [def:$C_def_8_ptrdep]
1191                )*
1192                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
1193                   $C_ptrdep_16_ptrdep,
1194                   [def:$C_def_16_ptrdep]
1195                )*
1196                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
1197                   $C_ptrdep_32_ptrdep,
1198                   [def:$C_def_32_ptrdep]
1199                )*
1200                $( $C_doc_64_ptrdep, $C_name_64_ptrdep, $C_type_64_ptrdep,
1201                   $C_ptrdep_64_ptrdep,
1202                   [def:$C_def_64_ptrdep]
1203                )*
1204                $( $C_doc_128_ptrdep, $C_name_128_ptrdep, $C_type_128_ptrdep,
1205                   $C_ptrdep_128_ptrdep,
1206                   [def:$C_def_128_ptrdep]
1207                )*
1208                $( $C_doc_256_ptrdep, $C_name_256_ptrdep, $C_type_256_ptrdep,
1209                   $C_ptrdep_256_ptrdep,
1210                   [def:$C_def_256_ptrdep]
1211                )*
1212                $( $C_doc_512_ptrdep, $C_name_512_ptrdep, $C_type_512_ptrdep,
1213                   $C_ptrdep_512_ptrdep,
1214                   [def:$C_def_512_ptrdep]
1215                )* ;
1216
1217            noncopy:
1218                $( $N_doc_8, $N_name_8, $N_type_8,
1219                   [def:$N_def_8]
1220                )*
1221                $( $N_doc_16, $N_name_16, $N_type_16,
1222                   [def:$N_def_16]
1223                )*
1224                $( $N_doc_32, $N_name_32, $N_type_32,
1225                   [def:$N_def_32]
1226                )*
1227                $( $N_doc_64, $N_name_64, $N_type_64,
1228                   [def:$N_def_64]
1229                )*
1230                $( $N_doc_128, $N_name_128, $N_type_128,
1231                   [def:$N_def_128]
1232                )*
1233                $( $N_doc_256, $N_name_256, $N_type_256,
1234                   [def:$N_def_256]
1235                )*
1236                $( $N_doc_512, $N_name_512, $N_type_512,
1237                   [def:$N_def_512]
1238                )* ;
1239            noncopy@dep:
1240                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
1241                   $N_dep1_8_dep, $N_dep2_8_dep,
1242                   [def:$N_def_8_dep]
1243                )*
1244                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
1245                   $N_dep1_16_dep, $N_dep2_16_dep,
1246                   [def:$N_def_16_dep]
1247                )*
1248                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
1249                   $N_dep1_32_dep, $N_dep2_32_dep,
1250                   [def:$N_def_32_dep]
1251                )*
1252                $( $N_doc_64_dep, $N_name_64_dep, $N_type_64_dep,
1253                   $N_dep1_64_dep, $N_dep2_64_dep,
1254                   [def:$N_def_64_dep]
1255                )*
1256                $( $N_doc_128_dep, $N_name_128_dep, $N_type_128_dep,
1257                   $N_dep1_128_dep, $N_dep2_128_dep,
1258                   [def:$N_def_128_dep]
1259                )*
1260                $( $N_doc_256_dep, $N_name_256_dep, $N_type_256_dep,
1261                   $N_dep1_256_dep, $N_dep2_256_dep,
1262                   [def:$N_def_256_dep]
1263                )*
1264                $( $N_doc_512_dep, $N_name_512_dep, $N_type_512_dep,
1265                   $N_dep1_512_dep, $N_dep2_512_dep,
1266                   [def:$N_def_512_dep]
1267                )* ;
1268            noncopy@ptr:
1269                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
1270                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
1271                   [def:$N_def_8_ptr]
1272                )*
1273                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
1274                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
1275                   [def:$N_def_16_ptr]
1276                )*
1277                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
1278                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
1279                   [def:$N_def_32_ptr]
1280                )*
1281                $( $N_doc_64_ptr, $N_name_64_ptr, $N_type_64_ptr,
1282                   $N_ptr_64_ptr, $N_dep1_64_ptr, $N_dep2_64_ptr,
1283                   [def:$N_def_64_ptr]
1284                )*
1285                $( $N_doc_128_ptr, $N_name_128_ptr, $N_type_128_ptr,
1286                   $N_ptr_128_ptr, $N_dep1_128_ptr, $N_dep2_128_ptr,
1287                   [def:$N_def_128_ptr]
1288                )*
1289                $( $N_doc_256_ptr, $N_name_256_ptr, $N_type_256_ptr,
1290                   $N_ptr_256_ptr, $N_dep1_256_ptr, $N_dep2_256_ptr,
1291                   [def:$N_def_256_ptr]
1292                )*
1293                $( $N_doc_512_ptr, $N_name_512_ptr, $N_type_512_ptr,
1294                   $N_ptr_512_ptr, $N_dep1_512_ptr, $N_dep2_512_ptr,
1295                   [def:$N_def_512_ptr]
1296                )* ;
1297            noncopy@ptrdep:
1298                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
1299                   $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
1300                   [def:$N_def_8_ptrdep]
1301                )*
1302                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
1303                   $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
1304                   [def:$N_def_16_ptrdep]
1305                )*
1306                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
1307                   $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
1308                   [def:$N_def_32_ptrdep]
1309                )*
1310                $( $N_doc_64_ptrdep, $N_name_64_ptrdep, $N_type_64_ptrdep,
1311                   $N_ptr_64_ptrdep, $N_dep1_64_ptrdep, $N_dep2_64_ptrdep,
1312                   [def:$N_def_64_ptrdep]
1313                )*
1314                $( $N_doc_128_ptrdep, $N_name_128_ptrdep, $N_type_128_ptrdep,
1315                   $N_ptr_128_ptrdep, $N_dep1_128_ptrdep, $N_dep2_128_ptrdep,
1316                   [def:$N_def_128_ptrdep]
1317                )*
1318                $( $N_doc_256_ptrdep, $N_name_256_ptrdep, $N_type_256_ptrdep,
1319                   $N_ptr_256_ptrdep, $N_dep1_256_ptrdep, $N_dep2_256_ptrdep,
1320                   [def:$N_def_256_ptrdep]
1321                )*
1322                $( $N_doc_512_ptrdep, $N_name_512_ptrdep, $N_type_512_ptrdep,
1323                   $N_ptr_512_ptrdep, $N_dep1_512_ptrdep, $N_dep2_512_ptrdep,
1324                   [def:$N_def_512_ptrdep]
1325                )* ;
1326        }
1327        // 1024-bit / 128-Byte
1328        #[cfg(feature = "_value1024")]
1329        $crate::define_data_value_type_raw! {
1330            single_size: $Value, $Type, $Raw, size: 1024, feature: "_value1024",
1331
1332            copy:
1333                $( $C_doc_8, $C_name_8, $C_type_8,
1334                   [def:$C_def_8]
1335                )*
1336                $( $C_doc_16, $C_name_16, $C_type_16,
1337                   [def:$C_def_16]
1338                )*
1339                $( $C_doc_32, $C_name_32, $C_type_32,
1340                   [def:$C_def_32]
1341                )*
1342                $( $C_doc_64, $C_name_64, $C_type_64,
1343                   [def:$C_def_64]
1344                )*
1345                $( $C_doc_128, $C_name_128, $C_type_128,
1346                   [def:$C_def_128]
1347                )*
1348                $( $C_doc_256, $C_name_256, $C_type_256,
1349                   [def:$C_def_256]
1350                )*
1351                $( $C_doc_512, $C_name_512, $C_type_512,
1352                   [def:$C_def_512]
1353                )*
1354                $( $C_doc_1264, $C_name_1264, $C_type_1264,
1355                   [def:$C_def_1024]
1356                )* ;
1357            copy@dep:
1358                $( $C_doc_8_dep, $C_name_8_dep, $C_type_8_dep,
1359                   $C_dep1_8_dep, $C_dep2_8_dep,
1360                   [def:$C_def_8_dep]
1361                )*
1362                $( $C_doc_16_dep, $C_name_16_dep, $C_type_16_dep,
1363                   $C_dep1_16_dep, $C_dep2_16_dep,
1364                   [def:$C_def_16_dep]
1365                )*
1366                $( $C_doc_32_dep, $C_name_32_dep, $C_type_32_dep,
1367                   $C_dep1_32_dep, $C_dep2_32_dep,
1368                   [def:$C_def_32_dep]
1369                )*
1370                $( $C_doc_64_dep, $C_name_64_dep, $C_type_64_dep,
1371                   $C_dep1_64_dep, $C_dep2_64_dep,
1372                   [def:$C_def_64_dep]
1373                )*
1374                $( $C_doc_128_dep, $C_name_128_dep, $C_type_128_dep,
1375                   $C_dep1_128_dep, $C_dep2_128_dep,
1376                   [def:$C_def_128_dep]
1377                )*
1378                $( $C_doc_256_dep, $C_name_256_dep, $C_type_256_dep,
1379                   $C_dep1_256_dep, $C_dep2_256_dep,
1380                   [def:$C_def_256_dep]
1381                )*
1382                $( $C_doc_512_dep, $C_name_512_dep, $C_type_512_dep,
1383                   $C_dep1_512_dep, $C_dep2_512_dep,
1384                   [def:$C_def_512_dep]
1385                )*
1386                $( $C_doc_1024_dep, $C_name_1024_dep, $C_type_1024_dep,
1387                   $C_dep1_1024_dep, $C_dep2_1024_dep,
1388                   [def:$C_def_1024_dep]
1389                )* ;
1390            copy@ptr:
1391                $( $C_doc_8_ptr, $C_name_8_ptr, $C_type_8_ptr,
1392                   $C_ptr_8_ptr,
1393                   [def:$C_def_8_ptr]
1394                )*
1395                $( $C_doc_16_ptr, $C_name_16_ptr, $C_type_16_ptr,
1396                   $C_ptr_16_ptr,
1397                   [def:$C_def_16_ptr]
1398                )*
1399                $( $C_doc_32_ptr, $C_name_32_ptr, $C_type_32_ptr,
1400                   $C_ptr_32_ptr,
1401                   [def:$C_def_32_ptr]
1402                )*
1403                $( $C_doc_64_ptr, $C_name_64_ptr, $C_type_64_ptr,
1404                   $C_ptr_64_ptr,
1405                   [def:$C_def_64_ptr]
1406                )*
1407                $( $C_doc_128_ptr, $C_name_128_ptr, $C_type_128_ptr,
1408                   $C_ptr_128_ptr,
1409                   [def:$C_def_128_ptr]
1410                )*
1411                $( $C_doc_256_ptr, $C_name_256_ptr, $C_type_256_ptr,
1412                   $C_ptr_256_ptr,
1413                   [def:$C_def_256_ptr]
1414                )*
1415                $( $C_doc_512_ptr, $C_name_512_ptr, $C_type_512_ptr,
1416                   $C_ptr_512_ptr,
1417                   [def:$C_def_512_ptr]
1418                )*
1419                $( $C_doc_1024_ptr, $C_name_1024_ptr, $C_type_1024_ptr,
1420                   $C_ptr_1024_ptr,
1421                   [def:$C_def_1024_ptr]
1422                )* ;
1423            copy@ptrdep:
1424                $( $C_doc_8_ptrdep, $C_name_8_ptrdep, $C_type_8_ptrdep,
1425                   $C_ptrdep_8_ptrdep,
1426                   [def:$C_def_8_ptrdep]
1427                )*
1428                $( $C_doc_16_ptrdep, $C_name_16_ptrdep, $C_type_16_ptrdep,
1429                   $C_ptrdep_16_ptrdep,
1430                   [def:$C_def_16_ptrdep]
1431                )*
1432                $( $C_doc_32_ptrdep, $C_name_32_ptrdep, $C_type_32_ptrdep,
1433                   $C_ptrdep_32_ptrdep,
1434                   [def:$C_def_32_ptrdep]
1435                )*
1436                $( $C_doc_64_ptrdep, $C_name_64_ptrdep, $C_type_64_ptrdep,
1437                   $C_ptrdep_64_ptrdep,
1438                   [def:$C_def_64_ptrdep]
1439                )*
1440                $( $C_doc_128_ptrdep, $C_name_128_ptrdep, $C_type_128_ptrdep,
1441                   $C_ptrdep_128_ptrdep,
1442                   [def:$C_def_128_ptrdep]
1443                )*
1444                $( $C_doc_256_ptrdep, $C_name_256_ptrdep, $C_type_256_ptrdep,
1445                   $C_ptrdep_256_ptrdep,
1446                   [def:$C_def_256_ptrdep]
1447                )*
1448                $( $C_doc_512_ptrdep, $C_name_512_ptrdep, $C_type_512_ptrdep,
1449                   $C_ptrdep_512_ptrdep,
1450                   [def:$C_def_512_ptrdep]
1451                )*
1452                $( $C_doc_1024_ptrdep, $C_name_1024_ptrdep, $C_type_1024_ptrdep,
1453                   $C_ptrdep_1024_ptrdep,
1454                   [def:$C_def_1024_ptrdep]
1455                )* ;
1456
1457            noncopy:
1458                $( $N_doc_8, $N_name_8, $N_type_8,
1459                   [def:$N_def_8]
1460                )*
1461                $( $N_doc_16, $N_name_16, $N_type_16,
1462                   [def:$N_def_16]
1463                )*
1464                $( $N_doc_32, $N_name_32, $N_type_32,
1465                   [def:$N_def_32]
1466                )*
1467                $( $N_doc_64, $N_name_64, $N_type_64,
1468                   [def:$N_def_64]
1469                )*
1470                $( $N_doc_128, $N_name_128, $N_type_128,
1471                   [def:$N_def_128]
1472                )*
1473                $( $N_doc_256, $N_name_256, $N_type_256,
1474                   [def:$N_def_256]
1475                )*
1476                $( $N_doc_512, $N_name_512, $N_type_512,
1477                   [def:$N_def_512]
1478                )*
1479                $( $N_doc_1264, $N_name_1264, $N_type_1264,
1480                   [def:$N_def_1024]
1481                )* ;
1482            noncopy@dep:
1483                $( $N_doc_8_dep, $N_name_8_dep, $N_type_8_dep,
1484                   $N_dep1_8_dep, $N_dep2_8_dep,
1485                   [def:$N_def_8_dep]
1486                )*
1487                $( $N_doc_16_dep, $N_name_16_dep, $N_type_16_dep,
1488                   $N_dep1_16_dep, $N_dep2_16_dep,
1489                   [def:$N_def_16_dep]
1490                )*
1491                $( $N_doc_32_dep, $N_name_32_dep, $N_type_32_dep,
1492                   $N_dep1_32_dep, $N_dep2_32_dep,
1493                   [def:$N_def_32_dep]
1494                )*
1495                $( $N_doc_64_dep, $N_name_64_dep, $N_type_64_dep,
1496                   $N_dep1_64_dep, $N_dep2_64_dep,
1497                   [def:$N_def_64_dep]
1498                )*
1499                $( $N_doc_128_dep, $N_name_128_dep, $N_type_128_dep,
1500                   $N_dep1_128_dep, $N_dep2_128_dep,
1501                   [def:$N_def_128_dep]
1502                )*
1503                $( $N_doc_256_dep, $N_name_256_dep, $N_type_256_dep,
1504                   $N_dep1_256_dep, $N_dep2_256_dep,
1505                   [def:$N_def_256_dep]
1506                )*
1507                $( $N_doc_512_dep, $N_name_512_dep, $N_type_512_dep,
1508                   $N_dep1_512_dep, $N_dep2_512_dep,
1509                   [def:$N_def_512_dep]
1510                )*
1511                $( $N_doc_1024_dep, $N_name_1024_dep, $N_type_1024_dep,
1512                   $N_dep1_1024_dep, $N_dep2_1024_dep,
1513                   [def:$N_def_1024_dep]
1514                )* ;
1515            noncopy@ptr:
1516                $( $N_doc_8_ptr, $N_name_8_ptr, $N_type_8_ptr,
1517                   $N_ptr_8_ptr, $N_dep1_8_ptr, $N_dep2_8_ptr,
1518                   [def:$N_def_8_ptr]
1519                )*
1520                $( $N_doc_16_ptr, $N_name_16_ptr, $N_type_16_ptr,
1521                   $N_ptr_16_ptr, $N_dep1_16_ptr, $N_dep2_16_ptr,
1522                   [def:$N_def_16_ptr]
1523                )*
1524                $( $N_doc_32_ptr, $N_name_32_ptr, $N_type_32_ptr,
1525                   $N_ptr_32_ptr, $N_dep1_32_ptr, $N_dep2_32_ptr,
1526                   [def:$N_def_32_ptr]
1527                )*
1528                $( $N_doc_64_ptr, $N_name_64_ptr, $N_type_64_ptr,
1529                   $N_ptr_64_ptr, $N_dep1_64_ptr, $N_dep2_64_ptr,
1530                   [def:$N_def_64_ptr]
1531                )*
1532                $( $N_doc_128_ptr, $N_name_128_ptr, $N_type_128_ptr,
1533                   $N_ptr_128_ptr, $N_dep1_128_ptr, $N_dep2_128_ptr,
1534                   [def:$N_def_128_ptr]
1535                )*
1536                $( $N_doc_256_ptr, $N_name_256_ptr, $N_type_256_ptr,
1537                   $N_ptr_256_ptr, $N_dep1_256_ptr, $N_dep2_256_ptr,
1538                   [def:$N_def_256_ptr]
1539                )*
1540                $( $N_doc_512_ptr, $N_name_512_ptr, $N_type_512_ptr,
1541                   $N_ptr_512_ptr, $N_dep1_512_ptr, $N_dep2_512_ptr,
1542                   [def:$N_def_512_ptr]
1543                )*
1544                $( $N_doc_1024_ptr, $N_name_1024_ptr, $N_type_1024_ptr,
1545                   $N_ptr_1024_ptr, $N_dep1_1024_ptr, $N_dep2_1024_ptr,
1546                   [def:$N_def_1024_ptr]
1547                )* ;
1548            noncopy@ptrdep:
1549                $( $N_doc_8_ptrdep, $N_name_8_ptrdep, $N_type_8_ptrdep,
1550                   $N_ptr_8_ptrdep, $N_dep1_8_ptrdep, $N_dep2_8_ptrdep,
1551                   [def:$N_def_8_ptrdep]
1552                )*
1553                $( $N_doc_16_ptrdep, $N_name_16_ptrdep, $N_type_16_ptrdep,
1554                   $N_ptr_16_ptrdep, $N_dep1_16_ptrdep, $N_dep2_16_ptrdep,
1555                   [def:$N_def_16_ptrdep]
1556                )*
1557                $( $N_doc_32_ptrdep, $N_name_32_ptrdep, $N_type_32_ptrdep,
1558                   $N_ptr_32_ptrdep, $N_dep1_32_ptrdep, $N_dep2_32_ptrdep,
1559                   [def:$N_def_32_ptrdep]
1560                )*
1561                $( $N_doc_64_ptrdep, $N_name_64_ptrdep, $N_type_64_ptrdep,
1562                   $N_ptr_64_ptrdep, $N_dep1_64_ptrdep, $N_dep2_64_ptrdep,
1563                   [def:$N_def_64_ptrdep]
1564                )*
1565                $( $N_doc_128_ptrdep, $N_name_128_ptrdep, $N_type_128_ptrdep,
1566                   $N_ptr_128_ptrdep, $N_dep1_128_ptrdep, $N_dep2_128_ptrdep,
1567                   [def:$N_def_128_ptrdep]
1568                )*
1569                $( $N_doc_256_ptrdep, $N_name_256_ptrdep, $N_type_256_ptrdep,
1570                   $N_ptr_256_ptrdep, $N_dep1_256_ptrdep, $N_dep2_256_ptrdep,
1571                   [def:$N_def_256_ptrdep]
1572                )*
1573                $( $N_doc_512_ptrdep, $N_name_512_ptrdep, $N_type_512_ptrdep,
1574                   $N_ptr_512_ptrdep, $N_dep1_512_ptrdep, $N_dep2_512_ptrdep,
1575                   [def:$N_def_512_ptrdep]
1576                )*
1577                $( $N_doc_1024_ptrdep, $N_name_1024_ptrdep, $N_type_1024_ptrdep,
1578                   $N_ptr_1024_ptrdep, $N_dep1_1024_ptrdep, $N_dep2_1024_ptrdep,
1579                   [def:$N_def_1024_ptrdep]
1580                )* ;
1581        }
1582    };
1583    (
1584    // -------------------------------------------------------------------------
1585
1586    // This arm defines in one pass a single size `DataValue*`, `DataType*`, `DataRaw*`.
1587    //
1588    // It calls the macros: `define_data_value!`, `define_data_type!` and `define_data_raw!`.
1589    single_size: $Value:ident, $Type:ident, $Raw:ident,
1590    size: $b:literal,
1591    feature: $feature:literal,
1592
1593    copy:
1594        $( $C_doc:literal, $C_name:ident, $C_type:ty,
1595           [def:$C_def:stmt]
1596        )* ;
1597    copy@dep:
1598        $( $C_doc_dep:literal, $C_name_dep:ident, $C_type_dep:ty,
1599           $C_dep1_dep:literal, $C_dep2_dep:literal,
1600           [def:$C_def_dep:stmt]
1601        )* ;
1602    copy@ptr:
1603        $( $C_doc_ptr:literal, $C_name_ptr:ident, $C_type_ptr:ty,
1604           $C_ptr_ptr:meta,
1605           [def:$C_def_ptr:stmt]
1606        )* ;
1607    copy@ptrdep:
1608        $( $C_doc_ptrdep:literal, $C_name_ptrdep:ident, $C_type_ptrdep:ty,
1609           $C_ptr_ptrdep:meta, $C_dep1_ptrdep:literal, $C_dep2_ptrdep:literal,
1610           [def:$C_def_ptrdep:stmt]
1611        )* ;
1612
1613    noncopy:
1614        $( $N_doc:literal, $N_name:ident, $N_type:ty,
1615           [def:$N_def:stmt]
1616        )* ;
1617    noncopy@dep:
1618        $( $N_doc_dep:literal, $N_name_dep:ident, $N_type_dep:ty,
1619           $N_dep1_dep:literal, $N_dep2_dep:literal,
1620           [def:$N_def_dep:stmt]
1621        )* ;
1622    noncopy@ptr:
1623        $( $N_doc_ptr:literal, $N_name_ptr:ident, $N_type_ptr:ty,
1624           $N_ptr_ptr:meta, $N_dep1_ptr:literal, $N_dep2_ptr:literal,
1625           [def:$N_def_ptr:stmt]
1626        )* ;
1627    noncopy@ptrdep:
1628        $( $N_doc_ptrdep:literal, $N_name_ptrdep:ident, $N_type_ptrdep:ty,
1629           $N_ptr_ptrdep:meta, $N_dep1_ptrdep:literal, $N_dep2_ptrdep:literal,
1630           [def:$N_def_ptrdep:stmt]
1631        )* ;
1632    ) => {
1633        $crate::define_data_value! {
1634            v: $Value, t: $Type, r: $Raw,
1635            size: $b, feature: $feature,
1636
1637            copy:
1638                $( $C_doc, $C_name, $C_type,
1639                   [def:$C_def]
1640                )* ;
1641            copy@dep:
1642                $( $C_doc_dep, $C_name_dep, $C_type_dep,
1643                   $C_dep1_dep, $C_dep2_dep,
1644                   [def:$C_def_dep]
1645                )* ;
1646            copy@ptr:
1647                $( $C_doc_ptr, $C_name_ptr, $C_type_ptr,
1648                   $C_ptr_ptr,
1649                   [def:$C_def_ptr]
1650                )* ;
1651            copy@ptrdep:
1652                $( $C_doc_ptrdep, $C_name_ptrdep, $C_type_ptrdep,
1653                   $C_ptr_ptrdep, $C_dep1_ptrdep, $C_dep2_ptrdep,
1654                   [def:$C_def_ptrdep]
1655                )* ;
1656
1657            noncopy:
1658                $( $N_doc, $N_name, $N_type,
1659                   [def:$N_def]
1660                )* ;
1661            noncopy@dep:
1662                $( $N_doc_dep, $N_name_dep, $N_type_dep,
1663                   $N_dep1_dep, $N_dep2_dep,
1664                   [def:$N_def_dep]
1665                )* ;
1666            noncopy@ptr:
1667                $( $N_doc_ptr, $N_name_ptr, $N_type_ptr,
1668                   $N_ptr_ptr, $N_dep1_ptr, $N_dep2_ptr,
1669                   [def:$N_def_ptr]
1670                )* ;
1671            noncopy@ptrdep:
1672                $( $N_doc_ptrdep, $N_name_ptrdep, $N_type_ptrdep,
1673                   $N_ptr_ptrdep, $N_dep1_ptrdep, $N_dep2_ptrdep,
1674                   [def:$N_def_ptrdep]
1675                )* ;
1676        }
1677        $crate::define_data_type! {
1678            v: $Value, t: $Type, r: $Raw,
1679            size: $b, feature: $feature,
1680
1681            copy:
1682                $( $C_doc, $C_name, $C_type,
1683                   [def:$C_def]
1684                )* ;
1685            copy@dep:
1686                $( $C_doc_dep, $C_name_dep, $C_type_dep,
1687                   $C_dep1_dep, $C_dep2_dep,
1688                   [def:$C_def_dep]
1689                )* ;
1690            copy@ptr:
1691                $( $C_doc_ptr, $C_name_ptr, $C_type_ptr,
1692                   $C_ptr_ptr,
1693                   [def:$C_def_ptr]
1694                )* ;
1695            copy@ptrdep:
1696                $( $C_doc_ptrdep, $C_name_ptrdep, $C_type_ptrdep,
1697                   $C_ptr_ptrdep, $C_dep1_ptrdep, $C_dep2_ptrdep,
1698                   [def:$C_def_ptrdep]
1699                )* ;
1700
1701            noncopy:
1702                $( $N_doc, $N_name, $N_type,
1703                   [def:$N_def]
1704                )* ;
1705            noncopy@dep:
1706                $( $N_doc_dep, $N_name_dep, $N_type_dep,
1707                   $N_dep1_dep, $N_dep2_dep,
1708                   [def:$N_def_dep]
1709                )* ;
1710            noncopy@ptr:
1711                $( $N_doc_ptr, $N_name_ptr, $N_type_ptr,
1712                   $N_ptr_ptr, $N_dep1_ptr, $N_dep2_ptr,
1713                   [def:$N_def_ptr]
1714                )* ;
1715            noncopy@ptrdep:
1716                $( $N_doc_ptrdep, $N_name_ptrdep, $N_type_ptrdep,
1717                   $N_ptr_ptrdep, $N_dep1_ptrdep, $N_dep2_ptrdep,
1718                   [def:$N_def_ptrdep]
1719                )* ;
1720        }
1721        $crate::define_data_raw! {
1722            v: $Value, t: $Type, r: $Raw,
1723            size: $b, feature: $feature,
1724
1725            copy:
1726                $( $C_doc, $C_name, $C_type,
1727                   [def:$C_def]
1728                )* ;
1729            copy@dep:
1730                $( $C_doc_dep, $C_name_dep, $C_type_dep,
1731                   $C_dep1_dep, $C_dep2_dep,
1732                   [def:$C_def_dep]
1733                )* ;
1734            copy@ptr:
1735                $( $C_doc_ptr, $C_name_ptr, $C_type_ptr,
1736                   $C_ptr_ptr,
1737                   [def:$C_def_ptr]
1738                )* ;
1739            copy@ptrdep:
1740                $( $C_doc_ptrdep, $C_name_ptrdep, $C_type_ptrdep,
1741                   $C_ptr_ptrdep, $C_dep1_ptrdep, $C_dep2_ptrdep,
1742                   [def:$C_def_ptrdep]
1743                )* ;
1744
1745            noncopy:
1746                $( $N_doc, $N_name, $N_type,
1747                   [def:$N_def]
1748                )* ;
1749            noncopy@dep:
1750                $( $N_doc_dep, $N_name_dep, $N_type_dep,
1751                   $N_dep1_dep, $N_dep2_dep,
1752                   [def:$N_def_dep]
1753                )* ;
1754            noncopy@ptr:
1755                $( $N_doc_ptr, $N_name_ptr, $N_type_ptr,
1756                   $N_ptr_ptr, $N_dep1_ptr, $N_dep2_ptr,
1757                   [def:$N_def_ptr]
1758                )* ;
1759            noncopy@ptrdep:
1760                $( $N_doc_ptrdep, $N_name_ptrdep, $N_type_ptrdep,
1761                   $N_ptr_ptrdep, $N_dep1_ptrdep, $N_dep2_ptrdep,
1762                   [def:$N_def_ptrdep]
1763                )* ;
1764        }
1765    };
1766}
1767pub(crate) use define_data_value_type_raw;