2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
35#ifndef FIELD_CONCEPTS_TRAITS_HPP
36#define FIELD_CONCEPTS_TRAITS_HPP
43
44
45
46
47
48
53
54
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
157
158
159
160
161
162
163
164
165
169template <SignedIntType T>
173
174
175
176
177
178
179
180
181
186template <CoefficientType T>
192
193
194
195
196
197
198
199
207template <CoefficientType C>
211
212
213
214
215
216
217
218
225template <CoefficientType C>
236
237
238
239
240
245
246
247
248
249
250
251
252
253
254
255
256
263
264
265
266
267
268
269
270
271
272
277
278
279
280
281
282
283
284
285
286
287
288
289
290template <
typename T,
typename...
Types>
294
295
296
297
298
299
300#define MOD std::array
305template <FiniteFieldType B,
MOD modulus,
LutMode mode>
308template <FiniteFieldType MAIN, FiniteFieldType... OTHERS>
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336template <
typename A,
typename B>
342
343
344
345
346
347
348
349
350template <FiniteFieldType T>
375
376
377
378
379
380
381
382
383
384
385template <FiniteFieldType SUPERFIELD, FiniteFieldType SUBFIELD>
423template <FiniteFieldType SUP_MAIN, FiniteFieldType... SUP_OTHERS, FiniteFieldType SUB_MAIN,
424 FiniteFieldType... SUB_OTHERS>
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
479
480
481
482
483
484
485
486
487template <
typename S,
typename E>
493
494
495
496template <
typename... Types>
500
501
502
503template <
typename... Lists>
511template <
typename... Types>
516template <
typename... Types1,
typename... Types2,
typename... Rest>
521template <
typename... Lists>
525
526
527
528
529template <
typename T,
typename List>
532template <
typename T,
typename... Types>
535template <
typename T,
typename List>
539
540
541
542
543template <
typename List1,
typename List2>
546template <
typename... Types1,
typename... Types2>
549 template <
typename T>
556template <
typename List1,
typename List2>
560
561
562
563
564template <
typename List1,
typename List2>
567template <
typename... Types1,
typename... Types2>
570 template <
typename T>
577template <
typename List1,
typename List2>
581
582
583
584template <
typename List>
592template <
typename T1,
typename T2,
typename... Rest>
601template <
typename List>
605
606
607
608
609
610
611
612
623template <FiniteFieldType B,
MOD modulus,
LutMode mode>
629template <
typename... Types>
637template <
typename First,
typename... Rest>
654
655
656
657
658
659
660
661
669template <FiniteFieldType MAIN, FiniteFieldType... OTHERS>
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701template <
typename F,
typename G>
703 static_assert(F::get_characteristic() == G::get_characteristic(),
"Fields must have the same characteristic");
720template <
typename F,
typename G>
724template <
typename T,
typename...
Types>
728
729
730
731
732
733
734template <
typename...
Types>
738template <
typename First,
typename...
Rest>
740 is_distinct_from_all<First, Rest...> && pairwise_distinct_v<Rest...>;
743
744
745
746
Extension field š½_{q^m} ā
B[x]/(f(x)), constructed from a base field and an irreducible monic modulus...
Prime field š½_p ā
ā¤/pā¤
Single logical field unifying several pairwise-isomorphic representations.
Univariate polynomial p(x) = aā + aāx + ⦠+ aāxāæ over a CECCO::CoefficientType.
Field of rational numbers ā = { p/q : p, q ā ā¤, q ā 0 } with selectable precision.
Tag base for the CRTP-protection idiom.
Mixin that deletes the copy operations and defaults the move operations.
NonCopyable(const NonCopyable &)=delete
NonCopyable & operator=(NonCopyable &&)=default
NonCopyable(NonCopyable &&)=default
constexpr NonCopyable()=default
NonCopyable & operator=(const NonCopyable &)=delete
T is identical to at least one of Types....
Admissible coefficient type for CECCO::Polynomial (scalar-like types).
Admissible component type for CECCO::Vector and CECCO::Matrix.
Inverse of SubfieldOf: ExtensionOf<S, E> iff SubfieldOf<E, S>.
Concept for field types: full algebraic interface.
Refines FieldType for finite fields š½_{p^m}.
A and B are finite fields of the same size (and thus isomorphic).
T is a Polynomial<C> over some CoefficientType C.
Types whose operator== reflects mathematical equality.
Standard signed integers or InfInt for arbitrary precision.
SUBFIELD ā SUPERFIELD as constructed in this library (Iso paths included).
#define MOD
Alias for std::array, used to spell modulus polynomials in CECCO::Ext.
Contains implementation details not to be exposed to the user. Functions and classes here may change ...
constexpr bool contains_v
typename intersect_type_lists< List1, List2 >::type intersect_type_lists_t
constexpr bool pairwise_distinct_v< First, Rest... >
Specialization of pairwise_distinct_v splitting off the first type.
constexpr bool is_polynomial_v
typename concat< Lists... >::type concat_t
typename largest_common_subfield< F, G >::type largest_common_subfield_t
constexpr bool is_subfield_of_v
constexpr bool is_distinct_from_all
True iff T is not the same as any of Types....
typename coefficient_of< T >::type coefficient_of_t
typename largest_field_in_list< List >::type largest_field_in_list_t
constexpr bool pairwise_distinct_v
True iff all types in the pack are pairwise distinct.
constexpr size_t degree_over_prime_v
typename collect_subfields< F >::type collect_subfields_t
typename union_type_lists< List1, List2 >::type union_type_lists_t
Provides a framework for error correcting codes.
LutMode
LUT generation mode for field operations.
@ CompileTime
Generate LUTs at compile-time using constexpr (default).
@ RunTime
Generate LUTs at runtime using lazy initialization.
Specialization of coefficient_of for Polynomial<C>.
Coefficient type of a Polynomial; identity for all other types.
type_list< Fp< p > > type
All subfields of F (including F itself), as a type_list.
typename concat< type_list< Types1..., Types2... >, Rest... >::type type
type_list< Types... > type
Concatenation of type_lists (duplicates preserved).
Check if a type exists in a type_list.
Total extension degree of T over its prime field.
Intersection of two type_lists.
Specialization of is_polynomial for Polynomial<C>.
Detect whether T is a Polynomial specialization.
Construction-based subfield test: SUBFIELD reachable by descending SUPERFIELD's tower.
Specialization of iso_info for Iso<MAIN, OTHERS...>.
static constexpr bool is_iso
Detect whether T is an Iso and expose its components.
static constexpr bool is_iso
Largest field that appears as a subfield of both F and G.
Find the largest field (by get_size()) in a type_list.
Compile-time type list utility for subfield calculations.
Union of two type_lists (removes duplicates).