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::Iso< MAIN, OTHERS > Class Template Reference

Single logical field unifying several pairwise-isomorphic representations. More...

#include <fields.hpp>

Inheritance diagram for CECCO::Iso< MAIN, OTHERS >:
Inheritance graph

Public Types

using label_t = typename MAIN::label_t
using BASE_FIELD = typename MAIN::BASE_FIELD

Public Member Functions

constexpr Iso () noexcept
 Default constructor: 0 (consistent across all representations).
constexpr Iso (int l)
 Construct from a signed element label via the MAIN representation.
constexpr Iso (const MAIN &other) noexcept
 Wrap a MAIN-representation element.
constexpr Iso (MAIN &&other) noexcept
 Wrap a MAIN-representation rvalue.
template<BelongsTo< OTHERS... > OTHER>
constexpr Iso (const OTHER &other)
 Wrap an OTHERS element by converting to MAIN.
template<BelongsTo< OTHERS... > OTHER>
constexpr Iso (OTHER &&other)
 Wrap an OTHERS rvalue by converting to MAIN.
constexpr Iso (const Iso &other) noexcept=default
constexpr Iso (Iso &&other) noexcept=default
template<FiniteFieldType T>
 Iso (const Vector< T > &v)
 Construct from a coefficient vector over a subfield T.
template<FiniteFieldType B, MOD modulus, LutMode mode>
 Iso (const Ext< B, modulus, mode > &other)
 Cross-field conversion from an extension field.
template<uint16_t p>
requires SubfieldOf<Iso<MAIN, OTHERS...>, Fp<p>> && (!std::is_same_v<MAIN, Fp<p>>) && (!BelongsTo<Fp<p>, OTHERS...>)
constexpr Iso (const Fp< p > &other)
 Embed a prime-field element when š”½_p is a (possibly indirect) subfield of the Iso.
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
 Iso (const Iso< OTHER_MAIN, OTHER_OTHERS... > &other)
 Cross-field conversion from another Iso of the same characteristic.
constexpr Iso operator- () const
 Additive inverse (delegates to MAIN).
constexpr Iso & operator+= (const Iso &other)
 *this += other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso & operator+= (const OTHER &other)
 *this += other after converting an OTHERS operand to MAIN
constexpr Iso & operator-= (const Iso &other)
 *this -= other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso & operator-= (const OTHER &other)
 *this -= other after converting an OTHERS operand to MAIN
constexpr Iso & operator*= (const Iso &other)
 *this *= other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso & operator*= (const OTHER &other)
 *this *= other after converting an OTHERS operand to MAIN
constexpr Iso & operator*= (int s)
 Scalar multiplication by an int (delegates to MAIN).
Iso & operator/= (const Iso &other)
 *this /= other; throws std::invalid_argument if other is zero
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & operator/= (const OTHER &other)
 *this /= other after converting an OTHERS operand to MAIN; same exception
template<typename TO>
requires BelongsTo<TO, OTHERS...>
constexpr TO as () const
 Project to a specific representation by applying the cached Isomorphism.
constexpr const MAIN & main () const noexcept
 Read-only access to the underlying MAIN-representation element.
constexpr bool is_zero () const noexcept
constexpr bool has_positive_sign () const noexcept
constexpr Iso & randomize ()
constexpr Iso & randomize_force_change ()
size_t get_multiplicative_order () const
size_t get_additive_order () const
constexpr auto get_label () const noexcept
constexpr Iso & erase () noexcept
 Mark this element as erased (delegates to MAIN).
constexpr Iso & unerase () noexcept
 Clear the erasure flag, resetting MAIN to its additive identity.
constexpr bool is_erased () const noexcept
 Test whether this element is currently erased.
constexpr Iso & operator= (const Iso &other)=default
constexpr Iso & operator= (Iso &&other) noexcept=default
constexpr Iso & operator= (const MAIN &other)
 Assign a MAIN-representation element directly.
constexpr Iso & operator= (int other)
 Assign a signed element label via MAIN.
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & operator= (const OTHER &other)
 Assign from an OTHERS representation (copy-and-swap; same semantics as the constructor).
template<uint16_t p>
Iso & operator= (const Fp< p > &other)
 Assign from an Fp of matching characteristic (copy-and-swap).
template<FiniteFieldType B, MOD ext_modulus, LutMode mode>
Iso & operator= (const Ext< B, ext_modulus, mode > &other)
 Assign from an Ext of matching characteristic (copy-and-swap).
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
requires (OTHER_MAIN::get_characteristic() == MAIN::get_characteristic()) && (!std::is_same_v<Iso<OTHER_MAIN, OTHER_OTHERS...>, Iso<MAIN, OTHERS...>>)
Iso & operator= (const Iso< OTHER_MAIN, OTHER_OTHERS... > &other)
 Assign from another Iso of matching characteristic (copy-and-swap).
constexpr bool operator== (const Iso &other) const noexcept
constexpr bool operator== (const MAIN &other) const noexcept
constexpr bool operator!= (const Iso &other) const
constexpr bool operator!= (const MAIN &other) const
template<FiniteFieldType T>
requires ((SubfieldOf<MAIN, T> || ((SubfieldOf<OTHERS, T>) || ...))) && (!std::is_same_v<Iso<MAIN, OTHERS...>, T>)
Vector< T > as_vector () const
 Coordinate vector over a subfield T of MAIN or any OTHERS representation.
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & operator= (const OTHER &other)
template<uint16_t p>
Iso< MAIN, OTHERS... > & operator= (const Fp< p > &other)
template<FiniteFieldType B, MOD ext_modulus, LutMode mode>
Iso< MAIN, OTHERS... > & operator= (const Ext< B, ext_modulus, mode > &other)
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
requires (OTHER_MAIN::get_characteristic() == MAIN::get_characteristic()) && (!std::is_same_v<Iso<OTHER_MAIN, OTHER_OTHERS...>, Iso<MAIN, OTHERS...>>)
Iso< MAIN, OTHERS... > & operator= (const Iso< OTHER_MAIN, OTHER_OTHERS... > &other)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso< MAIN, OTHERS... > & operator+= (const OTHER &other)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso< MAIN, OTHERS... > & operator-= (const OTHER &other)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Iso< MAIN, OTHERS... > & operator*= (const OTHER &other)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & operator/= (const OTHER &other)

Static Public Member Functions

static std::string get_info ()
static constexpr size_t get_characteristic () noexcept
static constexpr size_t get_p () noexcept
static constexpr size_t get_q () noexcept
static constexpr size_t get_m () noexcept
static constexpr size_t get_size () noexcept
static constexpr Polynomial< BASE_FIELD > get_modulus ()
static constexpr Iso get_generator ()
static constexpr bool is_constexpr_ready () noexcept
 Inherits constexpr-readiness from MAIN (OTHERS may differ; isomorphisms run at runtime).
static constexpr bool ready ()
static constexpr auto & lut_add ()
static constexpr auto & lut_neg ()
static constexpr auto & lut_mul ()
static constexpr auto & lut_inv ()
static constexpr label_t lut_add (label_t a, label_t b)
static constexpr label_t lut_mul (label_t a, label_t b)
static constexpr label_t lut_neg (label_t a)
static constexpr label_t lut_inv (label_t a)

Friends

std::ostream & operator<< (std::ostream &os, const Iso &iso)

Additional Inherited Members

Protected Member Functions inherited from CECCO::details::Base
 Base ()=default

Detailed Description

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
class CECCO::Iso< MAIN, OTHERS >

Single logical field unifying several pairwise-isomorphic representations.

Template Parameters
MAINPrimary representation; satisfies CECCO::FiniteFieldType. All operations are forwarded to it, so the Iso inherits its CECCO::LutMode and performance characteristics.
OTHERSAlternative representations of the same abstract field (each Isomorphic<MAIN, OTHER>). Pairwise distinctness is enforced at instantiation.

Useful for merging two construction towers that meet at the same mathematical field, e.g. š”½ā‚ā‚† built once from š”½ā‚‚ and once from š”½ā‚„. With those two Ext types wrapped in an Iso, CECCO::SubfieldOf can recognise both as containing š”½ā‚‚ and š”½ā‚„, which makes the cross-field constructors of CECCO::Ext and CECCO::Iso pick optimal paths. The OTHERS representations may use different LUT modes from MAIN; isomorphism conversions across representations happen at runtime via cached maps.

Usage_Example

using F2 = Fp<2>;
using F4_a = Ext<F2, {1, 1, 1}>;
using F4_b = Ext<F2, {1, 0, 1}>;
using F4 = Iso<F4_a, F4_b>;
F4_a a(2);
F4_b b(3);
F4 c(a); // wrap a into the unified field
c += b; // OTHERS-overload converts b into MAIN behind the scenes
F4_b d = c.as<F4_b>(); // explicit projection back to F4_b
Extension field š”½_{q^m} ≅ B[x]/(f(x)), constructed from a base field and an irreducible monic modulus...
Definition fields.hpp:2244
Prime field š”½_p ≅ ℤ/pℤ
Definition fields.hpp:1663
constexpr Iso() noexcept
Default constructor: 0 (consistent across all representations).
Definition fields.hpp:3178

Definition at line 3159 of file fields.hpp.

Member Typedef Documentation

◆ BASE_FIELD

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
using CECCO::Iso< MAIN, OTHERS >::BASE_FIELD = typename MAIN::BASE_FIELD

Definition at line 3171 of file fields.hpp.

◆ label_t

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
using CECCO::Iso< MAIN, OTHERS >::label_t = typename MAIN::label_t

Definition at line 3170 of file fields.hpp.

Constructor & Destructor Documentation

◆ Iso() [1/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( )
inlineconstexprnoexcept

Default constructor: 0 (consistent across all representations).

Definition at line 3178 of file fields.hpp.

◆ Iso() [2/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( int l)
inlineconstexpr

Construct from a signed element label via the MAIN representation.

Definition at line 3181 of file fields.hpp.

◆ Iso() [3/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( const MAIN & other)
inlineconstexprnoexcept

Wrap a MAIN-representation element.

Definition at line 3184 of file fields.hpp.

◆ Iso() [4/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( MAIN && other)
inlineconstexprnoexcept

Wrap a MAIN-representation rvalue.

Definition at line 3186 of file fields.hpp.

◆ Iso() [5/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<BelongsTo< OTHERS... > OTHER>
CECCO::Iso< MAIN, OTHERS >::Iso ( const OTHER & other)
inlineconstexpr

Wrap an OTHERS element by converting to MAIN.

Definition at line 3190 of file fields.hpp.

◆ Iso() [6/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<BelongsTo< OTHERS... > OTHER>
CECCO::Iso< MAIN, OTHERS >::Iso ( OTHER && other)
inlineconstexpr

Wrap an OTHERS rvalue by converting to MAIN.

Definition at line 3193 of file fields.hpp.

◆ Iso() [7/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( const Iso< MAIN, OTHERS > & other)
constexprdefaultnoexcept

◆ Iso() [8/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( Iso< MAIN, OTHERS > && other)
constexprdefaultnoexcept

◆ Iso() [9/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType T>
CECCO::Iso< MAIN, OTHERS >::Iso ( const Vector< T > & v)

Construct from a coefficient vector over a subfield T.

Template Parameters
TSubfield type
Exceptions
std::invalid_argumentif no representation in the Iso can be constructed from v

Tries MAIN first, then each of OTHERS until one succeeds. Round-trip correct with as_vector.

Definition at line 3729 of file fields.hpp.

◆ Iso() [10/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType B, MOD modulus, LutMode mode>
CECCO::Iso< MAIN, OTHERS >::Iso ( const Ext< B, modulus, mode > & other)

Cross-field conversion from an extension field.

Delegates to MAIN(Ext(...)) (or to an OTHERS representation when MAIN cannot reach the source directly), then stores the MAIN result. All paths supported by the Ext-from-Ext constructor are available: direct copy, isomorphism, upcast, downcast, cross-tower bridge.

Exceptions
std::invalid_argumentif no conversion path exists (typically a downcast where the source value lies outside the target)

Definition at line 3481 of file fields.hpp.

◆ Iso() [11/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
requires SubfieldOf<Iso<MAIN, OTHERS...>, Fp<p>> && (!std::is_same_v<MAIN, Fp<p>>) && (!BelongsTo<Fp<p>, OTHERS...>)
template<uint16_t p>
requires SubfieldOf<Iso<MAIN, OTHERS...>, Fp<p>> && (!std::is_same_v<MAIN, Fp<p>>) && (!BelongsTo<Fp<p>, OTHERS...>)
CECCO::Iso< MAIN, OTHERS >::Iso ( const Fp< p > & other)
constexpr

Embed a prime-field element when š”½_p is a (possibly indirect) subfield of the Iso.

Picks the first of MAIN / OTHERS that contains š”½_p and embeds via the corresponding Embedding. The constraints rule out the trivial cases where š”½_p already appears literally as MAIN or one of OTHERS (those use the wrapping constructors above).

Definition at line 3553 of file fields.hpp.

◆ Iso() [12/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
CECCO::Iso< MAIN, OTHERS >::Iso ( const Iso< OTHER_MAIN, OTHER_OTHERS... > & other)

Cross-field conversion from another Iso of the same characteristic.

Same four-way decision as the Ext cross-field constructor (direct isomorphism, upcast, downcast, or bridge via details::largest_common_subfield_t), but extended to handle every (MAIN, OTHERS...) pairing on both sides. Each side's representation tower is searched for the cheapest viable path.

Exceptions
std::invalid_argumenton a downcast whose source value lies outside the target

Definition at line 3588 of file fields.hpp.

Member Function Documentation

◆ as()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
requires BelongsTo<TO, OTHERS...>
template<typename TO>
requires BelongsTo<TO, OTHERS...>
TO CECCO::Iso< MAIN, OTHERS >::as ( ) const
constexpr

Project to a specific representation by applying the cached Isomorphism.

Template Parameters
TOTarget representation, one of the OTHERS

Definition at line 3825 of file fields.hpp.

◆ as_vector()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
requires ((SubfieldOf<MAIN, T> || ((SubfieldOf<OTHERS, T>) || ...))) && (!std::is_same_v<Iso<MAIN, OTHERS...>, T>)
template<FiniteFieldType T>
requires ((SubfieldOf<MAIN, T> || ((SubfieldOf<OTHERS, T>) || ...))) && (!std::is_same_v<Iso<MAIN, OTHERS...>, T>)
Vector< T > CECCO::Iso< MAIN, OTHERS >::as_vector ( ) const

Coordinate vector over a subfield T of MAIN or any OTHERS representation.

Template Parameters
TSubfield reachable from MAIN or one of OTHERS

Definition at line 3844 of file fields.hpp.

◆ erase()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::erase ( )
constexprnoexcept

Mark this element as erased (delegates to MAIN).

Warning
Erased elements must not participate in field arithmetic, see CECCO_ERASURE_SUPPORT.

Definition at line 3874 of file fields.hpp.

◆ get_additive_order()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
size_t CECCO::Iso< MAIN, OTHERS >::get_additive_order ( ) const
inline

Definition at line 3311 of file fields.hpp.

◆ get_characteristic()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr size_t CECCO::Iso< MAIN, OTHERS >::get_characteristic ( )
inlinestaticconstexprnoexcept

Definition at line 3375 of file fields.hpp.

◆ get_generator()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr Iso CECCO::Iso< MAIN, OTHERS >::get_generator ( )
inlinestaticconstexpr

Definition at line 3387 of file fields.hpp.

◆ get_info()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
std::string CECCO::Iso< MAIN, OTHERS >::get_info ( )
static

Definition at line 3837 of file fields.hpp.

◆ get_label()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
auto CECCO::Iso< MAIN, OTHERS >::get_label ( ) const
inlineconstexprnoexcept

Definition at line 3313 of file fields.hpp.

◆ get_m()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr size_t CECCO::Iso< MAIN, OTHERS >::get_m ( )
inlinestaticconstexprnoexcept

Definition at line 3381 of file fields.hpp.

◆ get_modulus()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr Polynomial< BASE_FIELD > CECCO::Iso< MAIN, OTHERS >::get_modulus ( )
inlinestaticconstexpr

Definition at line 3385 of file fields.hpp.

◆ get_multiplicative_order()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
size_t CECCO::Iso< MAIN, OTHERS >::get_multiplicative_order ( ) const
inline

Definition at line 3309 of file fields.hpp.

◆ get_p()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr size_t CECCO::Iso< MAIN, OTHERS >::get_p ( )
inlinestaticconstexprnoexcept

Definition at line 3377 of file fields.hpp.

◆ get_q()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr size_t CECCO::Iso< MAIN, OTHERS >::get_q ( )
inlinestaticconstexprnoexcept

Definition at line 3379 of file fields.hpp.

◆ get_size()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr size_t CECCO::Iso< MAIN, OTHERS >::get_size ( )
inlinestaticconstexprnoexcept

Definition at line 3383 of file fields.hpp.

◆ has_positive_sign()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::has_positive_sign ( ) const
inlineconstexprnoexcept

Definition at line 3297 of file fields.hpp.

◆ is_constexpr_ready()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr bool CECCO::Iso< MAIN, OTHERS >::is_constexpr_ready ( )
inlinestaticconstexprnoexcept

Inherits constexpr-readiness from MAIN (OTHERS may differ; isomorphisms run at runtime).

Definition at line 3390 of file fields.hpp.

◆ is_erased()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::is_erased ( ) const
inlineconstexprnoexcept

Test whether this element is currently erased.

Definition at line 3326 of file fields.hpp.

◆ is_zero()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::is_zero ( ) const
inlineconstexprnoexcept

Definition at line 3295 of file fields.hpp.

◆ lut_add() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr auto & CECCO::Iso< MAIN, OTHERS >::lut_add ( )
inlinestaticconstexpr

Definition at line 3397 of file fields.hpp.

◆ lut_add() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr label_t CECCO::Iso< MAIN, OTHERS >::lut_add ( label_t a,
label_t b )
inlinestaticconstexpr

Definition at line 3407 of file fields.hpp.

◆ lut_inv() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr auto & CECCO::Iso< MAIN, OTHERS >::lut_inv ( )
inlinestaticconstexpr

Definition at line 3403 of file fields.hpp.

◆ lut_inv() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr label_t CECCO::Iso< MAIN, OTHERS >::lut_inv ( label_t a)
inlinestaticconstexpr

Definition at line 3413 of file fields.hpp.

◆ lut_mul() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr auto & CECCO::Iso< MAIN, OTHERS >::lut_mul ( )
inlinestaticconstexpr

Definition at line 3401 of file fields.hpp.

◆ lut_mul() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr label_t CECCO::Iso< MAIN, OTHERS >::lut_mul ( label_t a,
label_t b )
inlinestaticconstexpr

Definition at line 3409 of file fields.hpp.

◆ lut_neg() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr auto & CECCO::Iso< MAIN, OTHERS >::lut_neg ( )
inlinestaticconstexpr

Definition at line 3399 of file fields.hpp.

◆ lut_neg() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr label_t CECCO::Iso< MAIN, OTHERS >::lut_neg ( label_t a)
inlinestaticconstexpr

Definition at line 3411 of file fields.hpp.

◆ main()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
const MAIN & CECCO::Iso< MAIN, OTHERS >::main ( ) const
inlineconstexprnoexcept

Read-only access to the underlying MAIN-representation element.

Definition at line 3293 of file fields.hpp.

◆ operator!=() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::operator!= ( const Iso< MAIN, OTHERS > & other) const
inlineconstexpr

Definition at line 3363 of file fields.hpp.

◆ operator!=() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::operator!= ( const MAIN & other) const
inlineconstexpr

Definition at line 3365 of file fields.hpp.

◆ operator*=() [1/4]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator*= ( const Iso< MAIN, OTHERS > & other)
constexpr

*this *= other (delegates to MAIN)

Definition at line 3788 of file fields.hpp.

◆ operator*=() [2/4]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator*= ( const OTHER & other)
constexpr

Definition at line 3795 of file fields.hpp.

◆ operator*=() [3/4]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & CECCO::Iso< MAIN, OTHERS >::operator*= ( const OTHER & other)
constexpr

*this *= other after converting an OTHERS operand to MAIN

◆ operator*=() [4/4]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator*= ( int s)
constexpr

Scalar multiplication by an int (delegates to MAIN).

Definition at line 3803 of file fields.hpp.

◆ operator+=() [1/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator+= ( const Iso< MAIN, OTHERS > & other)
constexpr

*this += other (delegates to MAIN)

Definition at line 3758 of file fields.hpp.

◆ operator+=() [2/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator+= ( const OTHER & other)
constexpr

Definition at line 3765 of file fields.hpp.

◆ operator+=() [3/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & CECCO::Iso< MAIN, OTHERS >::operator+= ( const OTHER & other)
constexpr

*this += other after converting an OTHERS operand to MAIN

◆ operator-()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso CECCO::Iso< MAIN, OTHERS >::operator- ( ) const
inlineconstexpr

Additive inverse (delegates to MAIN).

Definition at line 3250 of file fields.hpp.

◆ operator-=() [1/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator-= ( const Iso< MAIN, OTHERS > & other)
constexpr

*this -= other (delegates to MAIN)

Definition at line 3773 of file fields.hpp.

◆ operator-=() [2/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator-= ( const OTHER & other)
constexpr

Definition at line 3780 of file fields.hpp.

◆ operator-=() [3/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & CECCO::Iso< MAIN, OTHERS >::operator-= ( const OTHER & other)
constexpr

*this -= other after converting an OTHERS operand to MAIN

◆ operator/=() [1/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator/= ( const Iso< MAIN, OTHERS > & other)

*this /= other; throws std::invalid_argument if other is zero

Definition at line 3809 of file fields.hpp.

◆ operator/=() [2/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator/= ( const OTHER & other)

Definition at line 3816 of file fields.hpp.

◆ operator/=() [3/3]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & CECCO::Iso< MAIN, OTHERS >::operator/= ( const OTHER & other)

*this /= other after converting an OTHERS operand to MAIN; same exception

◆ operator=() [1/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType B, MOD ext_modulus, LutMode mode>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const Ext< B, ext_modulus, mode > & other)

Definition at line 3462 of file fields.hpp.

◆ operator=() [2/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType B, MOD ext_modulus, LutMode mode>
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( const Ext< B, ext_modulus, mode > & other)

Assign from an Ext of matching characteristic (copy-and-swap).

◆ operator=() [3/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<uint16_t p>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const Fp< p > & other)

Definition at line 3453 of file fields.hpp.

◆ operator=() [4/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<uint16_t p>
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( const Fp< p > & other)

Assign from an Fp of matching characteristic (copy-and-swap).

◆ operator=() [5/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( const Iso< MAIN, OTHERS > & other)
constexprdefault

◆ operator=() [6/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
requires (OTHER_MAIN::get_characteristic() == MAIN::get_characteristic()) && (!std::is_same_v<Iso<OTHER_MAIN, OTHER_OTHERS...>, Iso<MAIN, OTHERS...>>)
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const Iso< OTHER_MAIN, OTHER_OTHERS... > & other)

Definition at line 3470 of file fields.hpp.

◆ operator=() [7/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<FiniteFieldType OTHER_MAIN, FiniteFieldType... OTHER_OTHERS>
requires (OTHER_MAIN::get_characteristic() == MAIN::get_characteristic()) && (!std::is_same_v<Iso<OTHER_MAIN, OTHER_OTHERS...>, Iso<MAIN, OTHERS...>>)
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( const Iso< OTHER_MAIN, OTHER_OTHERS... > & other)

Assign from another Iso of matching characteristic (copy-and-swap).

◆ operator=() [8/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const MAIN & other)
constexpr

Assign a MAIN-representation element directly.

Definition at line 3429 of file fields.hpp.

◆ operator=() [9/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const OTHER & other)

Definition at line 3442 of file fields.hpp.

◆ operator=() [10/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( const OTHER & other)

Assign from an OTHERS representation (copy-and-swap; same semantics as the constructor).

◆ operator=() [11/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( int other)
constexpr

Assign a signed element label via MAIN.

Definition at line 3435 of file fields.hpp.

◆ operator=() [12/12]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso & CECCO::Iso< MAIN, OTHERS >::operator= ( Iso< MAIN, OTHERS > && other)
constexprdefaultnoexcept

◆ operator==() [1/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::operator== ( const Iso< MAIN, OTHERS > & other) const
inlineconstexprnoexcept

Definition at line 3359 of file fields.hpp.

◆ operator==() [2/2]

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
bool CECCO::Iso< MAIN, OTHERS >::operator== ( const MAIN & other) const
inlineconstexprnoexcept

Definition at line 3361 of file fields.hpp.

◆ randomize()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso & CECCO::Iso< MAIN, OTHERS >::randomize ( )
inlineconstexpr

Definition at line 3299 of file fields.hpp.

◆ randomize_force_change()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso & CECCO::Iso< MAIN, OTHERS >::randomize_force_change ( )
inlineconstexpr

Definition at line 3304 of file fields.hpp.

◆ ready()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
constexpr bool CECCO::Iso< MAIN, OTHERS >::ready ( )
inlinestaticconstexpr

Definition at line 3393 of file fields.hpp.

◆ unerase()

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
Iso< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::unerase ( )
constexprnoexcept

Clear the erasure flag, resetting MAIN to its additive identity.

Definition at line 3880 of file fields.hpp.

◆ operator<<

template<FiniteFieldType MAIN, FiniteFieldType... OTHERS>
std::ostream & operator<< ( std::ostream & os,
const Iso< MAIN, OTHERS > & iso )
friend

Definition at line 3370 of file fields.hpp.


The documentation for this class was generated from the following files: