C(++)ECCO
C++ Error Control COding: a header-only library for ECC simulations and experiments, modeling complete coding systems across arbitrary finite fields and complex inter-field relationships - Christian Senger <senger@inue.uni-stuttgart.de>
Loading...
Searching...
No Matches
CECCO::details Namespace Reference

Contains implementation details not to be exposed to the user. Functions and classes here may change without notice. More...

Classes

class  BlockProcessor
 CRTP base providing scalar, vector, and matrix block operations. More...
class  verbosity_guard
 Restores the stream's verbosity level on scope exit (used when printing info for codes constructed from other codes). More...
struct  is_polynomial
 Detect whether T is a Polynomial specialization. More...
struct  is_polynomial< Polynomial< C > >
 Specialization of is_polynomial for Polynomial<C>. More...
struct  coefficient_of
 Coefficient type of a Polynomial; identity for all other types. More...
struct  coefficient_of< Polynomial< C > >
 Specialization of coefficient_of for Polynomial<C>. More...
struct  degree_over_prime
 Total extension degree of T over its prime field. More...
struct  degree_over_prime< Fp< p > >
struct  degree_over_prime< Ext< B, modulus, mode > >
struct  degree_over_prime< Iso< MAIN, OTHERS... > >
struct  is_subfield_of
 Construction-based subfield test: SUBFIELD reachable by descending SUPERFIELD's tower. More...
struct  is_subfield_of< Fp< p >, Fp< p > >
struct  is_subfield_of< Ext< B, modulus, mode >, SUB >
struct  is_subfield_of< Ext< B, modulus, mode >, Ext< B, modulus, mode > >
struct  is_subfield_of< Ext< B_SUP, modulus_SUP, mode_SUP >, Ext< B_SUB, modulus_SUB, mode_SUB > >
struct  is_subfield_of< Iso< MAIN, OTHERS... >, SUB >
struct  is_subfield_of< Iso< MAIN, OTHERS... >, Iso< MAIN, OTHERS... > >
struct  is_subfield_of< Iso< SUP_MAIN, SUP_OTHERS... >, Iso< SUB_MAIN, SUB_OTHERS... > >
struct  type_list
 Compile-time type list utility for subfield calculations. More...
struct  concat
 Concatenation of type_lists (duplicates preserved). More...
struct  concat<>
struct  concat< type_list< Types... > >
struct  concat< type_list< Types1... >, type_list< Types2... >, Rest... >
struct  contains
 Check if a type exists in a type_list. More...
struct  contains< T, type_list< Types... > >
struct  union_type_lists
 Union of two type_lists (removes duplicates). More...
struct  union_type_lists< type_list< Types1... >, type_list< Types2... > >
struct  intersect_type_lists
 Intersection of two type_lists. More...
struct  intersect_type_lists< type_list< Types1... >, type_list< Types2... > >
struct  largest_field_in_list
 Find the largest field (by get_size()) in a type_list. More...
struct  largest_field_in_list< type_list< T > >
struct  largest_field_in_list< type_list< T1, T2, Rest... > >
struct  collect_subfields
 All subfields of F (including F itself), as a type_list. More...
struct  collect_subfields< Fp< p > >
struct  collect_subfields< Ext< B, modulus, mode > >
struct  union_all_subfields
struct  union_all_subfields<>
struct  union_all_subfields< First, Rest... >
struct  collect_subfields< Iso< MAIN, OTHERS... > >
struct  iso_info
 Detect whether T is an Iso and expose its components. More...
struct  iso_info< Iso< MAIN, OTHERS... > >
 Specialization of iso_info for Iso<MAIN, OTHERS...>. More...
struct  largest_common_subfield
 Largest field that appears as a subfield of both F and G. More...
class  NonCopyable
 Mixin that deletes the copy operations and defaults the move operations. More...
class  Base
 Tag base for the CRTP-protection idiom. More...
class  Field
 CRTP base documenting the interface every field type must provide. More...
struct  SignedLabel
struct  Lut1D
 1D lookup table for unary field operations (negation, inversion, order) More...
struct  Lut2D
 2D lookup table for commutative binary operations, optionally compressed More...
struct  Lut2Dcoeff
 Lookup table mapping each extension-field label to its base-field coefficient vector. More...
struct  LutHolderNoProvider
 Holds a LUT generated by F() (no dependencies); selects compile-time or lazy storage. More...
struct  LutHolderNoProvider< LutType, F, LutMode::CompileTime >
 CompileTime specialisation: table is a constexpr static member. More...
struct  LutHolderNoProvider< LutType, F, LutMode::RunTime >
 RunTime specialisation: thread-safe lazy initialisation on first access. More...
struct  LutHolder
 Holds a LUT generated by F(P); P provides a dependency table. More...
struct  LutHolder< LutType, ProviderLutType, P, F, LutMode::CompileTime >
 CompileTime specialisation: table baked into the binary. More...
struct  LutHolder< LutType, ProviderLutType, P, F, LutMode::RunTime >
 RunTime specialisation: thread-safe lazy initialisation, dependency resolved on first access. More...
struct  IsomorphismPair
 Shared static storage of the forward and reverse maps for the isomorphism A ↔ B. More...
struct  Vertex
 Vertex in one trellis layer. More...
struct  Edge
 Edge between two adjacent trellis layers. More...
struct  CheckEdge
 Edge from a check node to a variable node in a Tanner graph. More...
struct  CacheEntry
 Cache entry specification. More...
class  Cache
 Heterogeneous cache indexed by entry ID. More...
class  OnceCache
 Thread-safe single-value cache. More...

Typedefs

template<typename T, typename ElementType>
using SameTypeProcessor = BlockProcessor<T, ElementType, ElementType>
 CRTP base for blocks where input and output element types coincide.
template<typename T>
using EncoderProcessor = BlockProcessor<T, Fp<2>, std::complex<double>>
 CRTP base for blocks mapping bits to complex symbols (e.g. NRZ/BPSK modulation).
template<typename T>
using DecoderProcessor = BlockProcessor<T, std::complex<double>, Fp<2>>
 CRTP base for blocks mapping complex symbols back to bits (hard demod).
template<typename T>
using coefficient_of_t = typename coefficient_of<T>::type
template<typename... Lists>
using concat_t = typename concat<Lists...>::type
template<typename List1, typename List2>
using union_type_lists_t = typename union_type_lists<List1, List2>::type
template<typename List1, typename List2>
using intersect_type_lists_t = typename intersect_type_lists<List1, List2>::type
template<typename List>
using largest_field_in_list_t = typename largest_field_in_list<List>::type
template<typename F>
using collect_subfields_t = typename collect_subfields<F>::type
template<typename F, typename G>
using largest_common_subfield_t = typename largest_common_subfield<F, G>::type

Enumerations

enum  matrix_type_t : uint8_t {
  Generic , Zero , Diagonal , Identity ,
  Vandermonde , Toeplitz
}
 Matrix structural type tag for optimization (internal). More...

Functions

template<FiniteFieldType T>
InfInt A (size_t n, size_t d, InfInt w)
template<FieldType T>
Matrix< T > LDC_G (const Matrix< T > &G_U, const Matrix< T > &G_V)
bool validate_modification_pattern (const std::vector< size_t > &v, std::size_t n)
constexpr SignedLabel parse_signed_label (int l, size_t field_size)
template<uint16_t q, uint8_t m, size_t SIZE>
static size_t constexpr integer_from_coeffs (const std::array< size_t, SIZE > &coeffs) noexcept
 Encode polynomial coefficients (low-to-high) as a base-q integer label.
template<typename LabelType, LabelType FieldSize>
constexpr auto compute_multiplicative_orders (const Lut2D< LabelType, FieldSize > &mul_lut)
 Build the table of multiplicative orders for all elements of 𝔽_Q.
template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
constexpr auto compute_multiplicative_inverses_direct ()
 Build multiplicative-inverse table for 𝔽_p via extended Euclidean algorithm.
template<typename LabelType, LabelType FieldSize>
constexpr auto compute_multiplicative_inverses_search (const Lut2D< LabelType, FieldSize > &mul_lut)
 Build multiplicative-inverse table by searching the multiplication LUT.
template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
constexpr auto compute_additive_inverses_direct ()
 Build additive-inverse (negation) table for 𝔽_p.
template<typename LabelType, LabelType FieldSize>
constexpr auto compute_additive_inverses_search (const Lut2D< LabelType, FieldSize > &add_lut)
 Build additive-inverse table by searching the addition LUT.
template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
constexpr auto compute_modular_addition_table ()
 Build the addition table for 𝔽_p: lut_add(a, b) = (a + b) mod p.
template<typename F>
constexpr F::label_t compute_primitive_root ()
 Smallest primitive root of F* by direct power enumeration.
template<typename LabelType, LabelType FieldSize, typename LutCoeffType, uint8_t ExtensionDegree, typename BaseFieldType>
constexpr auto compute_polynomial_addition_table (const LutCoeffType &lut_coeff)
 Build the addition table for 𝔽_{q^m} via coefficient-wise base-field addition.
template<typename FieldType>
size_t calculate_multiplicative_order (const FieldType &element)
 Multiplicative order of element by repeated multiplication.
template<typename LabelType, LabelType FieldSize>
constexpr LabelType find_generator (const Lut1D< LabelType, FieldSize > &lut_mul_ord)
 First element with multiplicative order Q − 1 (a generator of 𝔽_Q*).
template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
constexpr auto compute_modular_multiplication_table ()
 Build the multiplication table for 𝔽_p: lut_mul(a, b) = (a · b) mod p.
template<typename LabelType, LabelType FieldSize, typename LutCoeffType, uint8_t ExtensionDegree, typename BaseFieldType, auto Modulus>
constexpr auto compute_polynomial_multiplication_table (const LutCoeffType &lut_coeff)
 Build the multiplication table for 𝔽_{q^m}: polynomial multiply, then reduce mod f(x).
template<FiniteFieldType T>
std::array< double, T::get_size()> symbol_costs_from_llrs (const Matrix< double > &llrs, size_t s)
 Convert one column of symbol-level LLRs to trellis costs.
double max_star (double a, double b) noexcept
bool reservoir_accept (size_t count)
 Reservoir-sampling acceptance test for randomized tie-breaking.
constexpr double floor_constexpr (double x)
 Constexpr floor function.
std::string basename (const char *path)

Variables

const int index = std::ios_base::xalloc()
constexpr long basic = 0
 Verbosity levels stored in os.iword(index), set by the show* manipulators.
constexpr long most = 1
constexpr long all = 2
constexpr long special = 3
template<typename T>
constexpr bool is_polynomial_v = is_polynomial<T>::value
template<FiniteFieldType T>
constexpr size_t degree_over_prime_v = degree_over_prime<T>::value
template<FiniteFieldType SUPER, FiniteFieldType SUB>
constexpr bool is_subfield_of_v = is_subfield_of<SUPER, SUB>::value
template<typename T, typename List>
constexpr bool contains_v = contains<T, List>::value
template<typename T, typename... Types>
constexpr bool is_distinct_from_all = (!std::is_same_v<T, Types> && ...)
 True iff T is not the same as any of Types....
template<typename... Types>
constexpr bool pairwise_distinct_v = true
 True iff all types in the pack are pairwise distinct.
template<typename First, typename... Rest>
constexpr bool pairwise_distinct_v< First, Rest... >
 Specialization of pairwise_distinct_v splitting off the first type.
static const uint8_t colormap [64][3]

Detailed Description

Contains implementation details not to be exposed to the user. Functions and classes here may change without notice.

Typedef Documentation

◆ coefficient_of_t

template<typename T>
using CECCO::details::coefficient_of_t = typename coefficient_of<T>::type

Definition at line 231 of file field_concepts_traits.hpp.

◆ collect_subfields_t

template<typename F>
using CECCO::details::collect_subfields_t = typename collect_subfields<F>::type

Definition at line 651 of file field_concepts_traits.hpp.

◆ concat_t

template<typename... Lists>
using CECCO::details::concat_t = typename concat<Lists...>::type

Definition at line 522 of file field_concepts_traits.hpp.

◆ DecoderProcessor

template<typename T>
using CECCO::details::DecoderProcessor = BlockProcessor<T, std::complex<double>, Fp<2>>

CRTP base for blocks mapping complex symbols back to bits (hard demod).

Definition at line 186 of file blocks.hpp.

◆ EncoderProcessor

template<typename T>
using CECCO::details::EncoderProcessor = BlockProcessor<T, Fp<2>, std::complex<double>>

CRTP base for blocks mapping bits to complex symbols (e.g. NRZ/BPSK modulation).

Definition at line 182 of file blocks.hpp.

◆ intersect_type_lists_t

template<typename List1, typename List2>
using CECCO::details::intersect_type_lists_t = typename intersect_type_lists<List1, List2>::type

Definition at line 578 of file field_concepts_traits.hpp.

◆ largest_common_subfield_t

template<typename F, typename G>
using CECCO::details::largest_common_subfield_t = typename largest_common_subfield<F, G>::type

Definition at line 721 of file field_concepts_traits.hpp.

◆ largest_field_in_list_t

template<typename List>
using CECCO::details::largest_field_in_list_t = typename largest_field_in_list<List>::type

Definition at line 602 of file field_concepts_traits.hpp.

◆ SameTypeProcessor

template<typename T, typename ElementType>
using CECCO::details::SameTypeProcessor = BlockProcessor<T, ElementType, ElementType>

CRTP base for blocks where input and output element types coincide.

Definition at line 178 of file blocks.hpp.

◆ union_type_lists_t

template<typename List1, typename List2>
using CECCO::details::union_type_lists_t = typename union_type_lists<List1, List2>::type

Definition at line 557 of file field_concepts_traits.hpp.

Enumeration Type Documentation

◆ matrix_type_t

Matrix structural type tag for optimization (internal).

Maintained automatically by Matrix<T> operations; mutations that break a structure demote the tag to Generic. Specialized algorithms dispatch on this tag to avoid full O(mn) traversals when possible.

Enumerator
Generic 

Generic matrix with arbitrary elements.

Zero 

Zero matrix with all elements equal to zero.

Diagonal 

Diagonal matrix (square) with non-zero elements only on the main diagonal.

Identity 

Identity matrix with ones on diagonal and zeros elsewhere.

Vandermonde 

Vandermonde matrix with arithmetic progressions (of pairwise distinct elements) in columns.

Toeplitz 

Toeplitz matrix T_{i,j} = t_{i-j} with constant diagonals.

Definition at line 88 of file matrices.hpp.

Function Documentation

◆ A()

template<FiniteFieldType T>
InfInt CECCO::details::A ( size_t n,
size_t d,
InfInt w )

Definition at line 56 of file code_bounds.hpp.

Here is the call graph for this function:

◆ basename()

std::string CECCO::details::basename ( const char * path)
inline

Definition at line 714 of file helpers.hpp.

◆ calculate_multiplicative_order()

template<typename FieldType>
size_t CECCO::details::calculate_multiplicative_order ( const FieldType & element)

Multiplicative order of element by repeated multiplication.

Exceptions
std::invalid_argumentif element is zero

Single-element runtime path; batch precomputation lives in compute_multiplicative_orders. Order always divides Q − 1.

Definition at line 1066 of file fields.hpp.

◆ compute_additive_inverses_direct()

template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
auto CECCO::details::compute_additive_inverses_direct ( )
constexpr

Build additive-inverse (negation) table for 𝔽_p.

Direct formula: −0 = 0, −a = p − a otherwise. Prime-field path; extension fields use compute_additive_inverses_search.

Definition at line 958 of file fields.hpp.

◆ compute_additive_inverses_search()

template<typename LabelType, LabelType FieldSize>
auto CECCO::details::compute_additive_inverses_search ( const Lut2D< LabelType, FieldSize > & add_lut)
constexpr

Build additive-inverse table by searching the addition LUT.

Used for extension fields. Symmetry a + b = 0 ⇒ b + a = 0 fills two entries per match.

Definition at line 971 of file fields.hpp.

◆ compute_modular_addition_table()

template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
auto CECCO::details::compute_modular_addition_table ( )
constexpr

Build the addition table for 𝔽_p: lut_add(a, b) = (a + b) mod p.

Stores the upper triangle only (commutativity). Extension-field analogue: compute_polynomial_addition_table.

Definition at line 992 of file fields.hpp.

◆ compute_modular_multiplication_table()

template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
auto CECCO::details::compute_modular_multiplication_table ( )
constexpr

Build the multiplication table for 𝔽_p: lut_mul(a, b) = (a · b) mod p.

Stores the upper triangle only (commutativity). Extension-field analogue: compute_polynomial_multiplication_table.

Definition at line 1096 of file fields.hpp.

◆ compute_multiplicative_inverses_direct()

template<typename LabelType, LabelType FieldSize>
requires (is_prime<LabelType>(FieldSize))
auto CECCO::details::compute_multiplicative_inverses_direct ( )
constexpr

Build multiplicative-inverse table for 𝔽_p via extended Euclidean algorithm.

Sentinel: lut_inv[0] == 0. Prime-field path; for extension fields use compute_multiplicative_inverses_search.

Definition at line 914 of file fields.hpp.

◆ compute_multiplicative_inverses_search()

template<typename LabelType, LabelType FieldSize>
auto CECCO::details::compute_multiplicative_inverses_search ( const Lut2D< LabelType, FieldSize > & mul_lut)
constexpr

Build multiplicative-inverse table by searching the multiplication LUT.

Used for extension fields, where extended Euclidean over the prime is not applicable. Exploits the symmetry a · b = 1 ⇒ b · a = 1 to fill two entries per match.

Definition at line 935 of file fields.hpp.

◆ compute_multiplicative_orders()

template<typename LabelType, LabelType FieldSize>
auto CECCO::details::compute_multiplicative_orders ( const Lut2D< LabelType, FieldSize > & mul_lut)
constexpr

Build the table of multiplicative orders for all elements of 𝔽_Q.

Each entry is the smallest k > 0 with a^k == 1; element 0 carries the sentinel order 0. All orders divide Q − 1.

Definition at line 890 of file fields.hpp.

◆ compute_polynomial_addition_table()

template<typename LabelType, LabelType FieldSize, typename LutCoeffType, uint8_t ExtensionDegree, typename BaseFieldType>
auto CECCO::details::compute_polynomial_addition_table ( const LutCoeffType & lut_coeff)
constexpr

Build the addition table for 𝔽_{q^m} via coefficient-wise base-field addition.

Each element is a polynomial over 𝔽_q; addition reduces to base-field addition on the coefficient vectors taken from lut_coeff.

Definition at line 1035 of file fields.hpp.

◆ compute_polynomial_multiplication_table()

template<typename LabelType, LabelType FieldSize, typename LutCoeffType, uint8_t ExtensionDegree, typename BaseFieldType, auto Modulus>
auto CECCO::details::compute_polynomial_multiplication_table ( const LutCoeffType & lut_coeff)
constexpr

Build the multiplication table for 𝔽_{q^m}: polynomial multiply, then reduce mod f(x).

f(x) = Modulus must be monic and irreducible over 𝔽_q. Reducibility is detected during table construction (a non-zero label that maps to 0 is impossible in a field) and surfaces as std::invalid_argument.

Exceptions
std::invalid_argumentif Modulus is not irreducible over the base field

Definition at line 1120 of file fields.hpp.

◆ compute_primitive_root()

template<typename F>
F::label_t CECCO::details::compute_primitive_root ( )
constexpr

Smallest primitive root of F* by direct power enumeration.

For each candidate g ∈ {2, …, p−1} walks g, g², …, g^{p−2}; g is primitive iff none of those equals 1. Evaluated at compile time via F's constexpr operator*=.

Definition at line 1009 of file fields.hpp.

◆ find_generator()

template<typename LabelType, LabelType FieldSize>
LabelType CECCO::details::find_generator ( const Lut1D< LabelType, FieldSize > & lut_mul_ord)
constexpr

First element with multiplicative order Q − 1 (a generator of 𝔽_Q*).

Definition at line 1084 of file fields.hpp.

◆ floor_constexpr()

double CECCO::details::floor_constexpr ( double x)
constexpr

Constexpr floor function.

Parameters
xFloating-point value
Returns
Floor of x (largest integer ≤ x)

Alternative to std::floor for constant evaluation.

Note
Returns double, matching std::floor.

Definition at line 485 of file helpers.hpp.

◆ integer_from_coeffs()

template<uint16_t q, uint8_t m, size_t SIZE>
size_t constexpr CECCO::details::integer_from_coeffs ( const std::array< size_t, SIZE > & coeffs)
staticconstexprnoexcept

Encode polynomial coefficients (low-to-high) as a base-q integer label.

Template Parameters
qBase field size
mExtension degree (number of coefficients used)
SIZELength of coeffs (must be ≥ m)

Definition at line 804 of file fields.hpp.

◆ LDC_G()

template<FieldType T>
Matrix< T > CECCO::details::LDC_G ( const Matrix< T > & G_U,
const Matrix< T > & G_V )

Definition at line 5836 of file codes.hpp.

◆ max_star()

double CECCO::details::max_star ( double a,
double b )
inlinenoexcept

Definition at line 139 of file graphs.hpp.

◆ parse_signed_label()

SignedLabel CECCO::details::parse_signed_label ( int l,
size_t field_size )
constexpr

Definition at line 788 of file fields.hpp.

◆ reservoir_accept()

bool CECCO::details::reservoir_accept ( size_t count)
inline

Reservoir-sampling acceptance test for randomized tie-breaking.

Parameters
countNumber of candidates tied for best so far, including the current one (≥ 1)
Returns
true with probability 1/count

Reservoir sampling with a reservoir of size one, Algorithm R (Wikipedia, "Reservoir sampling"): for the i-th stream item draw randomInteger(1, i) and keep it iff the draw is 1, i.e. with probability 1/i. Passing the running tie count (incremented for the current candidate) thus leaves every tied candidate equally likely to be the one finally kept. Used by the Viterbi, BCJR, and standard-array tie-breaks.

if (metric < best) { best = metric; choice = cand; ties = 1; }
else if (metric == best && details::reservoir_accept(++ties)) choice = cand;
bool reservoir_accept(size_t count)
Reservoir-sampling acceptance test for randomized tie-breaking.
Definition helpers.hpp:474

Definition at line 474 of file helpers.hpp.

◆ symbol_costs_from_llrs()

template<FiniteFieldType T>
std::array< double, T::get_size()> CECCO::details::symbol_costs_from_llrs ( const Matrix< double > & llrs,
size_t s )

Convert one column of symbol-level LLRs to trellis costs.

Template Parameters
TFinite field of the trellis edge labels
Parameters
llrsMatrix whose entry (a - 1, s) is ln(P(r_s | 0) / P(r_s | a))
sSymbol index
Returns
Costs indexed by field-element label, with cost zero for symbol 0

Lower cost means greater likelihood. Non-finite LLRs are clamped to ±1e6.

Definition at line 129 of file graphs.hpp.

◆ validate_modification_pattern()

bool CECCO::details::validate_modification_pattern ( const std::vector< size_t > & v,
std::size_t n )
inline

Definition at line 6963 of file codes.hpp.

Variable Documentation

◆ all

long CECCO::details::all = 2
inlineconstexpr

Definition at line 172 of file codes.hpp.

◆ basic

long CECCO::details::basic = 0
inlineconstexpr

Verbosity levels stored in os.iword(index), set by the show* manipulators.

Definition at line 170 of file codes.hpp.

◆ colormap

const uint8_t CECCO::details::colormap[64][3]
static
Initial value:
= {
{0, 0, 0}, {0, 0, 24}, {0, 0, 40}, {0, 0, 56}, {0, 0, 72}, {0, 0, 88},
{0, 0, 104}, {0, 0, 120}, {0, 0, 136}, {0, 0, 152}, {0, 0, 167}, {0, 0, 183},
{0, 0, 199}, {0, 0, 215}, {0, 0, 231}, {0, 0, 252}, {0, 6, 253}, {0, 24, 232},
{0, 40, 216}, {0, 56, 200}, {0, 72, 184}, {0, 88, 168}, {0, 104, 152}, {0, 120, 136},
{0, 136, 120}, {0, 152, 104}, {0, 167, 88}, {0, 183, 72}, {0, 199, 56}, {0, 215, 41},
{0, 231, 25}, {0, 249, 6}, {6, 255, 0}, {24, 255, 0}, {40, 255, 0}, {56, 255, 0},
{72, 255, 0}, {88, 255, 0}, {104, 255, 0}, {120, 255, 0}, {136, 255, 0}, {152, 255, 0},
{167, 255, 0}, {183, 255, 0}, {199, 255, 0}, {215, 255, 0}, {231, 255, 0}, {249, 255, 0},
{255, 255, 6}, {255, 255, 24}, {255, 255, 40}, {255, 255, 56}, {255, 255, 72}, {255, 255, 88},
{255, 255, 104}, {255, 255, 120}, {255, 255, 136}, {255, 255, 152}, {255, 255, 167}, {255, 255, 183},
{255, 255, 199}, {255, 255, 215}, {255, 255, 231}, {255, 255, 255}}

Definition at line 726 of file helpers.hpp.

◆ contains_v

template<typename T, typename List>
bool CECCO::details::contains_v = contains<T, List>::value
constexpr

Definition at line 536 of file field_concepts_traits.hpp.

◆ degree_over_prime_v

template<FiniteFieldType T>
size_t CECCO::details::degree_over_prime_v = degree_over_prime<T>::value
constexpr

Definition at line 354 of file field_concepts_traits.hpp.

◆ index

const int CECCO::details::index = std::ios_base::xalloc()
inline

Definition at line 167 of file codes.hpp.

◆ is_distinct_from_all

template<typename T, typename... Types>
bool CECCO::details::is_distinct_from_all = (!std::is_same_v<T, Types> && ...)
constexpr

True iff T is not the same as any of Types....

Definition at line 725 of file field_concepts_traits.hpp.

◆ is_polynomial_v

template<typename T>
bool CECCO::details::is_polynomial_v = is_polynomial<T>::value
constexpr

Definition at line 204 of file field_concepts_traits.hpp.

◆ is_subfield_of_v

template<FiniteFieldType SUPER, FiniteFieldType SUB>
bool CECCO::details::is_subfield_of_v = is_subfield_of<SUPER, SUB>::value
constexpr

Definition at line 389 of file field_concepts_traits.hpp.

◆ most

long CECCO::details::most = 1
inlineconstexpr

Definition at line 171 of file codes.hpp.

◆ pairwise_distinct_v

template<typename... Types>
bool CECCO::details::pairwise_distinct_v = true
constexpr

True iff all types in the pack are pairwise distinct.

Template Parameters
TypesParameter pack

Used by CECCO::Iso to reject duplicate representations.

Definition at line 735 of file field_concepts_traits.hpp.

◆ pairwise_distinct_v< First, Rest... >

template<typename First, typename... Rest>
bool CECCO::details::pairwise_distinct_v< First, Rest... >
constexpr
Initial value:
=
is_distinct_from_all<First, Rest...> && pairwise_distinct_v<Rest...>
constexpr bool is_distinct_from_all
True iff T is not the same as any of Types....
constexpr bool pairwise_distinct_v
True iff all types in the pack are pairwise distinct.

Specialization of pairwise_distinct_v splitting off the first type.

Definition at line 739 of file field_concepts_traits.hpp.

◆ special

long CECCO::details::special = 3
inlineconstexpr

Definition at line 173 of file codes.hpp.