Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class > Class Template Reference

Class representing an element of the \( \mathbb{F}_p \) field for any prime number \( p \). If each instanciation of the class can represent another element, they all share the same characteritics. That is if the characteristics are set for one, they will be set for all the others. The characteristics can be set before instianciating the elements with the static Shared_Zp_field_element::initialize method. More...

Public Types

using element_type = Unsigned_integer_type
 
using characteristic_type = element_type
 

Public Member Functions

 Shared_Zp_field_element ()
 Default constructor. Sets the element to 0.
 
template<typename Integer_type , class = isInteger<Integer_type>>
 Shared_Zp_field_element (Integer_type element)
 Constructor setting the element to the given value. More...
 
 Shared_Zp_field_element (const Shared_Zp_field_element &toCopy)
 Copy constructor. More...
 
 Shared_Zp_field_element (Shared_Zp_field_element &&toMove) noexcept
 Move constructor. More...
 
element_type get_value () const
 Returns the value of the element. More...
 
Shared_Zp_field_elementoperator= (Shared_Zp_field_element other)
 Assign operator.
 
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_elementoperator= (const Integer_type &value)
 Assign operator. More...
 
 operator unsigned int () const
 Casts the element into an unsigned int.
 
Shared_Zp_field_element get_inverse () const
 Returns the inverse of the element in the field. More...
 
std::pair< Shared_Zp_field_element, characteristic_typeget_partial_inverse (characteristic_type productOfCharacteristics) const
 For interface purposes with multi-fields. Returns the inverse together with the argument. More...
 

Static Public Member Functions

static void initialize (characteristic_type characteristic)
 Initialize the field to the given characteristic. Should be called first before constructing the field elements. More...
 
static Shared_Zp_field_element get_additive_identity ()
 Returns the additive identity of the field. More...
 
static Shared_Zp_field_element get_multiplicative_identity ()
 Returns the multiplicative identity of the field. More...
 
static Shared_Zp_field_element get_partial_multiplicative_identity ([[maybe_unused]] characteristic_type productOfCharacteristics)
 For interface purposes with multi-fields. Returns the multiplicative identity of the field. More...
 
static characteristic_type get_characteristic ()
 Returns the current characteristic. More...
 

Friends

void operator+= (Shared_Zp_field_element &f1, const Shared_Zp_field_element &f2)
 operator+=
 
Shared_Zp_field_element operator+ (Shared_Zp_field_element f1, const Shared_Zp_field_element &f2)
 operator+
 
template<typename Integer_type , class = isInteger<Integer_type>>
void operator+= (Shared_Zp_field_element &f, const Integer_type &v)
 operator+= More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator+ (Shared_Zp_field_element f, const Integer_type &v)
 operator+ More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator+ (const Integer_type &v, Shared_Zp_field_element f)
 operator+ More...
 
void operator-= (Shared_Zp_field_element &f1, const Shared_Zp_field_element &f2)
 operator-=
 
Shared_Zp_field_element operator- (Shared_Zp_field_element f1, const Shared_Zp_field_element &f2)
 operator-
 
template<typename Integer_type , class = isInteger<Integer_type>>
void operator-= (Shared_Zp_field_element &f, const Integer_type &v)
 operator-= More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator- (Shared_Zp_field_element f, const Integer_type &v)
 operator- More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator- (const Integer_type &v, const Shared_Zp_field_element &f)
 operator- More...
 
void operator*= (Shared_Zp_field_element &f1, const Shared_Zp_field_element &f2)
 operator*=
 
Shared_Zp_field_element operator* (Shared_Zp_field_element f1, const Shared_Zp_field_element &f2)
 operator*
 
template<typename Integer_type , class = isInteger<Integer_type>>
void operator*= (Shared_Zp_field_element &f, const Integer_type &v)
 operator*= More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator* (Shared_Zp_field_element f, const Integer_type &v)
 operator* More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator* (const Integer_type &v, Shared_Zp_field_element f)
 operator* More...
 
bool operator== (const Shared_Zp_field_element &f1, const Shared_Zp_field_element &f2)
 operator==
 
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator== (const Integer_type &v, const Shared_Zp_field_element &f)
 operator== More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator== (const Shared_Zp_field_element &f, const Integer_type &v)
 operator== More...
 
bool operator!= (const Shared_Zp_field_element &f1, const Shared_Zp_field_element &f2)
 operator!=
 
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator!= (const Integer_type &v, const Shared_Zp_field_element &f)
 operator!= More...
 
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator!= (const Shared_Zp_field_element &f, const Integer_type &v)
 operator!= More...
 
void swap (Shared_Zp_field_element &f1, Shared_Zp_field_element &f2)
 Swap operator.
 

Detailed Description

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
class Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >

Class representing an element of the \( \mathbb{F}_p \) field for any prime number \( p \). If each instanciation of the class can represent another element, they all share the same characteritics. That is if the characteristics are set for one, they will be set for all the others. The characteristics can be set before instianciating the elements with the static Shared_Zp_field_element::initialize method.

Template Parameters
Unsigned_integer_typeA native unsigned integer type: unsigned int, long unsigned int, etc. Will be used as the field element type.
Examples
example_field_operations.cpp.

Member Typedef Documentation

◆ characteristic_type

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
using Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::characteristic_type = element_type

Type for the field characteristic.

◆ element_type

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
using Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::element_type = Unsigned_integer_type

Type for the elements in the field.

Constructor & Destructor Documentation

◆ Shared_Zp_field_element() [1/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::Shared_Zp_field_element ( Integer_type  element)
inline

Constructor setting the element to the given value.

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.
Parameters
elementValue of the element.

◆ Shared_Zp_field_element() [2/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::Shared_Zp_field_element ( const Shared_Zp_field_element< Unsigned_integer_type, class > &  toCopy)
inline

Copy constructor.

Parameters
toCopyElement to copy.

◆ Shared_Zp_field_element() [3/3]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::Shared_Zp_field_element ( Shared_Zp_field_element< Unsigned_integer_type, class > &&  toMove)
inlinenoexcept

Move constructor.

Parameters
toMoveElement to move.

Member Function Documentation

◆ get_additive_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
static Shared_Zp_field_element Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_additive_identity ( )
inlinestatic

Returns the additive identity of the field.

Returns
0.

◆ get_characteristic()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
static characteristic_type Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_characteristic ( )
inlinestatic

Returns the current characteristic.

Returns
The value of the current characteristic.

◆ get_inverse()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
Shared_Zp_field_element Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_inverse ( ) const
inline

Returns the inverse of the element in the field.

Returns
The inverse.

◆ get_multiplicative_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
static Shared_Zp_field_element Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_multiplicative_identity ( )
inlinestatic

Returns the multiplicative identity of the field.

Returns
1.

◆ get_partial_inverse()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
std::pair<Shared_Zp_field_element, characteristic_type> Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_partial_inverse ( characteristic_type  productOfCharacteristics) const
inline

For interface purposes with multi-fields. Returns the inverse together with the argument.

Parameters
productOfCharacteristicsSome value.
Returns
Pair whose first element is the inverse and the second element is productOfCharacteristics.

◆ get_partial_multiplicative_identity()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
static Shared_Zp_field_element Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_partial_multiplicative_identity ( [[maybe_unused] ] characteristic_type  productOfCharacteristics)
inlinestatic

For interface purposes with multi-fields. Returns the multiplicative identity of the field.

Parameters
productOfCharacteristicsSome value.
Returns
1.

◆ get_value()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
element_type Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::get_value ( ) const
inline

Returns the value of the element.

Returns
Value of the element.

◆ initialize()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
static void Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::initialize ( characteristic_type  characteristic)
inlinestatic

Initialize the field to the given characteristic. Should be called first before constructing the field elements.

Parameters
characteristicCharacteristic of the field. A positive prime number.

◆ operator=()

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element& Gudhi::persistence_fields::Shared_Zp_field_element< Unsigned_integer_type, class >::operator= ( const Integer_type &  value)
inline

Assign operator.

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

Friends And Related Function Documentation

◆ operator!= [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator!= ( const Integer_type &  v,
const Shared_Zp_field_element< Unsigned_integer_type, class > &  f 
)
friend

operator!=

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator!= [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator!= ( const Shared_Zp_field_element< Unsigned_integer_type, class > &  f,
const Integer_type &  v 
)
friend

operator!=

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator* [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator* ( const Integer_type &  v,
Shared_Zp_field_element< Unsigned_integer_type, class >  f 
)
friend

operator*

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic. if signed.

◆ operator* [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator* ( Shared_Zp_field_element< Unsigned_integer_type, class >  f,
const Integer_type &  v 
)
friend

operator*

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator*=

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
void operator*= ( Shared_Zp_field_element< Unsigned_integer_type, class > &  f,
const Integer_type &  v 
)
friend

operator*=

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator+ [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator+ ( const Integer_type &  v,
Shared_Zp_field_element< Unsigned_integer_type, class >  f 
)
friend

operator+

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator+ [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator+ ( Shared_Zp_field_element< Unsigned_integer_type, class >  f,
const Integer_type &  v 
)
friend

operator+

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator+=

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
void operator+= ( Shared_Zp_field_element< Unsigned_integer_type, class > &  f,
const Integer_type &  v 
)
friend

operator+=

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator- [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Integer_type operator- ( const Integer_type &  v,
const Shared_Zp_field_element< Unsigned_integer_type, class > &  f 
)
friend

operator-

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator- [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
Shared_Zp_field_element operator- ( Shared_Zp_field_element< Unsigned_integer_type, class >  f,
const Integer_type &  v 
)
friend

operator-

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator-=

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
void operator-= ( Shared_Zp_field_element< Unsigned_integer_type, class > &  f,
const Integer_type &  v 
)
friend

operator-=

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator== [1/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator== ( const Integer_type &  v,
const Shared_Zp_field_element< Unsigned_integer_type, class > &  f 
)
friend

operator==

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

◆ operator== [2/2]

template<typename Unsigned_integer_type = unsigned int, class = std::enable_if_t<std::is_unsigned_v<Unsigned_integer_type> >>
template<typename Integer_type , class = isInteger<Integer_type>>
bool operator== ( const Shared_Zp_field_element< Unsigned_integer_type, class > &  f,
const Integer_type &  v 
)
friend

operator==

Template Parameters
Integer_typeA native integer type. Should be able to contain the characteristic if signed.

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