AXOM
Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.
axom::slam::ModularInt< SizePolicy > Class Template Reference

This class is a wrapper around an int and encapsulates modular arithmetic with a given modulus. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/axom/checkouts/latest/src/axom/slam/ModularInt.hpp>

Inheritance diagram for axom::slam::ModularInt< SizePolicy >:

Public Member Functions

constexpr ModularInt (int val=0, int modulusVal=SizePolicy::DEFAULT_VALUE)
 
constexpr ModularInt (const ModularInt &mi)
 ModularInt copy constructor. More...
 
constexpr ModularIntoperator= (const ModularInt &mi)
 ModularInt copy assignment operator. More...
 
constexpr operator int () const
 Implicit cast of a ModularInt to an int. More...
 
constexpr int modulus () const
 
ModularInt arithmetic operations

Arithmetic operations on a ModularInt conform to modular arithmetic. I.e. after an arithmetic operation, the value of a ModularInt is always in the range [0, modulus()-1).

constexpr ModularIntoperator++ ()
 
constexpr const ModularInt operator++ (int)
 
constexpr ModularIntoperator-- ()
 
constexpr const ModularInt operator-- (int)
 
constexpr ModularIntoperator+= (int val)
 Addition assignment operator. More...
 
constexpr ModularIntoperator-= (int val)
 Subtraction assignment operator. More...
 
constexpr ModularIntoperator*= (int val)
 Multiplication assignment operator. More...
 
ModularInt equality operations
Note
Equality operations allow the operands to have different SizePolicy types
template<typename OtherSizePolicy >
constexpr bool operator== (const ModularInt< OtherSizePolicy > &mi) const
 Equality comparison operator. More...
 
template<typename OtherSizePolicy >
constexpr bool operator!= (const ModularInt< OtherSizePolicy > &mi) const
 Inequality comparison operator. More...
 

Detailed Description

template<typename SizePolicy = policies::RuntimeSize<int>>
class axom::slam::ModularInt< SizePolicy >

This class is a wrapper around an int and encapsulates modular arithmetic with a given modulus.

It can be useful when we are iterating circularly through the elements in a relation (e.g. consecutive edges around a polygon). The class invariant is that 0 <= val < modulus(), where val is the wrapped integer. The modulus is controlled by a SizePolicy which allows it to be given at compile time or at runtime.

Constructor & Destructor Documentation

◆ ModularInt() [1/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr axom::slam::ModularInt< SizePolicy >::ModularInt ( int  val = 0,
int  modulusVal = SizePolicy::DEFAULT_VALUE 
)
inlineconstexpr

◆ ModularInt() [2/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr axom::slam::ModularInt< SizePolicy >::ModularInt ( const ModularInt< SizePolicy > &  mi)
inlineconstexpr

ModularInt copy constructor.

Parameters
miother ModularInt

References AXOM_CONSTEXPR_ASSERT, and axom::slam::ModularInt< SizePolicy >::modulus().

Member Function Documentation

◆ operator=()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator= ( const ModularInt< SizePolicy > &  mi)
inlineconstexpr

ModularInt copy assignment operator.

Parameters
miother ModularInt
Returns
A reference to the constructed object
Note
This operator only modifies the value of the local instance. It does not modify the modulus()

◆ operator int()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr axom::slam::ModularInt< SizePolicy >::operator int ( ) const
inlineconstexpr

Implicit cast of a ModularInt to an int.

◆ modulus()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr int axom::slam::ModularInt< SizePolicy >::modulus ( ) const
inlineconstexpr

◆ operator++() [1/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator++ ( )
inlineconstexpr

Pre-increment operator

◆ operator++() [2/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr const ModularInt axom::slam::ModularInt< SizePolicy >::operator++ ( int  )
inlineconstexpr

Post-increment operator

References axom::slam::ModularInt< SizePolicy >::modulus().

◆ operator--() [1/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator-- ( )
inlineconstexpr

Pre-decrement operator

◆ operator--() [2/2]

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr const ModularInt axom::slam::ModularInt< SizePolicy >::operator-- ( int  )
inlineconstexpr

Post-decrement operator

References axom::slam::ModularInt< SizePolicy >::modulus().

◆ operator+=()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator+= ( int  val)
inlineconstexpr

Addition assignment operator.

◆ operator-=()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator-= ( int  val)
inlineconstexpr

Subtraction assignment operator.

◆ operator*=()

template<typename SizePolicy = policies::RuntimeSize<int>>
constexpr ModularInt& axom::slam::ModularInt< SizePolicy >::operator*= ( int  val)
inlineconstexpr

Multiplication assignment operator.

◆ operator==()

template<typename SizePolicy = policies::RuntimeSize<int>>
template<typename OtherSizePolicy >
constexpr bool axom::slam::ModularInt< SizePolicy >::operator== ( const ModularInt< OtherSizePolicy > &  mi) const
inlineconstexpr

Equality comparison operator.

Parameters
miOther ModularInt
Note
This function supports ModularInts with different SizePolicies
Returns
True when both ModularInts have the same modulus() and the same value, false otherwise.

References axom::slam::ModularInt< SizePolicy >::modulus().

◆ operator!=()

template<typename SizePolicy = policies::RuntimeSize<int>>
template<typename OtherSizePolicy >
constexpr bool axom::slam::ModularInt< SizePolicy >::operator!= ( const ModularInt< OtherSizePolicy > &  mi) const
inlineconstexpr

Inequality comparison operator.

Returns
True if the two ModularInts are not equal (as defined by operator==() )
See also
operator==()

References axom::slam::ModularInt< SizePolicy >::operator==().


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