58template<
typename BasicJsonContext>
60 std::integral_constant < bool,
61 is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value
62 || std::is_same<BasicJsonContext, std::nullptr_t>::value >
103template<
typename T,
typename... Args>
106template<
typename T,
typename... Args>
109template<
typename T,
typename U>
113template<
typename BasicJsonType,
typename T,
typename =
void>
120template <
typename BasicJsonType,
typename T>
126template<
typename BasicJsonType,
typename T>
129 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
133 const BasicJsonType&, T&>
::value;
138template<
typename BasicJsonType,
typename T,
typename =
void>
141template<
typename BasicJsonType,
typename T>
144 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
153template<
typename BasicJsonType,
typename T,
typename =
void>
156template<
typename BasicJsonType,
typename T>
159 using serializer =
typename BasicJsonType::template json_serializer<T, void>;
170struct has_key_compare : std::integral_constant<bool, is_detected<detect_key_compare, T>::value> {};
173template<
typename BasicJsonType>
178 using type =
typename std::conditional < has_key_compare<object_t>::value,
182template<
typename BasicJsonType>
249template<
class B,
class... Bn>
251: std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type {};
254template<
class B>
struct negation : std::integral_constant < bool, !B::value > { };
262template <
typename T1,
typename T2>
264 :
conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
266template <
typename T1,
typename T2>
268 :
conjunction<is_default_constructible<T1>, is_default_constructible<T2>> {};
270template <
typename... Ts>
274template <
typename... Ts>
278template <
typename T,
typename... Args>
281template <
typename T1,
typename T2>
284template <
typename T1,
typename T2>
287template <
typename... Ts>
290template <
typename... Ts>
293template<
typename T,
typename =
void>
315 using t_ref =
typename std::add_lvalue_reference<T>::type;
323 static constexpr auto is_iterator_begin =
327 static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
340template<
typename T,
typename =
void>
346template<
typename BasicJsonType,
typename CompatibleObjectType,
350template<
typename BasicJsonType,
typename CompatibleObjectType>
352 BasicJsonType, CompatibleObjectType,
361 typename CompatibleObjectType::key_type>
::value &&
363 typename CompatibleObjectType::mapped_type>
::value;
366template<
typename BasicJsonType,
typename CompatibleObjectType>
370template<
typename BasicJsonType,
typename ConstructibleObjectType,
374template<
typename BasicJsonType,
typename ConstructibleObjectType>
376 BasicJsonType, ConstructibleObjectType,
384 (std::is_move_assignable<ConstructibleObjectType>::value ||
385 std::is_copy_assignable<ConstructibleObjectType>::value) &&
387 typename object_t::key_type>
::value &&
389 typename object_t::mapped_type,
390 typename ConstructibleObjectType::mapped_type >
::value)) ||
392 typename ConstructibleObjectType::mapped_type>
::value ||
395 typename ConstructibleObjectType::mapped_type >
::value);
398template<
typename BasicJsonType,
typename ConstructibleObjectType>
401 ConstructibleObjectType> {};
403template<
typename BasicJsonType,
typename CompatibleStringType>
410template<
typename BasicJsonType,
typename ConstructibleStringType>
414#ifdef __INTEL_COMPILER
415 using laundered_type =
decltype(std::declval<ConstructibleStringType>());
427template<
typename BasicJsonType,
typename CompatibleArrayType,
typename =
void>
430template<
typename BasicJsonType,
typename CompatibleArrayType>
432 BasicJsonType, CompatibleArrayType,
438 !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>
::value >>
445template<
typename BasicJsonType,
typename CompatibleArrayType>
449template<
typename BasicJsonType,
typename ConstructibleArrayType,
typename =
void>
452template<
typename BasicJsonType,
typename ConstructibleArrayType>
454 BasicJsonType, ConstructibleArrayType,
456 typename BasicJsonType::value_type>
::value >>
459template<
typename BasicJsonType,
typename ConstructibleArrayType>
461 BasicJsonType, ConstructibleArrayType,
463 typename BasicJsonType::value_type>
::value&&
466(std::is_move_assignable<ConstructibleArrayType>::value ||
467 std::is_copy_assignable<ConstructibleArrayType>::value)&&
473!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>
::value&&
475 detected_t<range_value_t, ConstructibleArrayType >>
::value >>
481 typename BasicJsonType::array_t::value_type>
::value ||
489template<
typename BasicJsonType,
typename ConstructibleArrayType>
493template<
typename RealIntegerType,
typename CompatibleNumberIntegerType,
497template<
typename RealIntegerType,
typename CompatibleNumberIntegerType>
499 RealIntegerType, CompatibleNumberIntegerType,
501 std::is_integral<CompatibleNumberIntegerType>
::value&&
502 !std::is_same<bool, CompatibleNumberIntegerType>
::value >>
510 CompatibleNumberIntegerType>
::value &&
511 CompatibleLimits::is_integer &&
512 RealLimits::is_signed == CompatibleLimits::is_signed;
515template<
typename RealIntegerType,
typename CompatibleNumberIntegerType>
518 CompatibleNumberIntegerType> {};
520template<
typename BasicJsonType,
typename CompatibleType,
typename =
void>
523template<
typename BasicJsonType,
typename CompatibleType>
525 BasicJsonType, CompatibleType,
532template<
typename BasicJsonType,
typename CompatibleType>
536template<
typename T1,
typename T2>
539template<
typename T1,
typename... Args>
542template<
typename BasicJsonType,
typename T>
545template<
typename BasicJsonType>
548template<
typename BasicJsonType>
553template<
template <
typename...>
class Primary,
typename T>
556template<
template <
typename...>
class Primary,
typename... Args>
563template<
typename Compare,
typename A,
typename B,
typename =
void>
566template<
typename Compare,
typename A,
typename B>
568decltype(
std::declval<Compare>()(std::declval<A>(), std::declval<B>())),
569decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))
570>> : std::true_type {};
577template<
typename Comparator,
typename ObjectKeyType,
typename KeyTypeCVRef,
bool RequireTransparentComparator =
true,
581 && !(ExcludeObjectKeyType && std::is_same<KeyType,
583 && (!RequireTransparentComparator
584 || is_detected <detect_is_transparent, Comparator>::value)
595template<
typename BasicJsonType,
typename KeyTypeCVRef,
bool RequireTransparentComparator =
true,
599 typename BasicJsonType::object_t::key_type, KeyTypeCVRef,
600 RequireTransparentComparator, ExcludeObjectKeyType>
::value
605template<
typename ObjectType,
typename KeyType>
609template<
typename BasicJsonType,
typename KeyType>
613 typename BasicJsonType::object_t, KeyType >
::value,
629 template <
typename C>
static one test(
decltype(&C::capacity) ) ;
636template < typename T, typename U, enable_if_t < !std::is_same<T, U>::value,
int > = 0 >
639 return static_cast<T
>(
value);
642template<typename T, typename U, enable_if_t<std::is_same<T, U>::value,
int> = 0>
648template<
typename... Types>
651template<
typename... Types>
654template<
typename... Types>
658template<
typename... Types>
662template<
typename OfType,
typename T>
664 (std::is_signed<OfType>::value && (
sizeof(T) <
sizeof(OfType)))
667template<
typename OfType,
typename T,
668 bool OfTypeSigned = std::is_signed<OfType>::value,
669 bool TSigned = std::is_signed<T>::value>
672template<
typename OfType,
typename T>
675 static constexpr bool test(T val)
677 using CommonType =
typename std::common_type<OfType, T>::type;
678 return static_cast<CommonType
>(val) <=
static_cast<CommonType
>((std::numeric_limits<OfType>::max)());
682template<
typename OfType,
typename T>
685 static constexpr bool test(T val)
687 using CommonType =
typename std::common_type<OfType, T>::type;
688 return static_cast<CommonType
>(val) <=
static_cast<CommonType
>((std::numeric_limits<OfType>::max)());
692template<
typename OfType,
typename T>
695 static constexpr bool test(T val)
697 using CommonType =
typename std::common_type<OfType, T>::type;
698 return val >= 0 &&
static_cast<CommonType
>(val) <=
static_cast<CommonType
>((std::numeric_limits<OfType>::max)());
702template<
typename OfType,
typename T>
705 static constexpr bool test(T val)
707 using CommonType =
typename std::common_type<OfType, T>::type;
708 return static_cast<CommonType
>(val) >=
static_cast<CommonType
>((std::numeric_limits<OfType>::min)())
709 &&
static_cast<CommonType
>(val) <=
static_cast<CommonType
>((std::numeric_limits<OfType>::max)());
713template<
typename OfType,
typename T,
714 bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
718template<
typename OfType,
typename T>
721 static constexpr bool test(T val)
727template<
typename OfType,
typename T>
736template<
typename OfType,
typename T>
755 using TUnExt =
typename std::remove_extent<T>::type;
756 using TUnCVExt =
typename std::remove_cv<TUnExt>::type;
757 using TUnPtr =
typename std::remove_pointer<T>::type;
758 using TUnCVPtr =
typename std::remove_cv<TUnPtr>::type;
760 (std::is_array<T>::value && std::is_same<TUnCVExt, char>::value)
761 || (std::is_pointer<T>::value && std::is_same<TUnCVPtr, char>::value);
#define WPI_JSON_NAMESPACE_END
Definition abi_macros.h:59
#define WPI_JSON_NAMESPACE_BEGIN
Definition abi_macros.h:53
#define WPI_BASIC_JSON_TPL_DECLARATION
Definition macro_scope.h:244
#define WPI_BASIC_JSON_TPL
Definition macro_scope.h:254
constexpr bool is_transparent()
Definition type_traits.h:781
constexpr bool is_c_string()
Definition type_traits.h:753
detail namespace with internal helper functions
Definition input_adapters.h:32
std::integral_constant< bool,(std::is_signed< OfType >::value &&(sizeof(T)< sizeof(OfType)))||(same_sign< OfType, T >::value &&sizeof(OfType)==sizeof(T)) > never_out_of_range
Definition type_traits.h:663
typename detector< nonesuch, void, Op, Args... >::type detected_t
Definition detected.h:54
decltype(T::to_json(std::declval< Args >()...)) to_json_function
Definition type_traits.h:104
typename T::value_type value_type_t
Definition type_traits.h:89
std::is_same< Expected, detected_t< Op, Args... > > is_detected_exact
Definition detected.h:63
typename std::enable_if< B, T >::type enable_if_t
Definition cpp_future.h:38
@ value
the parser finished reading a JSON value
std::integral_constant< bool, all_signed< Types... >::value||all_unsigned< Types... >::value > same_sign
Definition type_traits.h:659
typename detector< nonesuch, void, Op, Args... >::value_t is_detected
Definition detected.h:48
typename std::conditional< is_comparable< Comparator, ObjectKeyType, KeyTypeCVRef >::value &&!(ExcludeObjectKeyType &&std::is_same< KeyType, ObjectKeyType >::value) &&(!RequireTransparentComparator||is_detected< detect_is_transparent, Comparator >::value) &&!is_json_pointer< KeyType >::value, std::true_type, std::false_type >::type is_usable_as_key_type
Definition type_traits.h:579
typename T::pointer pointer_t
Definition type_traits.h:95
T conditional_static_cast(U value)
Definition type_traits.h:637
typename T::difference_type difference_type_t
Definition type_traits.h:92
typename std::conditional< is_detected< detect_erase_with_key_type, typename BasicJsonType::object_t, KeyType >::value, std::true_type, std::false_type >::type has_erase_with_key_type
Definition type_traits.h:610
typename actual_object_comparator< BasicJsonType >::type actual_object_comparator_t
Definition type_traits.h:183
decltype(std::declval< ObjectType & >().erase(std::declval< KeyType >())) detect_erase_with_key_type
Definition type_traits.h:606
value_type_t< iterator_traits< iterator_t< T > > > range_value_t
Definition type_traits.h:334
auto get(const wpi::detail::iteration_proxy_value< IteratorType > &i) -> decltype(i.key())
Definition iteration_proxy.h:193
constexpr bool value_in_range_of(T val)
Definition type_traits.h:737
decltype(T::from_json(std::declval< Args >()...)) from_json_function
Definition type_traits.h:107
typename make_void< Ts... >::type void_t
Definition void_t.h:21
enable_if_t< is_range< R >::value, result_of_begin< decltype(std::declval< R & >())> > iterator_t
Definition type_traits.h:331
typename T::iterator_category iterator_category_t
Definition type_traits.h:101
typename std::conditional< is_usable_as_key_type< typename BasicJsonType::object_comparator_t, typename BasicJsonType::object_t::key_type, KeyTypeCVRef, RequireTransparentComparator, ExcludeObjectKeyType >::value &&!is_json_iterator_of< BasicJsonType, KeyType >::value, std::true_type, std::false_type >::type is_usable_as_basic_json_key_type
Definition type_traits.h:597
std::integral_constant< bool, Value > bool_constant
Definition type_traits.h:743
typename std::remove_cv< typename std::remove_reference< T >::type >::type uncvref_t
Definition cpp_future.h:24
typename T::key_compare detect_key_compare
Definition type_traits.h:167
type
Definition base.h:937
typename T::key_type key_type_t
Definition type_traits.h:86
typename T::reference reference_t
Definition type_traits.h:98
typename T::is_transparent detect_is_transparent
Definition type_traits.h:573
typename T::mapped_type mapped_type_t
Definition type_traits.h:83
decltype(std::declval< T >().template get< U >()) get_template_function
Definition type_traits.h:110
Implement std::hash so that hash_code can be used in STL containers.
Definition PointerIntPair.h:280
Definition type_traits.h:175
typename BasicJsonType::object_t object_t
Definition type_traits.h:176
typename BasicJsonType::default_object_comparator_t object_comparator_t
Definition type_traits.h:177
typename std::conditional< has_key_compare< object_t >::value, typename object_t::key_compare, object_comparator_t >::type type
Definition type_traits.h:178
signed char char_type
Definition type_traits.h:222
static constexpr int_type eof() noexcept
Definition type_traits.h:236
uint64_t int_type
Definition type_traits.h:223
static char_type to_char_type(int_type i) noexcept
Definition type_traits.h:231
static int_type to_int_type(char_type c) noexcept
Definition type_traits.h:226
static char_type to_char_type(int_type i) noexcept
Definition type_traits.h:207
static constexpr int_type eof() noexcept
Definition type_traits.h:212
unsigned char char_type
Definition type_traits.h:198
uint64_t int_type
Definition type_traits.h:199
static int_type to_int_type(char_type c) noexcept
Definition type_traits.h:202
Definition type_traits.h:192
Definition type_traits.h:247
typename BasicJsonType::template json_serializer< T, void > serializer
Definition type_traits.h:129
Definition type_traits.h:114
Definition type_traits.h:170
typename BasicJsonType::template json_serializer< T, void > serializer
Definition type_traits.h:144
Definition type_traits.h:139
typename BasicJsonType::template json_serializer< T, void > serializer
Definition type_traits.h:159
Definition type_traits.h:154
Definition type_traits.h:63
Definition type_traits.h:50
Definition type_traits.h:768
Definition type_traits.h:564
Definition type_traits.h:428
Definition type_traits.h:447
std::numeric_limits< RealIntegerType > RealLimits
Definition type_traits.h:505
std::numeric_limits< CompatibleNumberIntegerType > CompatibleLimits
Definition type_traits.h:506
Definition type_traits.h:495
Definition type_traits.h:518
typename BasicJsonType::object_t object_t
Definition type_traits.h:356
Definition type_traits.h:348
Definition type_traits.h:368
Definition type_traits.h:405
Definition type_traits.h:521
Definition type_traits.h:534
Definition type_traits.h:341
detail::is_constructible_array_type_impl< BasicJsonType, ConstructibleArrayType, enable_if_t< !std::is_same< ConstructibleArrayType, typename BasicJsonType::value_type >::value &&!is_compatible_string_type< BasicJsonType, ConstructibleArrayType >::value &&is_default_constructible< ConstructibleArrayType >::value &&(std::is_move_assignable< ConstructibleArrayType >::value||std::is_copy_assignable< ConstructibleArrayType >::value)&&is_detected< iterator_t, ConstructibleArrayType >::value &&is_iterator_traits< iterator_traits< detected_t< iterator_t, ConstructibleArrayType > > >::value &&is_detected< range_value_t, ConstructibleArrayType >::value &&!std::is_same< ConstructibleArrayType, detected_t< range_value_t, ConstructibleArrayType > >::value &&is_complete_type< detected_t< range_value_t, ConstructibleArrayType > >::value > >::value_type range_value_t< ConstructibleArrayType > value_type
Definition type_traits.h:477
Definition type_traits.h:450
Definition type_traits.h:491
typename BasicJsonType::object_t object_t
Definition type_traits.h:380
Definition type_traits.h:372
Definition type_traits.h:401
Definition type_traits.h:412
ConstructibleStringType laundered_type
Definition type_traits.h:417
static constexpr auto value
Definition type_traits.h:420
Definition type_traits.h:537
Definition type_traits.h:279
Definition type_traits.h:260
Definition type_traits.h:122
Definition type_traits.h:294
Definition type_traits.h:543
Definition type_traits.h:73
Definition type_traits.h:625
char x[2]
Definition type_traits.h:626
Definition type_traits.h:621
static one test(decltype(&C::capacity))
char one
Definition type_traits.h:622
Definition type_traits.h:313
static constexpr bool value
Definition type_traits.h:327
Definition type_traits.h:554
Definition type_traits.h:790
Definition iterator_traits.h:41
Definition type_traits.h:254
static constexpr bool test(T val)
Definition type_traits.h:721
static constexpr bool test(T)
Definition type_traits.h:730
Definition type_traits.h:716
static constexpr bool test(T val)
Definition type_traits.h:675
static constexpr bool test(T val)
Definition type_traits.h:695
static constexpr bool test(T val)
Definition type_traits.h:685
static constexpr bool test(T val)
Definition type_traits.h:705
Definition type_traits.h:670