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

 ModularInt (int val=0, int modulusVal=SizePolicy::DEFAULT_VALUE)
 
 ModularInt (const ModularInt &mi)
 ModularInt copy constructor. More...
 
ModularIntoperator= (const ModularInt &mi)
 ModularInt copy assignment operator. More...
 
 operator int () const
 Implicit cast of a ModularInt to an int. More...
 
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).

ModularIntoperator++ ()
 
const ModularInt operator++ (int)
 
ModularIntoperator-- ()
 
const ModularInt operator-- (int)
 
ModularIntoperator+= (int val)
 Addition assignment operator. More...
 
ModularIntoperator-= (int val)
 Subtraction assignment operator. More...
 
ModularIntoperator*= (int val)
 Multiplication assignment operator. More...
 
ModularInt equality operations
Note
Equality operations allow the operands to have different SizePolicy types
template<typename OtherSizePolicy >
bool operator== (const ModularInt< OtherSizePolicy > &mi) const
 Equality comparison operator. More...
 
template<typename OtherSizePolicy >
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>>
axom::slam::ModularInt< SizePolicy >::ModularInt ( int  val = 0,
int  modulusVal = SizePolicy::DEFAULT_VALUE 
)
inline

◆ ModularInt() [2/2]

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

ModularInt copy constructor.

Parameters
miother ModularInt

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

Member Function Documentation

◆ operator=()

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

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>>
axom::slam::ModularInt< SizePolicy >::operator int ( ) const
inline

Implicit cast of a ModularInt to an int.

◆ modulus()

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

◆ operator++() [1/2]

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

Pre-increment operator

◆ operator++() [2/2]

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

Post-increment operator

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

◆ operator--() [1/2]

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

Pre-decrement operator

◆ operator--() [2/2]

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

Post-decrement operator

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

◆ operator+=()

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

Addition assignment operator.

◆ operator-=()

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

Subtraction assignment operator.

◆ operator*=()

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

Multiplication assignment operator.

◆ operator==()

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

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 >
bool axom::slam::ModularInt< SizePolicy >::operator!= ( const ModularInt< OtherSizePolicy > &  mi) const
inline

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: