Digit printing class for floating point. More...
Public Types | |
enum | eResult { kResultZero , kResultNormalFloat , kResultFloatRoundedUpAtEnd , kResultFloatRoundedUpADigit , kResultPositiveInfinity , kResultNegativeInfinity , kResultPositiveNaN , kResultNegativeNaN , kResultSignalingNaN , kResultQuietNaN , kResultIndefiniteNaN , kResultCount , kResultFirstSpecial = kResultPositiveInfinity , kResultLastSpecial = kResultIndefiniteNaN } |
Detected floating point number. More... | |
Public Member Functions | |
FPPrintInfo (void) noexcept | |
Default constructor. | |
FPPrintInfo (const FPInfo *pFPInfo, uint32_t uPrecisionDigits) noexcept | |
Construct with input data. | |
void | clear (void) noexcept |
Reset the class. | |
uint_t | has_integer (void) const noexcept |
Does the string have an integer part? | |
uint_t | has_fractional (void) const noexcept |
Does the string have a fractional part? | |
uint32_t | get_special_form_digits (void) const noexcept |
Get the number of special form digits. | |
uint32_t | get_first_non_zero_int_digit_position (void) const noexcept |
Get the index to the first integer digit. | |
uint32_t | get_last_non_zero_int_digit_position (void) const noexcept |
Get the index to the last integer digit. | |
uint32_t | get_first_non_zero_frac_digit_position (void) const noexcept |
Get the index to the first fractional digit. | |
uint32_t | get_last_non_zero_frac_digit_position (void) const noexcept |
Get the index to the last fractional digit. | |
eResult | get_result (void) const noexcept |
Get the type of number to print. | |
uint_t | is_special (void) const noexcept |
Is the number a special? | |
uint_t | is_infinity (void) const noexcept |
Is the number infinity? | |
uint_t | is_NaN (void) const noexcept |
Is the number Not a Number? | |
void | analyze_float (const FPInfo *pFPInfo, uint32_t uPrecisionDigits) noexcept |
Analyze a floating point number. | |
Static Public Attributes | |
static const char * | g_SpecialFloatsTextLower [kTextCount] |
Special float message strings. | |
static const char * | g_SpecialFloatsTextUpper [kTextCount] |
Special float message string in uppercase. | |
Private Types | |
enum | eTextIndex { kPosInfinity , kNegInfinity , kPosNan , kNegNan , kIndNan , kTextCount } |
Indexes for special floating point number names. More... | |
Private Attributes | |
uint_t | m_bHasIntegerPart |
TRUE if there is an integer component | |
uint_t | m_bHasFractionalPart |
TRUE if there is a fractional component | |
uint32_t | m_uSpecialFormDigits |
Number of digits for special text. | |
uint32_t | m_uFirstNonZeroIntDigitPos |
Index to the first non zero integer digit. | |
uint32_t | m_uLastNonZeroIntDigitPos |
Index to the last non zero integer digit. | |
uint32_t | m_uFirstNonZeroFracDigitPos |
Index to the first non zero fractional digit. | |
uint32_t | m_uLastNonZeroFracDigitPos |
Index to the last non zero integer digit. | |
eResult | m_uPrintResult |
Type of floating point number. | |
Digit printing class for floating point.
Analyze the floating point number. Determine if it is a 'special' form and where the digits start and end on each side of the decimal point.
We also support optional significant digit cutoff, in order to emulate RTLs that quit after a set number of digits (looking at you Microsoft)
Detected floating point number.
After parsing a floating point number for printing, this enumeration is one of the many types of output that the final result will be.
|
private |
Indexes for special floating point number names.
In the tables g_SpecialFloatsTextLower and g_SpecialFloatsTextUpper, the names of the special case floating point numbers are stored and the names are in the order of this enumeration.
Enumerator | |
---|---|
kPosInfinity | Index to "inf". |
kNegInfinity | Index to "-inf". |
kPosNan | Index to "nan". |
kNegNan | Index to "-nan". |
kIndNan | Index to "-nan". |
kTextCount | Number of string indexes. |
|
inlinenoexcept |
Default constructor.
Clear out the variables and set the data to zero
|
inlinenoexcept |
Construct with input data.
pFPInfo | Pointer to the floating point number to analyze |
uPrecisionDigits | Number of digits of precision to print |
|
noexcept |
Analyze a floating point number.
Analyze the floating point number. Determine if it is a 'special' form and where the digits start and end on each side of the decimal point.
pFPInfo | Pointer to the floating point number to analyze |
uPrecisionDigits | Number of digits of precision to print |
|
noexcept |
Reset the class.
Clear out the variables and set the data to zero
|
inlinenoexcept |
Get the index to the first fractional digit.
|
inlinenoexcept |
Get the index to the first integer digit.
|
inlinenoexcept |
Get the index to the last fractional digit.
|
inlinenoexcept |
Get the index to the last integer digit.
|
inlinenoexcept |
Get the type of number to print.
|
inlinenoexcept |
Get the number of special form digits.
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
static |
Special float message strings.
|
static |
Special float message string in uppercase.
|
private |
Index to the first non zero fractional digit.
|
private |
Index to the first non zero integer digit.
|
private |
Index to the last non zero integer digit.
|
private |
Index to the last non zero integer digit.
|
private |
Type of floating point number.
|
private |
Number of digits for special text.