#include <bdljsn_jsonnumber.h>
List of all members.
Public Types |
enum | { k_OVERFLOW = Nu::k_OVERFLOW,
k_UNDERFLOW = Nu::k_UNDERFLOW,
k_NOT_INTEGRAL = Nu::k_NOT_INTEGRAL,
k_INEXACT = Nu::k_INEXACT
} |
| special integer conversion status values
More...
|
Public Member Functions |
| BSLMF_NESTED_TRAIT_DECLARATION (JsonNumber, bslma::UsesBslmaAllocator) |
| BSLMF_NESTED_TRAIT_DECLARATION (JsonNumber, bslmf::IsBitwiseMoveable) |
| JsonNumber () |
| JsonNumber (bslma::Allocator *basicAllocator) |
| JsonNumber (const char *text, bslma::Allocator *basicAllocator=0) |
| JsonNumber (const bsl::string_view &text, bslma::Allocator *basicAllocator=0) |
| JsonNumber (bslmf::MovableRef< bsl::string > text) |
| JsonNumber (bslmf::MovableRef< bsl::string > text, bslma::Allocator *basicAllocator) |
| JsonNumber (int value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (unsigned int value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (bsls::Types::Int64 value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (bsls::Types::Uint64 value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (float value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (double value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (bdldfp::Decimal64 value, bslma::Allocator *basicAllocator=0) |
| JsonNumber (const JsonNumber &original, bslma::Allocator *basicAllocator=0) |
| JsonNumber (bslmf::MovableRef< JsonNumber > original) BSLS_KEYWORD_NOEXCEPT |
| JsonNumber (bslmf::MovableRef< JsonNumber > original, bslma::Allocator *basicAllocator) |
| ~JsonNumber () |
JsonNumber & | operator= (const JsonNumber &rhs) |
JsonNumber & | operator= (bslmf::MovableRef< JsonNumber > rhs) |
JsonNumber & | operator= (int rhs) |
JsonNumber & | operator= (unsigned int rhs) |
JsonNumber & | operator= (bsls::Types::Int64 rhs) |
JsonNumber & | operator= (bsls::Types::Uint64 rhs) |
JsonNumber & | operator= (float rhs) |
JsonNumber & | operator= (double rhs) |
JsonNumber & | operator= (bdldfp::Decimal64 rhs) |
void | swap (JsonNumber &other) |
bool | isEqual (const JsonNumber &other) const |
bool | isIntegral () const |
const bsl::string & | value () const |
int | asInt (int *result) const |
int | asInt64 (bsls::Types::Int64 *result) const |
int | asUint (unsigned int *result) const |
int | asUint64 (bsls::Types::Uint64 *result) const |
float | asFloat () const |
double | asDouble () const |
bdldfp::Decimal64 | asDecimal64 () const |
int | asDecimal64Exact (bdldfp::Decimal64 *result) const |
bslma::Allocator * | allocator () const |
bsl::ostream & | print (bsl::ostream &stream, int level=0, int spacesPerLevel=4) const |
Static Public Member Functions |
static bool | isValidNumber (const bsl::string_view &text) |
Friends |
void | swap (JsonNumber &, JsonNumber &) |
Detailed Description
This class defines a value-semantic class that represents a JSON number. Objects of this class have a value determined at construction and does not change except by assignment from or swap with another JsonNumber
object. The value can be specified by supplying a string that conforms to the JSON Textual Specification or from one of the {Supported Types}. The value of a JSON object can be converted to any of those types; however, some of those conversions can be inexact.
See Component bdljsn_jsonnumber
Member Enumeration Documentation
- Enumerator:
k_OVERFLOW |
above the representable range
|
k_UNDERFLOW |
below the representable range
|
k_NOT_INTEGRAL |
the number is not an integer
|
k_INEXACT |
special exact Decimal64 conversion status values
|
Constructor & Destructor Documentation
bdljsn::JsonNumber::JsonNumber |
( |
|
) |
|
Create a JsonNumber
having the value "0". Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
bdljsn::JsonNumber::JsonNumber |
( |
const char * |
text, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
bdljsn::JsonNumber::JsonNumber |
( |
const bsl::string_view & |
text, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
Create a JsonNumber
having the value of the specified text
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used. The behavior is undefined unless isValidJsonNumber(text)
is true
. See JSON Textual Specification.
Create a JsonNumber
object having the same value and the same allocator as the specified text
. The contents of the value
string becomes unspecified but valid, and its allocator remains unchanged. The behavior is undefined unless isValidNumber(text)
is true
. See JSON Textual Specification.
Create a JsonNumber
object having the same value as the specified text
, using the specified basicAllocator
to supply memory. The allocator of the text
string remains unchanged. If the text
and the newly created object have the same allocator then the contents of text
string becomes unspecified but valid, and no exceptions will be thrown; otherwise the text
string is unchanged and an exception may be thrown. The behavior is undefined unless isValidNumber(text)
is true
. See JSON Textual Specification.
bdljsn::JsonNumber::JsonNumber |
( |
int |
value, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
bdljsn::JsonNumber::JsonNumber |
( |
unsigned int |
value, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
Create a JsonNumber
having the specified value
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
bdljsn::JsonNumber::JsonNumber |
( |
float |
value, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
bdljsn::JsonNumber::JsonNumber |
( |
double |
value, |
|
|
bslma::Allocator * |
basicAllocator = 0 | |
|
) |
| | [explicit] |
Create a JsonNumber
having the specified value
. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used. The behavior is undefined if the value
is infinite (INF
) or not-a-number (NaN
).
Create a JsonNumber
object having the same value as the specified original
object. Optionally specify a basicAllocator
used to supply memory. If basicAllocator
is 0, the currently installed default allocator is used.
Create a JsonNumber
object having the same value and the same allocator as the specified original
object. The value of original
becomes unspecified but valid, and its allocator remains unchanged.
Create a JsonNumber
object having the same value as the specified original
object, using the specified basicAllocator
to supply memory. The allocator of original
remains unchanged. If original
and the newly created object have the same allocator then the value of original
becomes unspecified but valid, and no exceptions will be thrown; otherwise original
is unchanged (and an exception may be thrown).
bdljsn::JsonNumber::~JsonNumber |
( |
|
) |
|
Member Function Documentation
static bool bdljsn::JsonNumber::isValidNumber |
( |
const bsl::string_view & |
text |
) |
[static] |
Return true
if the specified text
complies with the grammar of a JSON number, and false
otherwise. See the JSON Textual Specification.
Assign to this object the value of the specified rhs
object, and return a non-'const' reference to this object.
Assign to this object the value of the specified rhs
object, and return a non-'const' reference to this object. The allocators of this object and rhs
both remain unchanged. If rhs
and this object have the same allocator then the value of rhs
becomes unspecified but valid, and no exceptions will be thrown; otherwise rhs
is unchanged (and an exception may be thrown).
JsonNumber& bdljsn::JsonNumber::operator= |
( |
int |
rhs |
) |
|
JsonNumber& bdljsn::JsonNumber::operator= |
( |
unsigned int |
rhs |
) |
|
Assign to this object the value of the specified rhs
, and return a non-'const' reference to this object.
JsonNumber& bdljsn::JsonNumber::operator= |
( |
float |
rhs |
) |
|
JsonNumber& bdljsn::JsonNumber::operator= |
( |
double |
rhs |
) |
|
Assign to this object the value of the specified rhs
, and return a non-'const' reference to this object. The behavior is undefined if rhs
is infinite (INF
) or not-a-number (NaN
).
void bdljsn::JsonNumber::swap |
( |
JsonNumber & |
other |
) |
|
Efficiently exchange the value of this object with the value of the specified other
object. This method provides the no-throw exception-safety guarantee. The behavior is undefined unless this object was created with the same allocator as other
.
bool bdljsn::JsonNumber::isEqual |
( |
const JsonNumber & |
other |
) |
const |
Return true
if this number and the specified other
number have the same numeric value, and false
otherwise. Note that this is in contrast to operator==
, which returns whether the text returned by value
is the same. So, for example, JsonNumber("10") == JsonNumber("1e1")
is false
, but JsonNumber("10").isEqual(JsonNumber("1e1"))
is true
.
bool bdljsn::JsonNumber::isIntegral |
( |
|
) |
const |
Return true
if the value of this JsonNumber
is an (exact) integral value, or false
otherwise. Note that this function may return true
even this number cannot be represented in a fundamental integral type.
Return the textual representation of this JsonNumber
.
int bdljsn::JsonNumber::asInt |
( |
int * |
result |
) |
const |
int bdljsn::JsonNumber::asUint |
( |
unsigned int * |
result |
) |
const |
Load into the specified result
the integer value of this number. 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). If the result is not an integer and also either overflows or underflows, it is treated as an overflow or underflow (respectively). Note that this operation returns an error status value (unlike similar floating point conversions) because typically it is an error if a conversion to an integer results in an in-exact value.
float bdljsn::JsonNumber::asFloat |
( |
|
) |
const |
double bdljsn::JsonNumber::asDouble |
( |
|
) |
const |
Return the closest floating point representation to this number. If this number is outside the representable range, return +INF
or -INF
(as appropriate). Note that values smaller than the smallest representable non-zero value (a.k.a, MIN
) are rounded to MIN
(positive or negative, as appropriate) or 0, whichever is the better approximation.
Load to the specified result
the closest floating point representation to this number, even if a non-zero status is returned. Return 0 if this number can be represented exactly, and return k_INEXACT
and load result
with the closest approximation if value
cannot be represented exactly. If this number is outside the representable range, load result
with +INF
or -INF
(as appropriate). A number can be represented exactly as a Decimal64
if, for the significand and exponent, abs(significand) <= 9,999,999,999,999,999
and -398 <= exponent <= 369
.
Return the allocator used by this object to supply memory. Note that if no allocator was supplied at construction the default allocator in effect at construction is used.
bsl::ostream& bdljsn::JsonNumber::print |
( |
bsl::ostream & |
stream, |
|
|
int |
level = 0 , |
|
|
int |
spacesPerLevel = 4 | |
|
) |
| | const |
Write the value of this object to the specified output stream
in a human-readable format, and return a non-'const' reference to stream
. Optionally specify an initial indentation level
, whose absolute value is incremented recursively for nested objects. If level
is specified, optionally specify spacesPerLevel
, whose absolute value indicates the number of spaces per indentation level for this and all of its nested objects. If level
is negative, suppress indentation of the first line. If spacesPerLevel
is negative, format the entire output on one line, suppressing all but the initial indentation (as governed by level
). If stream
is not valid on entry, this operation has no effect. Note that the format is not fully specified, and can change without notice.
Friends And Related Function Documentation
Exchange the values of the specified a
and b
objects. This function provides the no-throw exception-safety guarantee if the two objects were created with the same allocator and the basic guarantee otherwise.
The documentation for this class was generated from the following file: