#include <bdljsn_numberutil.h>
|
static bool | isIntegralNumber (const bsl::string_view &value) |
|
static bool | isValidNumber (const bsl::string_view &value) |
|
static bdldfp::Decimal64 | asDecimal64 (const bsl::string_view &value) |
|
static double | asDouble (const bsl::string_view &value) |
|
static float | asFloat (const bsl::string_view &value) |
|
static int | asDecimal64Exact (bdldfp::Decimal64 *result, const bsl::string_view &value) |
|
static int | asInt (int *result, const bsl::string_view &value) |
|
static int | asInt64 (Int64 *result, const bsl::string_view &value) |
|
static int | asUint (unsigned int *result, const bsl::string_view &value) |
|
static int | asUint64 (Uint64 *result, const bsl::string_view &value) |
|
template<class t_INTEGER_TYPE > |
static int | asInteger (t_INTEGER_TYPE *result, const bsl::string_view &value) |
|
static void | stringify (bsl::string *result, Int64 value) |
|
static void | stringify (bsl::string *result, Uint64 value) |
|
static void | stringify (bsl::string *result, double value) |
|
static void | stringify (bsl::string *result, const bdldfp::Decimal64 &value) |
|
static bool | areEqual (const bsl::string_view &lhs, const bsl::string_view &rhs) |
|
This struct
provides a namespace for a suite of functions that convert between a JSON formated numeric value and various numerical types. The valid syntax for a JSON formatted numeric value is spelled out in https://www.rfc-editor.org/rfc/rfc8259#section-6
.
◆ Int64
◆ Uint64
◆ anonymous enum
Enumerator |
---|
k_OVERFLOW | |
k_UNDERFLOW | |
k_NOT_INTEGRAL | |
k_INEXACT | |
◆ areEqual()
Return true
if the specified lhs
and rhs
represent the same numeric value, and false
otherwise. This function will return true
for differing representations of the same number (e.g., 1.0
, "1", "0.1e+1" are all equivalent) except in cases where the exponent cannot be represented by a 64-bit integer. If the exponent is outside the range of a 64-bit integer, true
will be returned if lhs == rhs
. For example, comparing "1e18446744073709551615" with itself will return true
, but comparing it to "10e18446744073709551614" will return false
. The behavior is undefined unless isValidNumber(lhs)
and isValidNumber(rhs)
.
◆ asDecimal64()
Return the closest floating point representation to the specified value
. If value
is outside the representable range, return +INF or -INF (as appropriate). The behavior is undefined unless isValidNumber(value)
is true
.
◆ asDecimal64Exact()
Load the specified result
with the specified value
, even if a non-zero status is returned. Return 0 if value
can be represented exactly, and return k_INEXACT
and load result
with the closest approximation of value
if value
cannot be represented exactly. A value
can be represented exactly as a Decimal64
if, for the significand and exponent of value
, abs(significand) <= 9,999,999,999,999,999
and -398 <= exponent <= 369
. The behavior is undefined unless isValidNumber(value)
is true
.
◆ asDouble()
◆ asFloat()
◆ asInt()
◆ asInt64()
◆ asInteger()
template<class t_INTEGER_TYPE >
int bdljsn::NumberUtil::asInteger |
( |
t_INTEGER_TYPE * |
result, |
|
|
const bsl::string_view & |
value |
|
) |
| |
|
static |
Load into the specified result
(of the template parameter type t_INTEGER_TYPE
) with the specified value
, even if a non-zero status is returned (truncating fractional digits if necessary). Return 0 on success, k_OVERFLOW
if value
is larger than can be represented by result
, k_UNDERFLOW
if value
is smaller than can be represented by result
, and k_NOT_INTEGRAL
if value
is not an integral number (i.e., there is a fractional part). For underflow, result
will be loaded with the minimum representable value, for overflow, result
will be loaded with the maximum representable value, for non-integral values result
will be loaded with the integer part of value
(truncating the value to the nearest integer). If the result is not an integer and also either overflows or underflows, it is treated as an overflow or underflow (respectively). The (template parameter) t_INTEGER_TYPE
shall be either a signed or unsigned integer type (that is not bool
) where sizeof(t_INTEGER_TYPE) <= 8
. The behavior is undefined unless isValidNumber(value)
is true
. Note that this operation will correctly handle exponents (e.g., a value
of "0.00000000000000000001e20" will produce a result
of 1).
◆ asUint()
int bdljsn::NumberUtil::asUint |
( |
unsigned int * |
result, |
|
|
const bsl::string_view & |
value |
|
) |
| |
|
inlinestatic |
◆ asUint64()
Load the specified result
with the specified value
, even if a non-zero status is returned (truncating fractional digits if necessary). Return 0 on success, k_OVERFLOW
if value
is larger than can be represented by result
, k_UNDERFLOW
if value
is smaller than can be represented by result
, and k_NOT_INTEGRAL
if value
is not an integral number (i.e., there is a fractional part). For underflow, result
will be loaded with the minimum representable value, for overflow, result
will be loaded with the maximum representable value, for non-integral values result
will be loaded with the integer part of value
(truncating the fractional part of value
). The behavior is undefined unless isValidNumber(value)
is true
. Note that this operation will correctly handle exponents (e.g., a value
of "0.00000000000000000001e20" will produce a result
of 1).
◆ isIntegralNumber()
static bool bdljsn::NumberUtil::isIntegralNumber |
( |
const bsl::string_view & |
value | ) |
|
|
static |
Return true
if the specified value
is a valid integral JSON number. Note that this function may return true
even if value
cannot be represented in a fundamental integral type. The behavior is undefined unless isValidNumber(value)
is true
.
◆ isValidNumber()
Return true
if the specified value
is a valid JSON number. Note that this function may return true
even if value
cannot be represented in any particular number type.
◆ stringify() [1/4]
Load into the specified result
a string representation of specified numerical value
.
◆ stringify() [2/4]
static void bdljsn::NumberUtil::stringify |
( |
bsl::string * |
result, |
|
|
double |
value |
|
) |
| |
|
static |
◆ stringify() [3/4]
◆ stringify() [4/4]
The documentation for this struct was generated from the following file: