DAW JSON Link
Classes | Namespaces | Macros | Typedefs | Functions | Variables
daw_json_parse_common.h File Reference
#include "version.h"
#include "daw_json_assert.h"
#include "daw_json_enums.h"
#include "daw_json_exec_modes.h"
#include "daw_json_name.h"
#include "daw_json_option_bits.h"
#include "daw_json_traits.h"
#include "daw_json_type_options.h"
#include <daw/daw_arith_traits.h>
#include <daw/daw_cpp_feature_check.h>
#include <daw/daw_fwd_pack_apply.h>
#include <daw/daw_move.h>
#include <daw/daw_parser_helper_sv.h>
#include <daw/daw_scope_guard.h>
#include <daw/daw_string_view.h>
#include <daw/daw_traits.h>
#include <ciso646>
#include <cstddef>
#include <iterator>
#include <string>
#include <string_view>
#include <vector>

Go to the source code of this file.

Classes

struct  daw::json::DAW_JSON_VER::json_details::basic_appender< Container >
 
struct  daw::json::DAW_JSON_VER::json_details::construct_value_tp_invoke_t< Constructor >
 
struct  daw::json::DAW_JSON_VER::json_details::json_class_map_type< JsonType >
 
struct  daw::json::DAW_JSON_VER::json_details::json_deduced_type_map< typename, typename >
 
struct  daw::json::DAW_JSON_VER::json_details::json_deduced_type_map< bool >
 
struct  daw::json::DAW_JSON_VER::json_details::json_deduced_type_map< daw::string_view >
 
struct  daw::json::DAW_JSON_VER::json_details::json_link_quick_map_type< Mapped, Found >
 
struct  daw::json::DAW_JSON_VER::json_details::json_type_deducer< T, Contract, JsonType, QuickMap, Container >
 
struct  daw::json::DAW_JSON_VER::json_details::json_type_deducer< T, false, false, false, true >
 
struct  daw::json::DAW_JSON_VER::json_details::json_type_deducer< T, false, false, true, Container >
 
struct  daw::json::DAW_JSON_VER::json_details::json_type_deducer< T, false, true, QuickMap, Container >
 
struct  daw::json::DAW_JSON_VER::json_details::json_type_deducer< T, true, JsonType, QuickMap, Container >
 
struct  daw::json::DAW_JSON_VER::json_details::vector_detect::vector_test< T >::not_vector
 
struct  daw::json::DAW_JSON_VER::json_details::vector_detect::vector_test< T >
 

Namespaces

 daw
 
 daw::json
 
 daw::json::DAW_JSON_VER
 
 daw::json::DAW_JSON_VER::json_base
 
 daw::json::DAW_JSON_VER::json_details
 
 daw::json::DAW_JSON_VER::json_details::container_detect
 
 daw::json::DAW_JSON_VER::json_details::vector_detect
 

Macros

#define CPP20CONSTEXPR
 

Typedefs

template<typename T >
using daw::json::DAW_JSON_VER::json_details::can_deref = typename std::bool_constant< daw::is_detected_v< dereffed_type_impl, T > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::cant_deref = daw::not_trait< can_deref< T > >
 
template<typename Container >
using daw::json::DAW_JSON_VER::json_details::container_detect::container_begin_type = decltype(std::begin(std::declval< Container const & >()))
 
template<typename Container >
using daw::json::DAW_JSON_VER::json_details::container_detect::container_end_type = decltype(std::end(std::declval< Container const & >()))
 
template<typename AssociativeContainer >
using daw::json::DAW_JSON_VER::json_details::container_detect::container_key_type = typename AssociativeContainer::key_type
 
template<typename AssociativeContainer >
using daw::json::DAW_JSON_VER::json_details::container_detect::container_mapped_type = typename AssociativeContainer::mapped_type
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::container_detect::container_value_type = typename T::value_type
 
template<typename JsonMember >
using daw::json::DAW_JSON_VER::json_details::dependent_member_t = typename JsonMember::dependent_member
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::dereffed_type = typename daw::detected_or< T, dereffed_type_impl, T >::type
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::dereffed_type_impl = daw::remove_cvref_t< decltype(*(std::declval< T & >()))>
 
template<typename Container , typename Value >
using daw::json::DAW_JSON_VER::json_details::detect_insert_end = decltype(std::declval< Container & >().insert(std::end(std::declval< Container & >()), std::declval< Value >()))
 
template<typename Container , typename Value >
using daw::json::DAW_JSON_VER::json_details::detect_push_back = decltype(std::declval< Container & >().push_back(std::declval< Value >()))
 
template<typename JsonMember >
using daw::json::DAW_JSON_VER::json_details::from_json_result_t = json_result< json_deduced_type< JsonMember > >
 
template<typename Allocator >
using daw::json::DAW_JSON_VER::json_details::has_allocate_test = decltype(std::declval< Allocator & >().allocate(size_t{ 1 }))
 
template<typename Allocator >
using daw::json::DAW_JSON_VER::json_details::has_deallocate_test = decltype(std::declval< Allocator & >().deallocate(static_cast< void * >(nullptr), size_t{ 1 }))
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::has_json_data_contract_trait = not_trait< std::is_same< missing_json_data_contract_for< T >, json_data_contract_trait_t< T > >>
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::has_json_deduced_type = daw::not_trait< std::is_same< json_deduced_type< T >, missing_json_data_contract_for< T > >>
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::has_json_link_quick_map = decltype(json_link_quick_map< T >())
 
template<typename AssociativeContainer >
using daw::json::DAW_JSON_VER::json_details::is_associative_container = std::conjunction< is_container< AssociativeContainer >, daw::is_detected< container_detect::container_key_type, AssociativeContainer >, daw::is_detected< container_detect::container_mapped_type, AssociativeContainer > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::is_container = std::conjunction< daw::is_detected< container_detect::container_value_type, T >, daw::is_detected< container_detect::container_begin_type, T >, daw::is_detected< container_detect::container_end_type, T > >
 
template<typename JsonType >
using daw::json::DAW_JSON_VER::json_details::is_json_class_map_test = typename JsonType::json_member
 
template<typename JsonType >
using daw::json::DAW_JSON_VER::json_details::is_json_nullable = std::bool_constant< JsonType::expected_type==JsonParseTypes::Null >
 
template<typename String >
using daw::json::DAW_JSON_VER::json_details::is_string = std::conjunction< is_container< String >, container_detect::is_value_type_char< String > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::is_submember_tagged_variant_t = typename json_data_contract< T >::type::i_am_a_submember_tagged_variant
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::container_detect::is_value_type_char = std::is_same< char, container_value_type< T > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::is_vector = std::bool_constant< vector_detect::vector_test< T >::value >
 
template<typename JsonElement , typename Container , typename Constructor = nullable_constructor<Container>>
using daw::json::DAW_JSON_VER::json_base::json_array_null = json_array< JsonElement, Container, Constructor, JsonNullDefault >
 
template<typename JsonMember >
using daw::json::DAW_JSON_VER::json_details::json_base_type = typename JsonMember::base_type
 
template<typename T , json_details::json_options_t Options = bool_opts_def, typename Constructor = nullable_constructor<T>>
using daw::json::DAW_JSON_VER::json_base::json_bool_null = json_bool< T, json_details::bool_opts_set< Options, JsonNullDefault >, Constructor >
 
template<typename T , typename Constructor = nullable_constructor<T>, json_details::json_options_t Options = class_opts_def>
using daw::json::DAW_JSON_VER::json_base::json_class_null = json_class< T, Constructor, json_details::class_opts_set< Options, JsonNullDefault > >
 
template<typename Constructor , typename... Members>
using daw::json::DAW_JSON_VER::json_details::json_class_parse_result_impl = daw::detected_t< json_class_parse_result_impl2, Constructor, Members... >
 
template<typename Constructor , typename... Members>
using daw::json::DAW_JSON_VER::json_details::json_class_parse_result_impl2 = decltype(Constructor{ }(std::declval< typename Members::parse_to_t && >()...))
 
template<typename Constructor , typename... Members>
using daw::json::DAW_JSON_VER::json_details::json_class_parse_result_t = daw::remove_cvref_t< json_class_parse_result_impl< Constructor, Members... > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::json_deduced_type = typename json_type_deducer< T, has_json_data_contract_trait_v< T >, json_details::is_a_json_type_v< T >, has_json_link_quick_map_v< T >, is_container_v< T > >::type
 
template<typename Container , typename JsonValueType , typename JsonKeyType , typename Constructor = nullable_constructor<Container>>
using daw::json::DAW_JSON_VER::json_base::json_key_value_null = json_key_value< Container, JsonValueType, JsonKeyType, Constructor, JsonNullDefault >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::json_link_quick_map_t = typename decltype(json_link_quick_map< T >())::mapped_type
 
template<typename T , json_details::json_options_t Options = number_opts_def, typename Constructor = nullable_constructor<T>>
using daw::json::DAW_JSON_VER::json_base::json_number_null = json_number< T, json_details::number_opts_set< Options, JsonNullDefault >, Constructor >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::json_parser_to_json_data_t = decltype(json_data_contract< T >::to_json_data(std::declval< T & >()))
 
template<typename T , typename Constructor = nullable_constructor<T>>
using daw::json::DAW_JSON_VER::json_base::json_raw_null = json_raw< T, Constructor, JsonNullDefault >
 
template<typename JsonMember >
using daw::json::DAW_JSON_VER::json_details::json_result = typename JsonMember::parse_to_t
 
template<typename T , json_details::json_options_t Options = string_opts_def, typename Constructor = nullable_constructor<T>>
using daw::json::DAW_JSON_VER::json_base::json_string_null = json_string< T, json_details::string_opts_set< Options, JsonNullDefault >, Constructor >
 
template<typename T , json_details::json_options_t Options = string_raw_opts_def, typename Constructor = nullable_constructor<T>>
using daw::json::DAW_JSON_VER::json_base::json_string_raw_null = json_string_raw< T, json_details::string_raw_opts_set< Options, JsonNullDefault >, Constructor >
 
template<typename Tuple , typename Constructor = nullable_constructor<Tuple>, json_details::json_options_t Options = class_opts_def>
using daw::json::DAW_JSON_VER::json_base::json_tuple_null = json_tuple< Tuple, Constructor, json_details::tuple_opts_set< Options, JsonNullDefault > >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::ordered_member_subtype_t = typename daw::detected_or_t< T, ordered_member_subtype_test, T >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::ordered_member_subtype_test = typename T::json_member
 
template<typename T , JsonNullable Nullable>
using daw::json::DAW_JSON_VER::json_details::unwrap_type = typename std::conditional_t< is_nullable_json_value_v< Nullable >, dereffed_type< T >, T >
 
template<typename T >
using daw::json::DAW_JSON_VER::json_details::vector_detect::vector_test_t = typename vector_test< T >::type
 

Functions

template<typename Value , typename Constructor , typename ParseState , typename... Args>
static constexpr DAW_ATTRIB_FLATINLINE auto daw::json::DAW_JSON_VER::json_details::construct_value (template_params< Value, Constructor >, ParseState &parse_state, Args &&...args)
 
template<typename Value , typename Constructor , typename ParseState , typename... Args>
static constexpr DAW_ATTRIB_FLATINLINE auto daw::json::DAW_JSON_VER::json_details::construct_value_tp (ParseState &parse_state, fwd_pack< Args... > &&tp_args)
 
template<typename T >
constexpr auto daw::json::DAW_JSON_VER::json_details::json_link_quick_map ()
 
template<typename T >
constexpr auto daw::json::DAW_JSON_VER::json_details::number_parse_type_test () -> std::enable_if_t< std::is_enum< T >::value, JsonParseTypes >
 

Variables

template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::bool_opts_set
 
template<typename Constructor , typename... Members>
constexpr bool daw::json::DAW_JSON_VER::json_details::can_defer_construction_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::can_deref_v = can_deref<T>::value
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::class_opts_set
 
template<typename Constructor >
constexpr auto daw::json::DAW_JSON_VER::json_details::construct_value_tp_invoke
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::container_detect::container_detect_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_deduced_type_mapping_v
 
template<typename JsonMember >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_dependent_member_v
 
template<typename Container , typename Value >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_insert_end_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_json_data_contract_trait_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_json_link_quick_map_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_json_to_json_data_v
 
template<typename Container , typename Value >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_push_back_v
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::has_unnamed_default_type_mapping_v
 
template<typename Allocator >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_allocator_v
 
template<typename AssociativeContainer >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_associative_container_v
 
template<typename Container >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_container_v = is_container<Container>::value
 
template<typename JsonType >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_json_class_map_v
 
template<typename JsonType >
static constexpr bool daw::json::DAW_JSON_VER::json_details::is_json_nullable_v
 
template<typename String >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_string_v = is_string<String>::value
 
template<typename T >
constexpr bool daw::json::DAW_JSON_VER::json_details::is_submember_tagged_variant_v
 
template<typename T , typename Default >
constexpr auto daw::json::DAW_JSON_VER::json_details::json_class_constructor
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::json_custom_opts_set
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::number_opts_set
 
template<typename T >
constexpr JsonParseTypes daw::json::DAW_JSON_VER::json_details::number_parse_type_impl_v
 
template<typename T >
constexpr JsonParseTypes daw::json::DAW_JSON_VER::json_details::number_parse_type_v = number_parse_type_test<T>( )
 
template<typename >
constexpr std::size_t daw::json::DAW_JSON_VER::json_details::parse_space_needed_v = 1U
 
template<>
constexpr std::size_t daw::json::DAW_JSON_VER::json_details::parse_space_needed_v< simd_exec_tag > = 16U
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::string_opts_set
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::string_raw_opts_set
 
template<json_options_t CurrentOptions, auto option, auto... options>
constexpr json_options_t daw::json::DAW_JSON_VER::json_details::tuple_opts_set
 

Macro Definition Documentation

◆ CPP20CONSTEXPR

#define CPP20CONSTEXPR