Cayley
Pseudo-Random Bits from Finite Groups
Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
uintx_t Class Reference

The extensible unsigned integer class. More...

#include <uintx_t.h>

Public Member Functions

 uintx_t ()
 Constructor. More...
 
 uintx_t (int)
 Constructor. More...
 
 uintx_t (const char *)
 Constructor. More...
 
 uintx_t (const uintx_t &)
 Copy constructor. More...
 
 ~uintx_t ()
 Destructor.
 
std::string GetString () const
 Get as string. More...
 
uintx_toperator= (const uintx_t &)
 Assignment. More...
 
uintx_toperator= (const int)
 Assignment. More...
 
uintx_toperator= (const char *)
 Assignment. More...
 
uintx_toperator+= (const uintx_t &)
 Add to. More...
 
uintx_toperator+= (const int &)
 Add to. More...
 
uintx_toperator *= (const uintx_t &)
 Multiply by. More...
 
uintx_toperator<<= (const int)
 Left shift by. More...
 
uintx_toperator>>= (const int)
 Right shift by. More...
 
uintx_toperator-= (const uintx_t &)
 Subtract from. More...
 
uintx_toperator/= (const uintx_t &)
 Divide by. More...
 
uintx_toperator%= (const uintx_t &)
 Remainder. More...
 
 operator uint32_t ()
 Cast to uint32_t. More...
 
 operator uint64_t ()
 Cast to uint64_t. More...
 

Private Member Functions

void loadstring (const char *string)
 Load hex string. More...
 
void reallocate (const int s)
 Reallocate space for s words. More...
 
void grow (const int s)
 Grow space for s words. More...
 
void normalize ()
 Remove leading zero words. More...
 
int bitcount ()
 Number of bits. More...
 

Private Attributes

uint32_t * m_pData
 Array of 32-bit words, least significant first.
 
int m_nSize
 Number of words in m_pData.
 

Friends

uintx_t operator+ (uintx_t, uintx_t)
 Addition. More...
 
uintx_t operator * (uintx_t, uintx_t)
 Multiplication. More...
 
uintx_t operator * (uintx_t, int)
 Multiplication. More...
 
uintx_t operator * (int, uintx_t)
 Multiplication. More...
 
uintx_t operator * (uintx_t, uint32_t)
 Multiplication. More...
 
uintx_t operator * (uint32_t, uintx_t)
 Multiplication. More...
 
bool operator> (uintx_t, uintx_t)
 Greater than. More...
 
bool operator> (uintx_t, int)
 Greater than. More...
 
bool operator>= (uintx_t, uintx_t)
 Greater than or equal. More...
 
bool operator>= (uintx_t, int)
 Greater than or equal. More...
 
bool operator< (uintx_t, uintx_t)
 Less than. More...
 
bool operator< (uintx_t, int)
 Less than. More...
 
bool operator<= (uintx_t, uintx_t)
 Less than or equal. More...
 
bool operator<= (uintx_t, int)
 Less than or equal. More...
 
bool operator== (uintx_t, uintx_t)
 Equal to. More...
 
bool operator== (uintx_t, uint32_t)
 Equal to. More...
 
bool operator== (uint32_t, uintx_t)
 Equal to. More...
 
bool operator!= (uintx_t, uintx_t)
 Not equal to. More...
 
bool operator!= (uintx_t, uint32_t)
 Not equal to. More...
 
bool operator!= (uint32_t, uintx_t)
 Not equal to. More...
 
uintx_t operator<< (uintx_t, int)
 Left shift. More...
 
uintx_t operator>> (uintx_t, int)
 Right shift. More...
 
int operator & (uintx_t, int)
 Bit-wise AND. More...
 
uintx_t operator & (uintx_t, const uintx_t &)
 Bit-wise AND. More...
 
int operator| (uintx_t, int)
 Bit-wise OR operator. More...
 
uintx_t operator| (uintx_t, const uintx_t &)
 Bit-wise OR. More...
 
uintx_t operator- (uintx_t, uintx_t)
 Subtraction. More...
 
uintx_t operator/ (uintx_t, uintx_t)
 Division. More...
 
uintx_t operator/ (uintx_t, uint32_t)
 Division. More...
 
uintx_t operator% (uintx_t, uintx_t)
 Remainder. More...
 
uintx_t operator% (uintx_t, uint32_t)
 Remainder. More...
 

Detailed Description

An extensible unsigned integer can have arbitrary length.

Definition at line 14 of file uintx_t.h.

Constructor & Destructor Documentation

◆ uintx_t() [1/4]

uintx_t::uintx_t ( )

Void constructor.

Definition at line 19 of file uintx_t.cpp.

◆ uintx_t() [2/4]

uintx_t::uintx_t ( int  i)

Integer constructor.

Parameters
iInitial value.

Definition at line 25 of file uintx_t.cpp.

◆ uintx_t() [3/4]

uintx_t::uintx_t ( const char *  string)

String constructor.

Parameters
stringString containing initial value in hexadecimal.

Definition at line 33 of file uintx_t.cpp.

◆ uintx_t() [4/4]

uintx_t::uintx_t ( const uintx_t x)

Copy constructor.

Parameters
xExtensible unsigned integer to be copied.
Returns
Reference to this extensible unsigned integer after copying.

Definition at line 48 of file uintx_t.cpp.

Member Function Documentation

◆ bitcount()

int uintx_t::bitcount ( )
private

Compute the number of significant bits in the value stored.

Returns
the number of bits stored.

Definition at line 222 of file uintx_t.cpp.

◆ GetString()

std::string uintx_t::GetString ( ) const

Convert to a hexadecimal string.

Returns
Hexidecimal string.

Definition at line 72 of file uintx_t.cpp.

◆ grow()

void uintx_t::grow ( const int  s)
private

Increase the amount of space allocated while keeping the value stored.

Parameters
sNumber of words to increase to.

Definition at line 121 of file uintx_t.cpp.

◆ loadstring()

void uintx_t::loadstring ( const char *  string)
private

Set the value stored to a hex value.

Parameters
stringA null-terminated string containing a hex value.

Definition at line 177 of file uintx_t.cpp.

◆ normalize()

void uintx_t::normalize ( )
private

Minimize the amount of storage by removing the leading zero words and reallocating a smaller amount of space if possible.

Definition at line 157 of file uintx_t.cpp.

◆ operator *=()

uintx_t & uintx_t::operator *= ( const uintx_t y)

Multiply by a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
Returns
Reference to this extensible unsigned integer after multiplication by y.

Definition at line 766 of file uintx_t.cpp.

◆ operator uint32_t()

uintx_t::operator uint32_t ( )
Returns
Least significant 32-bit unsigned integer.

Definition at line 143 of file uintx_t.cpp.

◆ operator uint64_t()

uintx_t::operator uint64_t ( )

Construct a 64-bit unsigned integer from the two least-significant words.

Returns
Least significant 64-bit unsigned integer.

Definition at line 150 of file uintx_t.cpp.

◆ operator%=()

uintx_t & uintx_t::operator%= ( const uintx_t y)

Remainder after dividing by a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
Returns
Reference to this extensible unsigned integer after remaindering.

Definition at line 900 of file uintx_t.cpp.

◆ operator+=() [1/2]

uintx_t & uintx_t::operator+= ( const uintx_t y)

Add a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
Returns
Reference to this extensible unsigned integer after y has been added.

Definition at line 307 of file uintx_t.cpp.

◆ operator+=() [2/2]

uintx_t & uintx_t::operator+= ( const int &  y)

Add an integer.

Parameters
yAn integer.
Returns
Reference to this extensible unsigned integer after y has been added.

Definition at line 298 of file uintx_t.cpp.

◆ operator-=()

uintx_t & uintx_t::operator-= ( const uintx_t y)

Subtract a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
Returns
Reference to this extensible unsigned integer after y is subtracted.

Definition at line 790 of file uintx_t.cpp.

◆ operator/=()

uintx_t & uintx_t::operator/= ( const uintx_t y)

Divide by a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
Returns
Reference to this extensible unsigned integer after division.

Definition at line 870 of file uintx_t.cpp.

◆ operator<<=()

uintx_t & uintx_t::operator<<= ( const int  distance)

Left-shift this.

Parameters
distanceNumber of bits to left-shift by.
Returns
Reference to this extensible unsigned integer after left-shifting.

Definition at line 528 of file uintx_t.cpp.

◆ operator=() [1/3]

uintx_t & uintx_t::operator= ( const uintx_t x)

Assign a extensible unsigned integer.

Parameters
xExtensible unsigned integer to be copied.
Returns
Reference to this extensible unsigned integer after copying.

Definition at line 247 of file uintx_t.cpp.

◆ operator=() [2/3]

uintx_t & uintx_t::operator= ( const int  i)

Assign an integer.

Parameters
iInteger to be copied.
Returns
Reference to this extensible unsigned integer after copying.

Definition at line 261 of file uintx_t.cpp.

◆ operator=() [3/3]

uintx_t & uintx_t::operator= ( const char *  s)

Assign a hex value from a null-terminated string.

Parameters
sA null-terminated string containing a hex value.
Returns
Reference to this extensible unsigned integer after copying.

Definition at line 271 of file uintx_t.cpp.

◆ operator>>=()

uintx_t & uintx_t::operator>>= ( const int  distance)

Right-shift this.

Parameters
distanceNumber of bits to right-shift by.
Returns
Reference to this extensible unsigned integer after right-shifting.

Definition at line 576 of file uintx_t.cpp.

◆ reallocate()

void uintx_t::reallocate ( const int  s)
private

Change the number of words allocated and zero out the value stored.

Parameters
sNumber of words to allocate.

Definition at line 107 of file uintx_t.cpp.

Friends And Related Function Documentation

◆ operator & [1/2]

int operator & ( uintx_t  x,
int  y 
)
friend

Logical AND of a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yA word.
Returns
The most significant word of x ANDed with y.

Definition at line 647 of file uintx_t.cpp.

◆ operator & [2/2]

uintx_t operator & ( uintx_t  x,
const uintx_t y 
)
friend

Logical AND of two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer
Returns
x ANDed with y.

Definition at line 633 of file uintx_t.cpp.

◆ operator * [1/5]

uintx_t operator * ( uintx_t  y,
uintx_t  z 
)
friend

Multiply two extensible unsigned integers.

Parameters
yA extensible unsigned integer.
zA extensible unsigned integer
Returns
y multiplied by z.

Definition at line 686 of file uintx_t.cpp.

◆ operator * [2/5]

uintx_t operator * ( uintx_t  x,
int  y 
)
friend

Multiply a extensible unsigned integer by an integer.

Parameters
xA extensible unsigned integer.
yAn integer.
Returns
x multiplied by y.

Definition at line 703 of file uintx_t.cpp.

◆ operator * [3/5]

uintx_t operator * ( int  x,
uintx_t  y 
)
friend

Multiply an integer by a extensible unsigned integer.

Parameters
xAn integer.
yA extensible unsigned integer.
Returns
x multiplied by y.

Definition at line 726 of file uintx_t.cpp.

◆ operator * [4/5]

uintx_t operator * ( uintx_t  x,
uint32_t  y 
)
friend

Multiply a extensible unsigned integer by an unsigned integer.

Parameters
xA extensible unsigned integer.
yAn unsigned integer.
Returns
x multiplied by y.

Definition at line 735 of file uintx_t.cpp.

◆ operator * [5/5]

uintx_t operator * ( uint32_t  x,
uintx_t  y 
)
friend

Multiply an unsigned integer by a extensible unsigned integer.

Parameters
xAn unsigned integer.
yA extensible unsigned integer.
Returns
x multiplied by y.

Definition at line 758 of file uintx_t.cpp.

◆ operator!= [1/3]

bool operator!= ( uintx_t  x,
uintx_t  y 
)
friend

Unequality test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is not equal to y.

Definition at line 495 of file uintx_t.cpp.

◆ operator!= [2/3]

bool operator!= ( uintx_t  x,
uint32_t  y 
)
friend

Unequality test for a extensible unsigned integer and an unsigned integer.

Parameters
xA extensible unsigned integer.
yAn unsigned integer.
Returns
true If x is not equal to y.

Definition at line 504 of file uintx_t.cpp.

◆ operator!= [3/3]

bool operator!= ( uint32_t  x,
uintx_t  y 
)
friend

Unequality test for an unsigned integer and a extensible unsigned integer.

Parameters
xAn unsigned integer.
yA extensible unsigned integer.
Returns
true If x is not equal to y.

Definition at line 513 of file uintx_t.cpp.

◆ operator% [1/2]

uintx_t operator% ( uintx_t  y,
uintx_t  z 
)
friend

Remainder after dividing a extensible unsigned integer by a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
zA extensible unsigned integer.
Returns
The remainder after y is divided by z.

Definition at line 880 of file uintx_t.cpp.

◆ operator% [2/2]

uintx_t operator% ( uintx_t  y,
uint32_t  z 
)
friend

Remainder after dividing a extensible unsigned integer by an unsigned integer.

Parameters
yA extensible unsigned integer.
zAn unsigned integer.
Returns
The remainder after y is divided by z.

Definition at line 909 of file uintx_t.cpp.

◆ operator+

uintx_t operator+ ( uintx_t  x,
uintx_t  y 
)
friend

Add a pair of extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
x + y.

Definition at line 290 of file uintx_t.cpp.

◆ operator-

uintx_t operator- ( uintx_t  x,
uintx_t  y 
)
friend

Subtract a extensible unsigned integer from a extensible unsigned integer.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer
Returns
y subtracted from x, if non-negative.

Definition at line 782 of file uintx_t.cpp.

◆ operator/ [1/2]

uintx_t operator/ ( uintx_t  y,
uintx_t  z 
)
friend

Divide a extensible unsigned integer by a extensible unsigned integer.

Parameters
yA extensible unsigned integer.
zAn unsigned integer.
Returns
x divided by y, rounded down.

Definition at line 832 of file uintx_t.cpp.

◆ operator/ [2/2]

uintx_t operator/ ( uintx_t  y,
uint32_t  z 
)
friend

Divide a extensible unsigned integer by an unsigned integer.

Parameters
yA extensible unsigned integer.
zAn unsigned integer.
Returns
y divided by z, rounded down.

Definition at line 862 of file uintx_t.cpp.

◆ operator< [1/2]

bool operator< ( uintx_t  x,
uintx_t  y 
)
friend

Less than test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is less than y.

Definition at line 424 of file uintx_t.cpp.

◆ operator< [2/2]

bool operator< ( uintx_t  x,
int  y 
)
friend

Less than test for a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yAn integer.
Returns
true If x is less than y.

Definition at line 433 of file uintx_t.cpp.

◆ operator<<

uintx_t operator<< ( uintx_t  x,
int  d 
)
friend

Left-shift a extensible unsigned integer.

Parameters
xA extensible unsigned integer.
dNumber of bits to left-shift by.
Returns
x left-shifted by d bits.

Definition at line 568 of file uintx_t.cpp.

◆ operator<= [1/2]

bool operator<= ( uintx_t  x,
uintx_t  y 
)
friend

Less than or equal to test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is less than or equal to y.

Definition at line 442 of file uintx_t.cpp.

◆ operator<= [2/2]

bool operator<= ( uintx_t  x,
int  y 
)
friend

Less than or equal to test for a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yAn integer.
Returns
true If x is less than or equal to y.

Definition at line 451 of file uintx_t.cpp.

◆ operator== [1/3]

bool operator== ( uintx_t  x,
uintx_t  y 
)
friend

Equality test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is equal to y.

Definition at line 460 of file uintx_t.cpp.

◆ operator== [2/3]

bool operator== ( uintx_t  x,
uint32_t  y 
)
friend

Equality test for a extensible unsigned integer and an unsigned integer.

Parameters
xA extensible unsigned integer.
yAn unsigned integer.
Returns
true If x is equal to y.

Definition at line 477 of file uintx_t.cpp.

◆ operator== [3/3]

bool operator== ( uint32_t  x,
uintx_t  y 
)
friend

Equality test for an unsigned integer and a extensible unsigned integer.

Parameters
xAn unsigned integer.
yA extensible unsigned integer.
Returns
true If x is equal to y.

Definition at line 486 of file uintx_t.cpp.

◆ operator> [1/2]

bool operator> ( uintx_t  x,
uintx_t  y 
)
friend

Greater than test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is greater than y.

Definition at line 371 of file uintx_t.cpp.

◆ operator> [2/2]

bool operator> ( uintx_t  x,
int  y 
)
friend

Greater than test for a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yAn integer.
Returns
true If x is greater than y.

Definition at line 388 of file uintx_t.cpp.

◆ operator>= [1/2]

bool operator>= ( uintx_t  x,
uintx_t  y 
)
friend

Greater than or equal to test for two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer.
Returns
true If x is greater than or equal to y.

Definition at line 397 of file uintx_t.cpp.

◆ operator>= [2/2]

bool operator>= ( uintx_t  x,
int  y 
)
friend

Greater than or equal to test for a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yAn integer.
Returns
true If x is greater than or equal to y.

Definition at line 415 of file uintx_t.cpp.

◆ operator>>

uintx_t operator>> ( uintx_t  x,
int  d 
)
friend

Right-shift a extensible unsigned integer.

Parameters
xA extensible unsigned integer.
dNumber of bits to right-shift by.
Returns
x right-shifted by d bits.

Definition at line 617 of file uintx_t.cpp.

◆ operator| [1/2]

int operator| ( uintx_t  x,
int  y 
)
friend

Logical OR of a extensible unsigned integer and an integer.

Parameters
xA extensible unsigned integer.
yA word.
Returns
The most significant word of x ORed with y.

Definition at line 670 of file uintx_t.cpp.

◆ operator| [2/2]

uintx_t operator| ( uintx_t  x,
const uintx_t y 
)
friend

Logical OR of two extensible unsigned integers.

Parameters
xA extensible unsigned integer.
yA extensible unsigned integer
Returns
x ORed with y.

Definition at line 656 of file uintx_t.cpp.