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 = MAIN::BASE_FIELD

Public Member Functions

constexpr Iso () noexcept
 Default constructor: 0 (consistent across all representations).
constexpr Iso (int l)
 Construct from int 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 Isooperator+= (const Iso &other)
 *this += other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Isooperator+= (const OTHER &other)
 *this += other after converting an OTHERS operand to MAIN
constexpr Isooperator-= (const Iso &other)
 *this -= other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Isooperator-= (const OTHER &other)
 *this -= other after converting an OTHERS operand to MAIN
constexpr Isooperator*= (const Iso &other)
 *this *= other (delegates to MAIN)
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
constexpr Isooperator*= (const OTHER &other)
 *this *= other after converting an OTHERS operand to MAIN
constexpr Isooperator*= (int s)
 Scalar multiplication by an int (delegates to MAIN).
Isooperator/= (const Iso &other)
 *this /= other; throws std::invalid_argument if other is zero
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Isooperator/= (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 Isorandomize ()
constexpr Isorandomize_force_change ()
size_t get_multiplicative_order () const
size_t get_additive_order () const
constexpr auto get_label () const noexcept
constexpr Isoerase () noexcept
 Mark this element as erased (delegates to MAIN).
constexpr Isounerase () 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 Isooperator= (const Iso &other)
constexpr Isooperator= (Iso &&other) noexcept=default
constexpr Isooperator= (const MAIN &other)
 Assign a MAIN-representation element directly.
constexpr Isooperator= (int other)
 Assign an int via MAIN.
template<typename OTHER>
requires BelongsTo<OTHER, OTHERS...>
Isooperator= (const OTHER &other)
 Assign from an OTHERS representation (copy-and-swap; same semantics as the constructor).
template<uint16_t p>
Isooperator= (const Fp< p > &other)
 Assign from an Fp of matching characteristic (copy-and-swap).
template<FiniteFieldType B, MOD ext_modulus, LutMode mode>
Isooperator= (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...>>)
Isooperator= (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 const 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_FIELDget_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:2221
Prime field š”½_p ≅ ℤ/pℤ
Definition fields.hpp:1647
constexpr Iso() noexcept
Default constructor: 0 (consistent across all representations).
Definition fields.hpp:3134

Definition at line 3115 of file fields.hpp.

Member Typedef Documentation

◆ BASE_FIELD

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

Definition at line 3127 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 3126 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 3134 of file fields.hpp.

◆ Iso() [2/12]

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

Construct from int via the MAIN representation.

Definition at line 3137 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 3140 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 3142 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 3146 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 3149 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 3694 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 3443 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 3515 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 3550 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 3790 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 3811 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 3843 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 3267 of file fields.hpp.

◆ get_characteristic()

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

Definition at line 3331 of file fields.hpp.

◆ get_generator()

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

Definition at line 3343 of file fields.hpp.

◆ get_info()

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

Definition at line 3802 of file fields.hpp.

◆ get_label()

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

Definition at line 3269 of file fields.hpp.

◆ get_m()

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

Definition at line 3337 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 3341 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 3265 of file fields.hpp.

◆ get_p()

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

Definition at line 3333 of file fields.hpp.

◆ get_q()

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

Definition at line 3335 of file fields.hpp.

◆ get_size()

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

Definition at line 3339 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 3253 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 3346 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 3282 of file fields.hpp.

◆ is_zero()

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

Definition at line 3251 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 3353 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 3363 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 3359 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 3369 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 3357 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 3365 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 3355 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 3367 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 3249 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 3319 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 3321 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 3753 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 3760 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 3768 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 3723 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 3730 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 3206 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 3738 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 3745 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 3774 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 3781 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 3424 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 3415 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< MAIN, OTHERS... > & CECCO::Iso< MAIN, OTHERS >::operator= ( const Iso< MAIN, OTHERS > & other)
constexpr

Definition at line 3385 of file fields.hpp.

◆ 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 3432 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 3391 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 3404 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 an int via MAIN.

Definition at line 3397 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 3315 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 3317 of file fields.hpp.

◆ randomize()

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

Definition at line 3255 of file fields.hpp.

◆ randomize_force_change()

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

Definition at line 3260 of file fields.hpp.

◆ ready()

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

Definition at line 3349 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 3849 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 3326 of file fields.hpp.


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