Givaro 4.2.1
Modular_implem< _Storage_t, _Compute_t, _Residu_t > Class Template Referenceabstract

This class implement the standard arithmetic with Modulo Elements. More...

#include <modular-implem.h>

+ Inheritance diagram for Modular_implem< _Storage_t, _Compute_t, _Residu_t >:

Public Types

enum  { size_rep = sizeof(Element) }
 
using Element = _Storage_t
 
using Element_ptr = Element*
 
using ConstElement = const Element
 
using ConstElement_ptr = const Element*
 
using Self_t = Modular_implem<_Storage_t, _Compute_t, _Residu_t>
 
using Storage_t = _Storage_t
 
using Compute_t = _Compute_t
 
using Residu_t = _Residu_t
 
using is_elt_integral = std::is_integral<Element>
 
using is_elt_floating_point = std::is_floating_point<Element>
 

Public Member Functions

 Modular_implem ()
 
 Modular_implem (const Residu_t p)
 
template<typename Source>
 Modular_implem (const Source &p)
 
 Modular_implem (const Self_t &F)
 
virtual ~Modular_implem ()=default
 
Element minElement () const
 
Element maxElement () const
 
Residu_t residu () const
 
Residu_t size () const
 
Residu_t characteristic () const
 
Residu_t cardinality () const
 
template<class T>
T & characteristic (T &p) const
 
template<class T>
T & cardinality (T &p) const
 
bool isZero (const Element &a) const
 
bool isOne (const Element &a) const
 
bool isMOne (const Element &a) const
 
bool areEqual (const Element &a, const Element &b) const
 
bool isUnit (const Element &a) const
 
size_t length (const Element a) const
 
bool operator== (const Self_t &F) const
 
bool operator!= (const Self_t &F) const
 
Self_toperator= (const Self_t &F)
 
Elementassign (Element &x, const Element &y) const
 
template<typename T>
T & convert (T &r, const Element &a) const
 
virtual Elementinit (Element &, const Integer &) const =0
 
std::ostream & write (std::ostream &s, const Element &a) const
 
template<typename E = Element, typename std::enable_if<(! std::is_floating_point< E >::value &&sizeof(E)==1), int >::type * = nullptr>
std::ostream & write (std::ostream &s, const E &a) const
 
template<typename E = Element, typename std::enable_if<(! std::is_floating_point< E >::value &&sizeof(E) > 1), int >::type * = nullptr>
std::ostream & write (std::ostream &s, const E &a) const
 
template<typename E = Element, typename std::enable_if<(std::is_floating_point< E >::value), int >::type * = nullptr>
std::ostream & write (std::ostream &s, const E &a) const
 
std::ostream & write (std::ostream &s) const
 
template<typename E = Element, typename std::enable_if<(sizeof(E)==1), int >::type * = nullptr>
std::ostream & write (std::ostream &s) const
 
template<typename E = Element, typename std::enable_if<(sizeof(E) > 1), int >::type * = nullptr>
std::ostream & write (std::ostream &s) const
 
std::istream & read (std::istream &s)
 
std::istream & read (std::istream &, Element &) const
 

Static Public Member Functions

static Residu_t minCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&(sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&std::is_signed< S >::value &&(2 *sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&std::is_unsigned< S >::value &&(2 *sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, float >::value &&std::is_same< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, float >::value &&! std::is_same< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, double >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, Integer >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(is_same_ruint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(is_same_rint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(is_ruint< Compute_t >::value &&(ISEQUAL(RecInt_K< S >::value, RecInt_K< Compute_t >::value))), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(is_smaller_ruint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(is_smaller_rint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
template<typename S = Storage_t, typename std::enable_if<(! std::is_integral< S >::value &&! std::is_floating_point< S >::value &&! std::is_same< S, Integer >::value &&!is_ruint< S >::value &&!is_rint< S >::value), int >::type * = nullptr>
static Residu_t maxCardinality ()
 
static const std::string type_string ()
 

Data Fields

const Element zero
 
const Element one
 
const Element mOne
 

Static Public Attributes

static constexpr bool is_elt_integral_v = is_elt_integral::value
 
static constexpr bool is_elt_floating_point_v = is_elt_floating_point::value
 

Protected Attributes

Residu_t _p
 
Compute_t _pc
 

Detailed Description

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
class Givaro::Modular_implem< _Storage_t, _Compute_t, _Residu_t >

This class implement the standard arithmetic with Modulo Elements.

  • The representation of an integer a in Zpz is the value a % p
  • m max is 46341
  • p max is 46337

Member Typedef Documentation

◆ Element

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Element = _Storage_t

◆ Element_ptr

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Element_ptr = Element*

◆ ConstElement

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using ConstElement = const Element

◆ ConstElement_ptr

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using ConstElement_ptr = const Element*

◆ Self_t

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Self_t = Modular_implem<_Storage_t, _Compute_t, _Residu_t>

◆ Storage_t

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Storage_t = _Storage_t

◆ Compute_t

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Compute_t = _Compute_t

◆ Residu_t

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using Residu_t = _Residu_t

◆ is_elt_integral

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using is_elt_integral = std::is_integral<Element>

◆ is_elt_floating_point

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
using is_elt_floating_point = std::is_floating_point<Element>

Member Enumeration Documentation

◆ anonymous enum

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
anonymous enum
Enumerator
size_rep 

Constructor & Destructor Documentation

◆ Modular_implem() [1/4]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Modular_implem ( )
inline

◆ Modular_implem() [2/4]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Modular_implem ( const Residu_t p)
inline

◆ Modular_implem() [3/4]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename Source>
Modular_implem ( const Source & p)
inline

◆ Modular_implem() [4/4]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Modular_implem ( const Self_t & F)
inline

◆ ~Modular_implem()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
virtual ~Modular_implem ( )
virtualdefault

Member Function Documentation

◆ minElement()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Element minElement ( ) const
inline

◆ maxElement()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Element maxElement ( ) const
inline

◆ residu()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Residu_t residu ( ) const
inline

◆ size()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Residu_t size ( ) const
inline

◆ characteristic() [1/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Residu_t characteristic ( ) const
inline

◆ cardinality() [1/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Residu_t cardinality ( ) const
inline

◆ characteristic() [2/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<class T>
T & characteristic ( T & p) const
inline

◆ cardinality() [2/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<class T>
T & cardinality ( T & p) const
inline

◆ minCardinality()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
static Residu_t minCardinality ( )
inlinestatic

◆ maxCardinality() [1/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&(sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [2/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&std::is_signed< S >::value &&(2 *sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [3/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_integral< S >::value &&std::is_unsigned< S >::value &&(2 *sizeof(S)==sizeof(Compute_t))), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [4/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, float >::value &&std::is_same< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [5/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, float >::value &&! std::is_same< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [6/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, double >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [7/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(std::is_same< S, Integer >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [8/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(is_same_ruint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [9/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(is_same_rint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [10/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(is_ruint< Compute_t >::value &&(ISEQUAL(RecInt_K< S >::value, RecInt_K< Compute_t >::value))), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [11/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(is_smaller_ruint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [12/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(is_smaller_rint< S, Compute_t >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ maxCardinality() [13/13]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename S = Storage_t, typename std::enable_if<(! std::is_integral< S >::value &&! std::is_floating_point< S >::value &&! std::is_same< S, Integer >::value &&!is_ruint< S >::value &&!is_rint< S >::value), int >::type * = nullptr>
static Residu_t maxCardinality ( )
inlinestatic

◆ isZero()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool isZero ( const Element & a) const
inline

◆ isOne()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool isOne ( const Element & a) const
inline

◆ isMOne()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool isMOne ( const Element & a) const
inline

◆ areEqual()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool areEqual ( const Element & a,
const Element & b ) const
inline

◆ isUnit()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool isUnit ( const Element & a) const
inline

◆ length()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
size_t length ( const Element a) const
inline

◆ operator==()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool operator== ( const Self_t & F) const
inline

◆ operator!=()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool operator!= ( const Self_t & F) const
inline

◆ operator=()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Self_t & operator= ( const Self_t & F)
inline

◆ assign()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Element & assign ( Element & x,
const Element & y ) const
inline

◆ convert()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename T>
T & convert ( T & r,
const Element & a ) const
inline

◆ type_string()

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
static const std::string type_string ( )
inlinestatic

◆ init()

◆ write() [1/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
std::ostream & write ( std::ostream & s,
const Element & a ) const
inline

◆ write() [2/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename E = Element, typename std::enable_if<(! std::is_floating_point< E >::value &&sizeof(E)==1), int >::type * = nullptr>
std::ostream & write ( std::ostream & s,
const E & a ) const
inline

◆ write() [3/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename E = Element, typename std::enable_if<(! std::is_floating_point< E >::value &&sizeof(E) > 1), int >::type * = nullptr>
std::ostream & write ( std::ostream & s,
const E & a ) const
inline

◆ write() [4/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename E = Element, typename std::enable_if<(std::is_floating_point< E >::value), int >::type * = nullptr>
std::ostream & write ( std::ostream & s,
const E & a ) const
inline

◆ write() [5/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
std::ostream & write ( std::ostream & s) const
inline

◆ write() [6/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename E = Element, typename std::enable_if<(sizeof(E)==1), int >::type * = nullptr>
std::ostream & write ( std::ostream & s) const
inline

◆ write() [7/7]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
template<typename E = Element, typename std::enable_if<(sizeof(E) > 1), int >::type * = nullptr>
std::ostream & write ( std::ostream & s) const
inline

◆ read() [1/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
std::istream & read ( std::istream & s)
inline

◆ read() [2/2]

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
std::istream & read ( std::istream & s,
Element & a ) const
inline

Field Documentation

◆ is_elt_integral_v

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool is_elt_integral_v = is_elt_integral::value
staticconstexpr

◆ is_elt_floating_point_v

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
bool is_elt_floating_point_v = is_elt_floating_point::value
staticconstexpr

◆ zero

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
const Element zero

◆ one

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
const Element one

◆ mOne

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
const Element mOne

◆ _p

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Residu_t _p
protected

◆ _pc

template<typename _Storage_t, typename _Compute_t, typename _Residu_t>
Compute_t _pc
protected

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