8#ifndef INCLUDED_BDLJSN_JSON
9#define INCLUDED_BDLJSN_JSON
472#include <bdlscm_version.h>
505#include <bsl_exception.h>
506#include <bsl_iterator.h>
507#include <bsl_limits.h>
509#include <bsl_string.h>
510#include <bsl_string_view.h>
511#include <bsl_type_traits.h>
515#include <bsl_unordered_map.h>
516#include <bsl_utility.h>
517#include <bsl_vector.h>
519#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
520#include <initializer_list>
523#if defined(BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY)
524#include <string_view>
534#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
535class Json_Initializer;
536class JsonObject_MemberInitializer;
558 template <
class t_INTEGRAL>
559 static bool isNonNegativeImp(t_INTEGRAL value,
bsl::true_type is_signed);
563 template <
class t_INTEGRAL>
564 static bool isNonNegativeImp(t_INTEGRAL value,
bsl::false_type is_signed);
569 template <
class t_INTEGRAL>
570 static bool isNonNegative(t_INTEGRAL value);
650 template <
class t_INPUT_ITERATOR>
652 t_INPUT_ITERATOR last,
655#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
660 JsonArray(std::initializer_list<Json_Initializer> elements,
681#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
710 template <
class t_INPUT_ITERATOR>
713#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
789 template <
class t_INDEX>
804 template <
class t_INDEX>
826 template <
class t_INDEX,
class t_INPUT_ITERATOR>
830 insert(t_INDEX index, t_INPUT_ITERATOR first, t_INPUT_ITERATOR last);
867 template <
class t_INPUT_ITERATOR>
869 t_INPUT_ITERATOR first,
870 t_INPUT_ITERATOR last);
927 template <
class t_STRING_TYPE>
940 void resize(bsl::size_t count);
948 void resize(bsl::size_t count,
const Json& json);
1032 int spacesPerLevel = 4) const;
1168 template <
class t_INPUT_ITERATOR>
1170 t_INPUT_ITERATOR last,
1173#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1184 std::initializer_list<JsonObject_MemberInitializer> memberInitializers,
1204#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1213 JsonObject_MemberInitializer>
1214 memberInitializers);
1311 template <class t_INPUT_ITERATOR>
1312 typename
bsl::enable_if<
1313 !
bsl::is_convertible<t_INPUT_ITERATOR,
bsl::string_view>::value,
1315 insert(t_INPUT_ITERATOR first, t_INPUT_ITERATOR last);
1317#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1326 memberInitializers);
1339 template <
class t_VALUE>
1380 bool contains(const
bsl::string_view& key) const;
1415 int spacesPerLevel = 4) const;
1561#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1567 template <
class t_JSON_INITIALIZER>
1568 Json(
const t_JSON_INITIALIZER& initializer,
1572 Json_Initializer>::value>::type * = 0);
1580 explicit Json(
int value,
1582 explicit Json(
unsigned int value,
1584 explicit Json(
long value,
1586 explicit Json(
unsigned long value,
1588 explicit Json(
long long value,
1590 explicit Json(
unsigned long long value,
1592 explicit Json(
float value,
1594 explicit Json(
double value,
1609 explicit Json(
const char *
string,
1627 template <
class t_STRING_TYPE>
1698 template <
class t_STRING_TYPE>
1766 bool& makeBoolean();
1767 bool& makeBoolean(
bool boolean);
1803 void makeString(
const char *
string);
1815 template <
class t_STRING_TYPE>
1853#if defined(BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT)
1864 explicit operator bool &();
1941 template <
class t_INPUT_ITERATOR>
1945 insert(t_INPUT_ITERATOR first, t_INPUT_ITERATOR last);
1947#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1955 Json&
insert(std::initializer_list<JsonObject_MemberInitializer>
1956 memberInitializers);
1970 template <
class t_VALUE,
class t_STRING_VIEW>
1975 insert(
const t_STRING_VIEW& key,
1990 template <
class t_INDEX>
2006 template <
class t_INDEX>
2022 template <
class t_INDEX,
class t_INPUT_ITERATOR>
2027 t_INPUT_ITERATOR first,
2028 t_INPUT_ITERATOR last);
2060 template <
class t_INPUT_ITERATOR>
2062 t_INPUT_ITERATOR first,
2063 t_INPUT_ITERATOR last);
2132 template <
class t_STRING_TYPE>
2161 template <
class RETURN_TYPE,
class VISITOR>
2164#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
2189 template <
class VISITOR>
2225 int asShort (
short *result)
const;
2226 int asInt (
int *result)
const;
2227 int asLong (
long *result)
const;
2228 int asLonglong (
long long *result)
const;
2230 int asUshort (
unsigned short *result)
const;
2231 int asUint (
unsigned int *result)
const;
2232 int asUlong (
unsigned long *result)
const;
2233 int asUlonglong(
unsigned long long *result)
const;
2241 float asFloat()
const;
2242 double asDouble()
const;
2262 bool isArray()
const;
2266 bool isBoolean()
const;
2270 bool isNull()
const;
2274 bool isNumber()
const;
2278 bool isObject()
const;
2282 bool isString()
const;
2294 const bool& theBoolean()
const;
2329 const
Json& operator[](const
bsl::string_view& key) const;
2336 const
Json& operator[](
bsl::
size_t index) const;
2338#if defined(BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT)
2343 explicit operator const JsonArray &()
const;
2349 explicit operator const bool &()
const;
2355 explicit operator const JsonNull &()
const;
2361 explicit operator const JsonNumber &()
const;
2367 explicit operator const JsonObject &()
const;
2380 bsl::size_t
size()
const;
2409 template <
class RETURN_TYPE,
class VISITOR>
2413#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
2435 template <
class VISITOR>
2460 int spacesPerLevel = 4) const;
2474bsl::ostream& operator<<(
bsl::ostream& stream, const
Json&
object);
2496bool operator==(
bool lhs, const
Json& rhs);
2497bool operator==(
int lhs, const
Json& rhs);
2498bool operator==(
unsigned int lhs, const
Json& rhs);
2499bool operator==(
long lhs, const
Json& rhs);
2500bool operator==(
unsigned long lhs, const
Json& rhs);
2501bool operator==(
long long lhs, const
Json& rhs);
2502bool operator==(
unsigned long long lhs, const
Json& rhs);
2503bool operator==(
float lhs, const
Json& rhs);
2504bool operator==(
double lhs, const
Json& rhs);
2506bool operator==(const
char *lhs, const
Json& rhs);
2507bool operator==(const
bsl::string_view& lhs, const
Json& rhs);
2512bool operator==(const
Json& lhs,
bool rhs);
2513bool operator==(const
Json& lhs,
int rhs);
2514bool operator==(const
Json& lhs,
unsigned int rhs);
2515bool operator==(const
Json& lhs,
long rhs);
2516bool operator==(const
Json& lhs,
unsigned long rhs);
2517bool operator==(const
Json& lhs,
long long rhs);
2518bool operator==(const
Json& lhs,
unsigned long long rhs);
2519bool operator==(const
Json& lhs,
float rhs);
2520bool operator==(const
Json& lhs,
double rhs);
2522bool operator==(const
Json& lhs, const
char *rhs);
2523bool operator==(const
Json& lhs, const
bsl::string_view& rhs);
2533bool operator!=(
bool lhs, const
Json& rhs);
2534bool operator!=(
int lhs, const
Json& rhs);
2535bool operator!=(
unsigned int lhs, const
Json& rhs);
2536bool operator!=(
long lhs, const
Json& rhs);
2537bool operator!=(
unsigned long lhs, const
Json& rhs);
2538bool operator!=(
long long lhs, const
Json& rhs);
2539bool operator!=(
unsigned long long lhs, const
Json& rhs);
2540bool operator!=(
float lhs, const
Json& rhs);
2541bool operator!=(
double lhs, const
Json& rhs);
2543bool operator!=(const
char *lhs, const
Json& rhs);
2544bool operator!=(const
bsl::string_view& lhs, const
Json& rhs);
2549bool operator!=(const
Json& lhs,
bool rhs);
2550bool operator!=(const
Json& lhs,
int rhs);
2551bool operator!=(const
Json& lhs,
unsigned int rhs);
2552bool operator!=(const
Json& lhs,
long rhs);
2553bool operator!=(const
Json& lhs,
unsigned long rhs);
2554bool operator!=(const
Json& lhs,
long long rhs);
2555bool operator!=(const
Json& lhs,
unsigned long long rhs);
2556bool operator!=(const
Json& lhs,
float rhs);
2557bool operator!=(const
Json& lhs,
double rhs);
2559bool operator!=(const
Json& lhs, const
char *rhs);
2560bool operator!=(const
Json& lhs, const
bsl::string_view& rhs);
2574#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
2591class Json_Initializer {
2602 bsl::span<const Json_Initializer>,
2606 const Json *> Storage;
2618 Json_Initializer(
const JsonNull& );
2625 template <
class t_BOOL>
2636 template <
class t_INTEGRAL>
2644 Json_Initializer(
float value);
2647 Json_Initializer(
double value);
2654 Json_Initializer(
const char *
string);
2659 Json_Initializer(
const std::string&
string);
2660#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
2661 Json_Initializer(
const std::pmr::string&
string);
2668#ifdef BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST
2671 Json_Initializer(
const std::string_view& sv);
2676 Json_Initializer(std::initializer_list<Json_Initializer> il);
2684 Json_Initializer(
const JsonArray& jArr);
2692 Json_Initializer(
const Json& json);
2698 const Storage& get_storage()
const;
2707Json_Initializer::Json_Initializer()
2708: d_storage(JsonNull())
2713Json_Initializer::Json_Initializer(
const JsonNull &)
2714: d_storage(JsonNull())
2718template <
class t_BOOL>
2719Json_Initializer::Json_Initializer(t_BOOL value,
typename bsl::enable_if<
2726template <
class t_INTEGRAL>
2727Json_Initializer::Json_Initializer(t_INTEGRAL value,
typename bsl::enable_if<
2733 || bsl:: is_signed<t_INTEGRAL>::value);
2735 if (bsl::is_unsigned<t_INTEGRAL>::value) {
2736 d_storage =
static_cast<unsigned long long>(value);
2738 d_storage =
static_cast< long long>(value);
2743Json_Initializer::Json_Initializer(
float value)
2744: d_storage(static_cast<double>(value))
2749Json_Initializer::Json_Initializer(
double value)
2761Json_Initializer::Json_Initializer(
const char *
string)
2767Json_Initializer::Json_Initializer(
const bsl::string&
string)
2773Json_Initializer::Json_Initializer(
const std::string&
string)
2778#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
2780Json_Initializer::Json_Initializer(
const std::pmr::string&
string)
2792#ifdef BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST
2794Json_Initializer::Json_Initializer(
const std::string_view& sv)
2801Json_Initializer::Json_Initializer(std::initializer_list<Json_Initializer> il)
2802: d_storage(
bsl::span<const Json_Initializer>(il.
begin(), il.
end()))
2807Json_Initializer::Json_Initializer(
const JsonObject& jObj)
2813Json_Initializer::Json_Initializer(
const JsonArray& jArr)
2819Json_Initializer::Json_Initializer(
const JsonNumber& jNum)
2825Json_Initializer::Json_Initializer(
const Json& json)
2832const Json_Initializer::Storage&
2833Json_Initializer::get_storage()
const
2847class Json_ConstructVisitor {
2853 explicit Json_ConstructVisitor(Json *json);
2857 void operator()(
const JsonNull& jNull)
const;
2861 void operator()(
bool b)
const;
2865 void operator()(
long long ll)
const;
2869 void operator()(
unsigned long long ull)
const;
2873 void operator()(
double d)
const;
2885 void operator()(
const JsonObject *jObj)
const;
2889 void operator()(
const JsonArray *jArr)
const;
2893 void operator()(
const JsonNumber *jNum)
const;
2897 void operator()(
const Json *json)
const;
2901 void operator()(bsl::span<const Json_Initializer> il)
const;
2913Json_ConstructVisitor::Json_ConstructVisitor(Json *json)
2919void Json_ConstructVisitor::operator()(
const JsonNull &jNull)
const
2925void Json_ConstructVisitor::operator()(
bool b)
const
2927 d_this_p->makeBoolean(b);
2931void Json_ConstructVisitor::operator()(
long long ll)
const
2933 d_this_p->makeNumber(JsonNumber(ll));
2937void Json_ConstructVisitor::operator()(
unsigned long long ull)
const
2939 d_this_p->makeNumber(JsonNumber(ull));
2943void Json_ConstructVisitor::operator()(
double d)
const
2945 d_this_p->makeNumber(JsonNumber(d));
2951 d_this_p->makeNumber(JsonNumber(value));
2957 d_this_p->makeString(sv);
2961void Json_ConstructVisitor::operator()(
const JsonObject *jObj)
const
2963 d_this_p->makeObject(*jObj);
2967void Json_ConstructVisitor::operator()(
const JsonArray *jArr)
const
2969 d_this_p->makeArray(*jArr);
2973void Json_ConstructVisitor::operator()(
const JsonNumber *jNum)
const
2975 d_this_p->makeNumber(*jNum);
2979void Json_ConstructVisitor::operator()(
const Json *json)
const
2985void Json_ConstructVisitor::operator()(bsl::span<const Json_Initializer> sp)
2988 JsonArray arr(sp.begin(), sp.end(), d_this_p->allocator());
2993void Json_ConstructVisitor::operator()(
bslmf::Nil)
const
3008class JsonObject_MemberInitializer {
3013 Json_Initializer d_second;
3024 JsonObject_MemberInitializer(
const char *s,
3025 const Json_Initializer& ji);
3026 JsonObject_MemberInitializer(
const bsl::string& s,
3027 const Json_Initializer& ji);
3028 JsonObject_MemberInitializer(
const std::string& s,
3029 const Json_Initializer& ji);
3030#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
3031 JsonObject_MemberInitializer(
const std::pmr::string& s,
3032 const Json_Initializer& ji);
3039 const Json_Initializer& ji);
3041#ifdef BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST
3045 JsonObject_MemberInitializer(
const std::string_view& sv,
3046 const Json_Initializer& ji);
3056 const Json_Initializer& value()
const;
3067JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3069 const Json_Initializer& ji)
3076JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3078 const Json_Initializer& ji)
3085JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3086 const std::string& s,
3087 const Json_Initializer& ji)
3093#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_PMR_STRING
3095JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3096 const std::pmr::string& s,
3097 const Json_Initializer& ji)
3105JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3107 const Json_Initializer& ji)
3113#ifdef BSLSTL_STRING_VIEW_AND_STD_STRING_VIEW_COEXIST
3115JsonObject_MemberInitializer::JsonObject_MemberInitializer(
3116 const std::string_view& sv,
3117 const Json_Initializer& ji)
3132const Json_Initializer& JsonObject_MemberInitializer::value()
const
3152 template <
class RETURN_TYPE,
3156 RETURN_TYPE invokeVisitor(VISITOR *visitor,
3157 const ARGUMENT& argument);
3158 template <
class RETURN_TYPE,
3162 RETURN_TYPE invokeVisitor(VISITOR& visitor,
3163 const ARGUMENT& argument);
3164 template <
class RETURN_TYPE,
3168 RETURN_TYPE invokeVisitor(
const VISITOR& visitor,
3169 const ARGUMENT& argument);
3170 template <
class RETURN_TYPE,
3175 const ARGUMENT& argument);
3176#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
3177 template <
class VISITOR,
3180 decltype(
auto) invokeVisitor(
const VISITOR& visitor,
3181 const ARGUMENT& argument);
3182 template <
class VISITOR,
3186 const ARGUMENT& argument);
3194template <
class RETURN_TYPE,
3197RETURN_TYPE Json_VisitUtil::invokeVisitor(VISITOR *visitor,
3198 const ARGUMENT& argument)
3201 return (*visitor)(argument);
3204template <
class RETURN_TYPE,
3207RETURN_TYPE Json_VisitUtil::invokeVisitor(VISITOR& visitor,
3208 const ARGUMENT& argument)
3210 return visitor(argument);
3213template <
class RETURN_TYPE,
3216RETURN_TYPE Json_VisitUtil::invokeVisitor(
const VISITOR& visitor,
3217 const ARGUMENT& argument)
3219 return visitor(argument);
3222template <
class RETURN_TYPE,
3225RETURN_TYPE Json_VisitUtil::invokeVisitor(
3227 const ARGUMENT& argument)
3229#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
3230 return (bsl::forward<VISITOR>(visitor))(argument);
3236#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
3237template <
class VISITOR,
3239decltype(
auto) Json_VisitUtil::invokeVisitor(
const VISITOR& visitor,
3240 const ARGUMENT& argument)
3242 return visitor(argument);
3245template <
class VISITOR,
3247decltype(
auto) Json_VisitUtil::invokeVisitor(
3249 const ARGUMENT& argument)
3251#ifdef BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES
3252 return (bsl::forward<VISITOR>(visitor))(argument);
3288Json_StringInvariantGuard::Json_StringInvariantGuard(
bsl::string *
string)
3301 "false == bdlde::Utf8Util::isValid(*d_string_p)");
3312template <
class t_INTEGRAL>
3313bool JsonArray::isNonNegativeImp(t_INTEGRAL value,
bsl::true_type )
3318template <
class t_INTEGRAL>
3324template <
class t_INTEGRAL>
3325bool JsonArray::isNonNegative(t_INTEGRAL value)
3327 return isNonNegativeImp(
3330 bsl::numeric_limits<t_INTEGRAL>::is_signed>());
3342: d_elements(basicAllocator)
3349: d_elements(original.d_elements, basicAllocator)
3364: d_elements(basicAllocator)
3368 if (basicAllocator == originalAsLvalue.
allocator()) {
3372 d_elements = originalAsLvalue.d_elements;
3376template <
class t_INPUT_ITERATOR>
3379 t_INPUT_ITERATOR last,
3381: d_elements(first, last, basicAllocator)
3385#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3389: d_elements(elements.begin(), elements.end(), basicAllocator)
3399 d_elements = rhs.d_elements;
3411#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3425 return d_elements[index];
3428template <
class t_INPUT_ITERATOR>
3432 d_elements.
assign(first, last);
3436#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3440 d_elements.
assign(elements.begin(), elements.end());
3448 return d_elements.
back();
3454 return d_elements.
begin();
3466 return d_elements.
end();
3472 return d_elements.
erase(d_elements.
begin() + index);
3478 return d_elements.
erase(position);
3484 return d_elements.
erase(first, last);
3490 return d_elements.
front();
3493template <
class t_INDEX>
3502 return d_elements.
insert(d_elements.
begin() + index, json);
3505template <
class t_INDEX>
3514 return d_elements.
insert(d_elements.
begin() + index,
3518template <
class t_INDEX,
class t_INPUT_ITERATOR>
3524 t_INPUT_ITERATOR first,
3525 t_INPUT_ITERATOR last)
3529 return d_elements.
insert(d_elements.
begin() + index, first, last);
3535 return d_elements.
insert(position, json);
3545template <
class t_INPUT_ITERATOR>
3548 t_INPUT_ITERATOR first,
3549 t_INPUT_ITERATOR last)
3551 return d_elements.
insert(position, first, last);
3709template <
class t_STRING_TYPE>
3726 d_elements.
resize(count);
3732 d_elements.
resize(count, json);
3739 d_elements.swap(other.d_elements);
3747 return d_elements[index];
3759 return d_elements.
back();
3765 return d_elements.
begin();
3771 return d_elements.
begin();
3777 return d_elements.
end();
3783 return d_elements.
empty();
3789 return d_elements.
end();
3795 return d_elements.
front();
3807 return d_elements.
size();
3823: d_members(basicAllocator)
3830: d_members(original.d_members, basicAllocator)
3845: d_members(basicAllocator)
3849 if (basicAllocator == originalAsLvalue.
allocator()) {
3853 d_members = originalAsLvalue.d_members;
3857template <
class t_INPUT_ITERATOR>
3860 t_INPUT_ITERATOR last,
3862: d_members(first, last, basicAllocator)
3864#ifdef BSLS_ASSERT_IS_ACTIVE
3867 end != itr; ++itr) {
3873#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
3876 std::initializer_list<JsonObject_MemberInitializer>
3879: d_members(basicAllocator)
3881 d_members.
reserve(memberInitializers.size());
3883 for (
const JsonObject_MemberInitializer& memberInitializer :
3884 memberInitializers) {
3887 d_members.
emplace(memberInitializer.key(),
3888 memberInitializer.value());
3897 d_members = rhs.d_members;
3911 d_members = rhsMembers;
3916#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3919 std::initializer_list<JsonObject_MemberInitializer> memberInitializers)
3922 newContainer.reserve(memberInitializers.size());
3924 for (
const JsonObject_MemberInitializer& memberInitializer :
3925 memberInitializers) {
3928 newContainer.emplace(memberInitializer.key(),
3929 memberInitializer.value());
3941 return d_members[key];
3947 return d_members.
begin();
3959 return d_members.
end();
3966 if (it == d_members.
end()) {
3969 d_members.
erase(it);
3976 return d_members.
erase(position);
3982 return d_members.
erase(position);
3988 return d_members.
find(key);
3994 return d_members.
insert(member);
4001#ifdef BSLS_ASSERT_IS_ACTIVE
4008template <
class t_INPUT_ITERATOR>
4015#ifdef BSLS_ASSERT_IS_ACTIVE
4018 end != itr; ++itr) {
4022 d_members.
insert(first, last);
4026#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
4029 JsonObject_MemberInitializer>
4032 for (
const JsonObject_MemberInitializer& memberInitializer :
4033 memberInitializers) {
4036 d_members.
emplace(memberInitializer.key(), memberInitializer.value());
4042template <
class t_VALUE>
4057 d_members.swap(other.d_members);
4078 return d_members.
begin();
4084 return d_members.
cbegin();
4090 return d_members.
cend();
4096 return d_members.
find(key) != d_members.
end();
4102 return d_members.
empty();
4108 return d_members.
end();
4114 return d_members.
find(key);
4120 return d_members.
size();
4135: d_value(
JsonNull(), basicAllocator)
4141: d_value(original.d_value, basicAllocator)
4147: d_value(
bslmf::MovableRefUtil::move(
4148 bslmf::MovableRefUtil::access(original).d_value))
4154: d_value(
bslmf::MovableRefUtil::move(
4155 bslmf::MovableRefUtil::access(original).d_value),
4162: d_value(boolean, basicAllocator)
4168: d_value(null, basicAllocator)
4174: d_value(array, basicAllocator)
4180: d_value(object, basicAllocator)
4186: d_value(number, basicAllocator)
4193: d_value(
bslmf::MovableRefUtil::move(array), basicAllocator)
4200: d_value(
bslmf::MovableRefUtil::move(object), basicAllocator)
4207: d_value(
bslmf::MovableRefUtil::move(number), basicAllocator)
4211#ifdef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
4212template <
class t_JSON_INITIALIZER>
4213Json::Json(
const t_JSON_INITIALIZER& initializer,
4217 Json_Initializer>::value>::type *)
4218: d_value(
JsonNull(), basicAllocator)
4220 initializer.get_storage().
apply(Json_ConstructVisitor(
this));
4280: d_value(basicAllocator)
4288: d_value(basicAllocator)
4294template <
class t_STRING_TYPE>
4300: d_value(
bslmf::MovableRefUtil::move(string), basicAllocator)
4310 d_value = rhs.d_value;
4413template <
class t_STRING_TYPE>
4501 return d_value.
the<
bool>();
4564template <
class t_STRING_TYPE>
4599template <
class t_INPUT_ITERATOR>
4614#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
4628template <
class t_VALUE,
class t_STRING_VIEW>
4647template <
class t_INDEX>
4662template <
class t_INDEX>
4677template <
class t_INDEX,
class t_INPUT_ITERATOR>
4683 t_INPUT_ITERATOR first,
4684 t_INPUT_ITERATOR last)
4710template <
class t_INPUT_ITERATOR>
4713 t_INPUT_ITERATOR first,
4714 t_INPUT_ITERATOR last)
4954template <
class t_STRING_TYPE>
4969template <
class RETURN_TYPE,
class VISITOR>
4976 return Util::invokeVisitor<RETURN_TYPE>(visitor, &
theObject());
4980 return Util::invokeVisitor<RETURN_TYPE>(visitor, &
theArray());
4984#ifdef BSLS_ASSERT_IS_ACTIVE
4987 return Util::invokeVisitor<RETURN_TYPE>(visitor,
4992 return Util::invokeVisitor<RETURN_TYPE>(visitor, &
theNumber());
4996 return Util::invokeVisitor<RETURN_TYPE>(visitor, &
theBoolean());
5000 return Util::invokeVisitor<RETURN_TYPE>(visitor, &
theNull());
5010#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
5011template <
class VISITOR>
5018 return Util::invokeVisitor(visitor, &theObject());
5021 return Util::invokeVisitor(visitor, &theArray());
5024#ifdef BSLS_ASSERT_IS_ACTIVE
5027 return Util::invokeVisitor(visitor, &d_value.
the<
bsl::string>());
5031 return Util::invokeVisitor(visitor, &theNumber());
5034 return Util::invokeVisitor(visitor, &theBoolean());
5037 return Util::invokeVisitor(visitor, &theNull());
5053 d_value.
swap(other.d_value);
5102 return d_value.
the<
bool>();
5123#if defined(BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT)
5131Json::operator
bool &()
5133 return theBoolean();
5137Json::operator JsonNull &()
5143Json::operator JsonNumber &()
5149Json::operator JsonObject &()
5298 return d_value.
the<
bool>();
5344#if defined(BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT)
5352Json::operator
const bool &()
const
5354 return theBoolean();
5358Json::operator
const JsonNull &()
const
5364Json::operator
const JsonNumber &()
const
5370Json::operator
const JsonObject &()
const
5382template <
class RETURN_TYPE,
class VISITOR>
5390 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theObject());
5394 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theArray());
5398 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theString());
5402 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theNumber());
5406 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theBoolean());
5410 return Util::invokeVisitor<RETURN_TYPE>(visitor,
theNull());
5419#ifdef BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY
5420template <
class VISITOR>
5428 return Util::invokeVisitor(visitor, theObject());
5431 return Util::invokeVisitor(visitor, theArray());
5434 return Util::invokeVisitor(visitor, theString());
5437 return Util::invokeVisitor(visitor, theNumber());
5440 return Util::invokeVisitor(visitor, theBoolean());
5443 return Util::invokeVisitor(visitor, theNull());
5457 return d_value.getAllocator();
5467 return object.
print(stream, 0, -1);
5474 return lhs.d_elements ==
rhs.d_elements;
5481 return lhs.d_elements !=
rhs.d_elements;
5494 return object.print(stream, 0, -1);
5501 return lhs.d_members ==
rhs.d_members;
5508 return lhs.d_members !=
rhs.d_members;
5520 JsonObject ta(b, allocA);
5521 JsonObject tb(a, allocB);
5531 return object.print(stream, 0, -1);
5537 return lhs.d_value ==
rhs.d_value;
5543 return lhs.d_value !=
rhs.d_value;
5549 return rhs.isArray() &&
rhs.theArray() ==
lhs;
5555 return rhs.isObject() &&
rhs.theObject() ==
lhs;
5561 return rhs.isNumber() &&
rhs.theNumber() ==
lhs;
5567 return rhs.isNull();
5573 return rhs.isBoolean() &&
rhs.theBoolean() ==
lhs;
5579 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5585 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5591 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5597 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5603 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5609 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5615 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5621 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5627 return rhs.isNumber() &&
rhs.theNumber() == JsonNumber(lhs);
5634 return rhs.isString() &&
rhs.theString() ==
lhs;
5640 return rhs.isString() &&
rhs.theString() ==
lhs;
5646 return lhs.isArray() &&
lhs.theArray() ==
rhs;
5652 return lhs.isObject() &&
lhs.theObject() ==
rhs;
5658 return lhs.isNumber() &&
lhs.theNumber() ==
rhs;
5664 return lhs.isNull();
5670 return lhs.isBoolean() &&
lhs.theBoolean() ==
rhs;
5676 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5682 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5688 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5694 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5700 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5706 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5712 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5718 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5724 return lhs.isNumber() &&
lhs.theNumber() == JsonNumber(rhs);
5731 return lhs.isString() &&
lhs.theString() ==
rhs;
5737 return lhs.isString() &&
lhs.theString() ==
rhs;
5743 return !
rhs.isArray() ||
rhs.theArray() !=
lhs;
5749 return !
rhs.isObject() ||
rhs.theObject() !=
lhs;
5755 return !
rhs.isNumber() ||
rhs.theNumber() !=
lhs;
5761 return !
rhs.isNull();
5767 return !
rhs.isBoolean() ||
rhs.theBoolean() !=
lhs;
5773 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5779 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5785 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5791 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5797 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5803 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5809 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5815 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5821 return !
rhs.isNumber() ||
rhs.theNumber() != JsonNumber(lhs);
5828 return !
rhs.isString() ||
rhs.theString() !=
lhs;
5834 return !
rhs.isString() ||
rhs.theString() !=
lhs;
5840 return !
lhs.isArray() ||
lhs.theArray() !=
rhs;
5846 return !
lhs.isObject() ||
lhs.theObject() !=
rhs;
5852 return !
lhs.isNumber() ||
lhs.theNumber() !=
rhs;
5858 return !
lhs.isNull();
5864 return !
lhs.isBoolean() ||
lhs.theBoolean() !=
rhs;
5870 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5876 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5882 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5888 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5894 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5900 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5906 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5912 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5918 return !
lhs.isNumber() ||
lhs.theNumber() != JsonNumber(rhs);
5925 return !
lhs.isString() ||
lhs.theString() !=
rhs;
5931 return !
lhs.isString() ||
lhs.theString() !=
rhs;
bool is() const
Definition bdlb_variant.h:7725
int typeIndex() const
Definition bdlb_variant.h:7766
bsl::enable_if< Variant_ReturnValueHelper< VISITOR >::value==1, typenameVISITOR::ResultType >::type apply(VISITOR &visitor)
Definition bdlb_variant.h:1544
TYPE & createInPlace(ARGS &&... arguments)
Definition bdlb_variant.h:7574
TYPE & the()
Definition bdlb_variant.h:7637
void swap(VariantImp &other)
Definition bdlb_variant.h:7602
bsl::ostream & print(bsl::ostream &stream, int level=0, int spacesPerLevel=4) const
Definition bdlb_variant.h:7739
Definition bdlb_variant.h:2389
Definition bdldfp_decimal.h:1890
Definition bdljsn_json.h:551
void resize(bsl::size_t count)
Definition bdljsn_json.h:3724
bsl::size_t size() const
Return the number of elements in this JsonArray.
Definition bdljsn_json.h:3805
JsonArray & pushBack(const Json &json)
Definition bdljsn_json.h:3561
friend bool operator==(const JsonArray &, const JsonArray &)
Json & back()
Definition bdljsn_json.h:3446
Elements::size_type size_type
Definition bdljsn_json.h:588
BSLMF_NESTED_TRAIT_DECLARATION(JsonArray, bslma::UsesBslmaAllocator)
Json & front()
Definition bdljsn_json.h:3488
Iterator end()
Definition bdljsn_json.h:3464
Elements::const_reference const_reference
Definition bdljsn_json.h:582
Elements::iterator iterator
Definition bdljsn_json.h:584
bslma::Allocator * allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this object to allocate memory.
Definition bdljsn_json.h:3751
BSLMF_NESTED_TRAIT_DECLARATION(JsonArray, bdlb::HasPrintMethod)
Iterator begin()
Definition bdljsn_json.h:3452
void popBack()
Definition bdljsn_json.h:3555
bool empty() const
Return true if this JsonArray has size 0, and false otherwise.
Definition bdljsn_json.h:3781
JsonArray & assign(t_INPUT_ITERATOR first, t_INPUT_ITERATOR last)
Definition bdljsn_json.h:3430
Iterator erase(bsl::size_t index)
Definition bdljsn_json.h:3470
Elements::iterator Iterator
Definition bdljsn_json.h:577
Elements::const_iterator ConstIterator
Definition bdljsn_json.h:578
void clear()
Definition bdljsn_json.h:3458
ConstIterator cend() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3775
Elements::value_type value_type
Definition bdljsn_json.h:580
BSLMF_NESTED_TRAIT_DECLARATION(JsonArray, bslmf::IsBitwiseMoveable)
friend bool operator!=(const JsonArray &, const JsonArray &)
Elements::difference_type difference_type
Definition bdljsn_json.h:587
JsonArray & operator=(const JsonArray &rhs)
Definition bdljsn_json.h:3397
friend void swap(JsonArray &, JsonArray &)
bsl::size_t maxSize() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3799
Json & operator[](bsl::size_t index)
Definition bdljsn_json.h:3422
JsonArray()
Definition bdljsn_json.h:3335
ConstIterator cbegin() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3769
Elements::const_iterator const_iterator
Definition bdljsn_json.h:585
bsl::enable_if< bsl::is_integral< t_INDEX >::value &&!bsl::is_same< t_INDEX, bool >::value, Iterator >::type insert(t_INDEX index, const Json &json)
Definition bdljsn_json.h:3498
Elements::reference reference
Definition bdljsn_json.h:581
Definition bdljsn_jsonnull.h:121
Definition bdljsn_jsonnumber.h:412
int asUshort(unsigned short *result) const
Definition bdljsn_jsonnumber.h:1051
int asUlong(unsigned long *result) const
Definition bdljsn_jsonnumber.h:1063
int asUlonglong(unsigned long long *result) const
Definition bdljsn_jsonnumber.h:1069
int asUint64(bsls::Types::Uint64 *result) const
Definition bdljsn_jsonnumber.h:1075
int asInt(int *result) const
Definition bdljsn_jsonnumber.h:1027
int asDecimal64Exact(bdldfp::Decimal64 *result) const
Definition bdljsn_jsonnumber.h:1101
float asFloat() const
Definition bdljsn_jsonnumber.h:1081
int asShort(short *result) const
Definition bdljsn_jsonnumber.h:1021
int asInt64(bsls::Types::Int64 *result) const
Definition bdljsn_jsonnumber.h:1045
int asLong(long *result) const
Definition bdljsn_jsonnumber.h:1033
bdldfp::Decimal64 asDecimal64() const
Definition bdljsn_jsonnumber.h:1093
int asUint(unsigned int *result) const
Definition bdljsn_jsonnumber.h:1057
double asDouble() const
Definition bdljsn_jsonnumber.h:1087
int asLonglong(long long *result) const
Definition bdljsn_jsonnumber.h:1039
Definition bdljsn_json.h:1080
Container::value_type Member
Definition bdljsn_json.h:1091
bslma::Allocator * allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this object to allocate memory.
Definition bdljsn_json.h:4070
Json & operator[](const bsl::string_view &key)
Definition bdljsn_json.h:3937
void clear() BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3951
bsl::size_t size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this JsonObject.
Definition bdljsn_json.h:4118
Iterator find(const bsl::string_view &key)
Definition bdljsn_json.h:3986
bool empty() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:4100
Container::const_reference const_reference
Definition bdljsn_json.h:1098
friend bool operator==(const JsonObject &, const JsonObject &)
Iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3957
Container::const_iterator const_iterator
Definition bdljsn_json.h:1101
friend void swap(JsonObject &, JsonObject &)
bsl::pair< Iterator, bool > IteratorAndStatus
Definition bdljsn_json.h:1094
BSLMF_NESTED_TRAIT_DECLARATION(JsonObject, bslmf::IsBitwiseMoveable)
Container::size_type size_type
Definition bdljsn_json.h:1104
JsonObject()
Definition bdljsn_json.h:3816
BSLMF_NESTED_TRAIT_DECLARATION(JsonObject, bdlb::HasPrintMethod)
Container::reference reference
Definition bdljsn_json.h:1097
bsl::size_t erase(const bsl::string_view &key)
Definition bdljsn_json.h:3963
JsonObject & operator=(const JsonObject &rhs)
Definition bdljsn_json.h:3895
bool contains(const bsl::string_view &key) const
Definition bdljsn_json.h:4094
Container::const_iterator ConstIterator
Definition bdljsn_json.h:1092
ConstIterator cbegin() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:4082
Container::iterator iterator
Definition bdljsn_json.h:1100
bsl::pair< Iterator, bool > insert(const Member &member)
Definition bdljsn_json.h:3992
BSLMF_NESTED_TRAIT_DECLARATION(JsonObject, bslma::UsesBslmaAllocator)
Container::difference_type difference_type
Definition bdljsn_json.h:1103
friend bool operator!=(const JsonObject &, const JsonObject &)
Container::value_type value_type
Definition bdljsn_json.h:1096
Container::iterator Iterator
Definition bdljsn_json.h:1093
Iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:3945
ConstIterator cend() const BSLS_KEYWORD_NOEXCEPT
Definition bdljsn_json.h:4088
Definition bdljsn_json.h:3265
~Json_StringInvariantGuard() BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(false)
Definition bdljsn_json.h:3295
Definition bdljsn_json.h:1461
bool isBoolean() const
Definition bdljsn_json.h:5064
int asLonglong(long long *result) const
Definition bdljsn_json.h:5239
BSLMF_NESTED_TRAIT_DECLARATION(Json, bdlb::HasPrintMethod)
int asInt(int *result) const
Definition bdljsn_json.h:5225
bool isObject() const
Definition bdljsn_json.h:5082
int asShort(short *result) const
Definition bdljsn_json.h:5218
JsonNumber & makeNumber()
Definition bdljsn_json.h:4511
int asUlonglong(unsigned long long *result) const
Definition bdljsn_json.h:5274
int asUint(unsigned int *result) const
Definition bdljsn_json.h:5260
BSLMF_NESTED_TRAIT_DECLARATION(Json, bslma::UsesBslmaAllocator)
bool isArray() const
Definition bdljsn_json.h:5058
int asUint64(bsls::Types::Uint64 *result) const
Definition bdljsn_json.h:5281
int asUshort(unsigned short *result) const
Definition bdljsn_json.h:5253
Json & pushBack(const Json &json)
Definition bdljsn_json.h:4723
int asUlong(unsigned long *result) const
Definition bdljsn_json.h:5267
BSLMF_NESTED_TRAIT_DECLARATION(Json, bslmf::IsBitwiseMoveable)
JsonNull & theNull()
Definition bdljsn_json.h:5106
bool contains(const bsl::string_view &key) const
Definition bdljsn_json.h:5181
bdldfp::Decimal64 asDecimal64() const
Definition bdljsn_json.h:5190
void makeString(const char *string)
Definition bdljsn_json.h:4551
double asDouble() const
Definition bdljsn_json.h:5204
friend bool operator==(const Json &, const Json &)
bool isNumber() const
Definition bdljsn_json.h:5076
JsonArray & theArray()
Definition bdljsn_json.h:5094
bool isString() const
Definition bdljsn_json.h:5088
int asDecimal64Exact(bdldfp::Decimal64 *result) const
Definition bdljsn_json.h:5197
friend void swap(Json &, Json &)
JsonNumber & theNumber()
Definition bdljsn_json.h:5112
JsonObject & makeObject()
Definition bdljsn_json.h:4531
bool & makeBoolean()
Definition bdljsn_json.h:4492
Json & operator=(const Json &rhs)
Definition bdljsn_json.h:4308
friend bool operator!=(const Json &, const Json &)
bool isNull() const
Definition bdljsn_json.h:5070
JsonObject & theObject()
Definition bdljsn_json.h:5118
bool & theBoolean()
Definition bdljsn_json.h:5100
bsl::size_t size() const
Definition bdljsn_json.h:5174
JsonType::Enum type() const BSLS_KEYWORD_NOEXCEPT
Return the type of this Json value.
Definition bdljsn_json.h:5326
void makeNull()
Definition bdljsn_json.h:4505
int asLong(long *result) const
Definition bdljsn_json.h:5232
JsonArray & makeArray()
Definition bdljsn_json.h:4472
RETURN_TYPE visit(BSLS_COMPILERFEATURES_FORWARD_REF(VISITOR) visitor)
Definition bdljsn_json.h:4970
float asFloat() const
Definition bdljsn_json.h:5211
const bsl::string & theString() const
Definition bdljsn_json.h:5320
Json()
Definition bdljsn_json.h:4128
int asInt64(bsls::Types::Int64 *result) const
Definition bdljsn_json.h:5246
bsl::pair< JsonObject::Iterator, bool > insert(const JsonObject::Member &member)
Definition bdljsn_json.h:4577
bslma::Allocator * allocator() const BSLS_KEYWORD_NOEXCEPT
Return the allocator used by this object to allocate memory.
Definition bdljsn_json.h:5455
Json & operator[](const bsl::string_view &key)
Definition bdljsn_json.h:5156
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
Definition bslstl_pair.h:1280
Definition bslstl_unorderedmap.h:1123
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, iterator >::type find(const LOOKUP_KEY &key)
Definition bslstl_unorderedmap.h:1860
const_iterator cbegin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3886
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this unordered map.
Definition bslstl_unorderedmap.h:4078
AllocatorTraits::size_type size_type
Definition bslstl_unorderedmap.h:1227
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3386
value_type & reference
Definition bslstl_unorderedmap.h:1224
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4037
void reserve(size_type numElements)
Definition bslstl_unorderedmap.h:3694
pair< iterator, bool > insert(const value_type &value)
Definition bslstl_unorderedmap.h:3543
iterator erase(const_iterator position)
Definition bslstl_unorderedmap.h:3466
pair< iterator, bool > emplace(Args &&... args)
const value_type & const_reference
Definition bslstl_unorderedmap.h:1225
const_iterator cend() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3895
void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3414
AllocatorTraits::difference_type difference_type
Definition bslstl_unorderedmap.h:1228
iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3377
BloombergLP::bslstl::HashTableIterator< const value_type, difference_type > const_iterator
Definition bslstl_unorderedmap.h:1235
bool empty() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3996
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this vector.
Definition bslstl_vector.h:3019
iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_vector.h:2866
reference back()
Definition bslstl_vector.h:2932
VALUE_TYPE const * const_iterator
Definition bslstl_vector.h:944
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_vector.h:2874
bool empty() const BSLS_KEYWORD_NOEXCEPT
Return true if this vector has size 0, and false otherwise.
Definition bslstl_vector.h:3034
reference front()
Definition bslstl_vector.h:2922
Definition bslstl_vector.h:1120
Json & reference
Definition bslstl_vector.h:1144
const Json & const_reference
Definition bslstl_vector.h:1145
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_vector.h:4621
Json value_type
Definition bslstl_vector.h:1142
iterator insert(const_iterator position, const VALUE_TYPE &value)
Definition bslstl_vector.h:4386
AllocatorTraits::size_type size_type
Definition bslstl_vector.h:1147
VALUE_TYPE & emplace_back(Args &&... arguments)
Definition bslstl_vector.h:4324
void push_back(const VALUE_TYPE &value)
Definition bslstl_vector.h:4343
Json * iterator
Definition bslstl_vector.h:1152
AllocatorTraits::difference_type difference_type
Definition bslstl_vector.h:1148
iterator erase(const_iterator position)
Definition bslstl_vector.h:4538
size_type max_size() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_vector.h:4631
void swap(vector &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_vector.h:1938
void resize(size_type newSize)
Definition bslstl_vector.h:4189
void pop_back()
Definition bslstl_vector.h:4375
vector &operator=(BloombergLP::bslmf::MovableRef< vector< VALUE_TYPE, ALLOCATOR > > rhs) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits void assign(INPUT_ITER first, INPUT_ITER last)
static void swap(T *a, T *b)
Definition bslalg_swaputil.h:182
Definition bslma_allocator.h:545
Definition bslmf_movableref.h:752
#define BSLA_UNREACHABLE
Definition bsla_unreachable.h:159
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLMF_MOVABLEREF_DEDUCE(...)
Definition bslmf_movableref.h:691
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_OPT(X)
Definition bsls_assert.h:2045
#define BSLS_ASSERT_OPT_UNREACHABLE(X)
Definition bsls_assert.h:2065
#define BSLS_ASSERT_INVOKE_NORETURN(X)
Definition bsls_assert.h:2101
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(...)
Definition bsls_keyword.h:676
void swap(OptionValue &a, OptionValue &b)
Definition bdldfp_decimal.h:747
Decimal_Type64 Decimal64
Definition bdldfp_decimal.h:750
Definition bdljsn_error.h:142
bool operator!=(const Error &lhs, const Error &rhs)
void swap(Error &a, Error &b)
bool operator==(const Error &lhs, const Error &rhs)
bsl::ostream & operator<<(bsl::ostream &stream, const Error &object)
Definition bdlat_valuetypefunctions.h:939
int uncaught_exceptions()
basic_string_view< char > string_view
Definition bslstl_stringview.h:1253
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
ALLOCATOR & lhs
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
basic_string< char > string
Definition bslstl_string.h:844
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
Definition bdlb_printmethods.h:306
Definition bdlb_transparentequalto.h:127
Definition bdlb_transparenthash.h:167
static bool isValid(const char *string)
Definition bdlde_utf8util.h:1069
Enum
Definition bdljsn_jsontype.h:129
@ e_STRING
Definition bdljsn_jsontype.h:132
@ e_BOOLEAN
Definition bdljsn_jsontype.h:134
@ e_ARRAY
Definition bdljsn_jsontype.h:131
@ e_NULL
Definition bdljsn_jsontype.h:135
@ e_OBJECT
Definition bdljsn_jsontype.h:130
@ e_NUMBER
Definition bdljsn_jsontype.h:133
Definition bdljsn_json.h:3143
Definition bslmf_enableif.h:530
Definition bslmf_isconvertible.h:875
Definition bslmf_isintegral.h:140
Definition bslmf_issame.h:146
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisemoveable.h:718
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039
Definition bslmf_nil.h:133
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134