rippled
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
ripple::IOUAmount Class Reference

Floating point representation of amounts with high dynamic range. More...

#include <IOUAmount.h>

Inheritance diagram for ripple::IOUAmount:
Inheritance graph
[legend]
Collaboration diagram for ripple::IOUAmount:
Collaboration graph
[legend]

Public Member Functions

 IOUAmount ()=default
 
 IOUAmount (Number const &other)
 
 IOUAmount (beast::Zero)
 
 IOUAmount (std::int64_t mantissa, int exponent)
 
IOUAmountoperator= (beast::Zero)
 
 operator Number () const
 
IOUAmountoperator+= (IOUAmount const &other)
 
IOUAmountoperator-= (IOUAmount const &other)
 
IOUAmount operator- () const
 
bool operator== (IOUAmount const &other) const
 
bool operator< (IOUAmount const &other) const
 
 operator bool () const noexcept
 Returns true if the amount is not zero.
 
int signum () const noexcept
 Return the sign of the amount.
 
int exponent () const noexcept
 
std::int64_t mantissa () const noexcept
 

Static Public Member Functions

static IOUAmount minPositiveAmount ()
 

Private Member Functions

void normalize ()
 Adjusts the mantissa and exponent to the proper range.
 

Private Attributes

std::int64_t mantissa_
 
int exponent_
 

Friends

std::ostreamoperator<< (std::ostream &os, IOUAmount const &x)
 

Detailed Description

Floating point representation of amounts with high dynamic range.

Amounts are stored as a normalized signed mantissa and an exponent. The range of the normalized exponent is [-96,80] and the range of the absolute value of the normalized mantissa is [1000000000000000, 9999999999999999].

Arithmetic operations can throw std::overflow_error during normalization if the amount exceeds the largest representable amount, but underflows will silently trunctate to zero.

Definition at line 44 of file IOUAmount.h.

Constructor & Destructor Documentation

◆ IOUAmount() [1/4]

ripple::IOUAmount::IOUAmount ( )
default

◆ IOUAmount() [2/4]

ripple::IOUAmount::IOUAmount ( Number const &  other)
explicit

Definition at line 128 of file IOUAmount.cpp.

◆ IOUAmount() [3/4]

ripple::IOUAmount::IOUAmount ( beast::Zero  )

Definition at line 109 of file IOUAmount.h.

◆ IOUAmount() [4/4]

ripple::IOUAmount::IOUAmount ( std::int64_t  mantissa,
int  exponent 
)

Definition at line 114 of file IOUAmount.h.

Member Function Documentation

◆ normalize()

void ripple::IOUAmount::normalize ( )
private

Adjusts the mantissa and exponent to the proper range.

This can throw if the amount cannot be normalized, or is larger than the largest value that can be represented as an IOU amount. Amounts that are too small to be represented normalize to 0.

Definition at line 75 of file IOUAmount.cpp.

◆ operator=()

IOUAmount & ripple::IOUAmount::operator= ( beast::Zero  )

Definition at line 121 of file IOUAmount.h.

◆ operator Number()

ripple::IOUAmount::operator Number ( ) const

Definition at line 130 of file IOUAmount.h.

◆ operator+=()

IOUAmount & ripple::IOUAmount::operator+= ( IOUAmount const &  other)

Definition at line 138 of file IOUAmount.cpp.

◆ operator-=()

IOUAmount & ripple::IOUAmount::operator-= ( IOUAmount const &  other)

Definition at line 136 of file IOUAmount.h.

◆ operator-()

IOUAmount ripple::IOUAmount::operator- ( ) const

Definition at line 143 of file IOUAmount.h.

◆ operator==()

bool ripple::IOUAmount::operator== ( IOUAmount const &  other) const

Definition at line 149 of file IOUAmount.h.

◆ operator<()

bool ripple::IOUAmount::operator< ( IOUAmount const &  other) const

Definition at line 154 of file IOUAmount.h.

◆ operator bool()

ripple::IOUAmount::operator bool ( ) const
explicitnoexcept

Returns true if the amount is not zero.

Definition at line 160 of file IOUAmount.h.

◆ signum()

int ripple::IOUAmount::signum ( ) const
noexcept

Return the sign of the amount.

Definition at line 166 of file IOUAmount.h.

◆ exponent()

int ripple::IOUAmount::exponent ( ) const
noexcept

Definition at line 172 of file IOUAmount.h.

◆ mantissa()

std::int64_t ripple::IOUAmount::mantissa ( ) const
noexcept

Definition at line 178 of file IOUAmount.h.

◆ minPositiveAmount()

IOUAmount ripple::IOUAmount::minPositiveAmount ( )
static

Definition at line 69 of file IOUAmount.cpp.

Friends And Related Symbol Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream os,
IOUAmount const &  x 
)
friend

Definition at line 102 of file IOUAmount.h.

Member Data Documentation

◆ mantissa_

std::int64_t ripple::IOUAmount::mantissa_
private

Definition at line 48 of file IOUAmount.h.

◆ exponent_

int ripple::IOUAmount::exponent_
private

Definition at line 49 of file IOUAmount.h.