22#include <daw/cpp_17.h>
23#include <daw/daw_attributes.h>
24#include <daw/daw_likely.h>
25#include <daw/daw_traits.h>
47 typename Allocator = json_details::NoAllocator>
54 json_details::get_bits_for<TemporarilyMutateBuffer>( PolicyFlags ) ==
58 std::conditional_t<allow_temporarily_mutating_buffer, char, char const>;
65 json_details::get_bits_for<CheckedParseMode>( PolicyFlags ) ==
72 switch_t<json_details::get_bits_for<ExecModeTypes, std::size_t>(
82 json_details::get_bits_for<AllowEscapedNames>( PolicyFlags ) ==
89 json_details::get_bits_for<ForceFullNameCheck>( PolicyFlags ) ==
96 json_details::get_bits_for<ZeroTerminatedString>( PolicyFlags ) ==
103 json_details::get_bits_for<IEEE754Precise>( PolicyFlags ) ==
110 json_details::get_bits_for<MinifiedDocument>( PolicyFlags ) ==
117 json_details::get_bits_for<ExcludeSpecialEscapes>( PolicyFlags ) ==
132 json_details::get_bits_for<UseExactMappingsByDefault>( PolicyFlags ) ==
136 json_details::get_bits_for<MustVerifyEndOfDataIsValid>( PolicyFlags ) ==
140 json_details::get_bits_for<ExpectLongStrings>( PolicyFlags ) ==
144 switch_t<json_details::get_bits_for<PolicyCommentTypes, std::size_t>(
156 template<
auto... PolicyOptions>
202 result.class_first = cf;
205 result.class_last = cl;
210 template<
typename Alloc>
213 template<
typename Alloc>
220 template<
typename Alloc>
221 [[nodiscard]]
constexpr auto
223 if constexpr( std::is_same<Alloc, json_details::NoAllocator>::value ) {
227 p.get_allocator( ) );
233 template<
typename Alloc>
234 [[nodiscard]]
inline constexpr with_allocator_type<Alloc>
261 template<
typename Alloc>
262 [[nodiscard]]
static inline constexpr with_allocator_type<Alloc>
264 return { f, l, f, l, alloc };
274 return { f, l, cf, cl };
277 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr iterator
282 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr iterator
287 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr iterator
292 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr iterator
297 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr bool empty( )
const {
308 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr bool
313 template<std::
size_t N>
314 inline constexpr bool starts_with(
char const ( &rhs )[N] )
const {
315 if(
size( ) < ( N - 1 ) ) {
319 for( std::size_t
n = 0;
n < ( N - 1 ); ++
n ) {
320 result = result & (
first[
n] == rhs[
n] );
328 json_details::memchr_unchecked<c, exec_tag_t, expect_long_strings>(
335 json_details::memchr_checked<c, exec_tag_t, expect_long_strings>(
342 move_to_next_of_unchecked<c>( );
344 move_to_next_of_checked<c>( );
348 [[nodiscard]] DAW_ATTRIB_INLINE
inline constexpr char front( )
const {
352 [[nodiscard]] DAW_ATTRIB_INLINE
inline constexpr char
359 [[nodiscard]] DAW_ATTRIB_INLINE
inline constexpr std::size_t
361 return static_cast<std::size_t
>(
last -
first );
364 [[nodiscard]]
inline constexpr bool is_null( )
const {
365 return first ==
nullptr;
373 first +=
static_cast<std::ptrdiff_t
>(
n );
396 return CommentPolicy::trim_left_checked( *
this );
400 return CommentPolicy::trim_left_unchecked( *
this );
407 while( (
static_cast<unsigned char>( *f ) > 0x20U ) &
408 not CommentPolicy::is_literal_end( *f ) ) {
412 while( ( f < l ) and ( (
static_cast<unsigned char>( *f ) > 0x20 ) &
413 not CommentPolicy::is_literal_end( *f ) ) ) {
421 return CommentPolicy::is_literal_end( *
first );
424 DAW_ATTRIB_INLINE [[nodiscard]]
inline constexpr bool
428 return (
static_cast<unsigned>(
static_cast<unsigned char>( *
first ) ) -
432 DAW_ATTRIB_INLINE [[nodiscard]]
inline constexpr bool
434 return (
static_cast<unsigned>(
static_cast<unsigned char>( *
first ) ) -
464 if( *
first ==
',' ) {
470 DAW_ATTRIB_FLATINLINE
inline constexpr void
474 if( *
first ==
',' ) {
496 CommentPolicy::move_next_member_unchecked( *
this );
512 return parse_policy_details::in<',', ']'>( *
first );
516 return parse_policy_details::in<',', '}', ']'>( *
first );
519 template<
char PrimLeft,
char PrimRight,
char SecLeft,
char SecRight>
520 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr ParseState
523 PrimLeft, PrimRight, SecLeft, SecRight>( *this );
526 template<
char PrimLeft,
char PrimRight,
char SecLeft,
char SecRight>
527 [[nodiscard]] DAW_ATTRIB_FLATINLINE
inline constexpr ParseState
530 PrimLeft, PrimRight, SecLeft, SecRight>( *this );
562 namespace json_details {
582 template<
typename ExecMode>
587 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
589 parse_options( json_details::exec_mode_from_tag<ExecTag> ), Allocator>;
594 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
598 json_details::exec_mode_from_tag<ExecTag> ),
607 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
611 json_details::exec_mode_from_tag<ExecTag> ),
614 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
618 json_details::exec_mode_from_tag<ExecTag> ),
632 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
636 json_details::exec_mode_from_tag<ExecTag> ),
643 template<
typename ExecTag,
typename Allocator = json_details::NoAllocator>
647 json_details::exec_mode_from_tag<ExecTag> ),
#define daw_json_assert_weak(Bool,...)
Definition: daw_json_assert.h:190
#define daw_json_assert(Bool,...)
Definition: daw_json_assert.h:179
constexpr json_options_t set_bits(JsonOptionList< OptionList... >, json_options_t value, Option pol, Options... pols)
Definition: daw_json_option_bits.h:138
std::uint32_t json_options_t
Definition: daw_json_option_bits.h:23
static constexpr json_options_t default_policy_flag
Definition: daw_json_parse_options.h:300
constexpr ExecModeTypes exec_mode_from_tag
Definition: daw_json_parse_policy.h:583
constexpr DAW_ATTRIB_FLATINLINE bool in(char c)
Definition: daw_json_parse_policy_policy_details.h:19
constexpr json_details::json_options_t parse_options(Policies... policies)
Definition: daw_json_parse_options.h:325
ExecModeTypes
Definition: daw_json_parse_options.h:33
Definition: daw_from_json.h:22
Definition: daw_json_parse_policy.h:381
CharT * l
Definition: daw_json_parse_policy.h:383
CharT * f
Definition: daw_json_parse_policy.h:382
Definition: daw_json_parse_policy.h:48
constexpr BasicParsePolicy(iterator f, iterator l, Allocator &alloc)
Definition: daw_json_parse_policy.h:168
constexpr void set_class_position(class_pos_t new_pos)
Definition: daw_json_parse_policy.h:386
BasicParsePolicy ParseState
Definition: daw_json_parse_policy.h:154
constexpr DAW_ATTRIB_FLATINLINE iterator begin() const
Definition: daw_json_parse_policy.h:288
constexpr DAW_ATTRIB_FLATINLINE void move_next_member_or_end()
Definition: daw_json_parse_policy.h:486
constexpr bool is_literal_end() const
Definition: daw_json_parse_policy.h:420
static constexpr without_allocator_type without_allocator(iterator f, iterator l, iterator cf, iterator cl)
Definition: daw_json_parse_policy.h:273
static constexpr bool allow_leading_zero_plus
Definition: daw_json_parse_policy.h:120
static constexpr bool exclude_special_escapes
Definition: daw_json_parse_policy.h:116
static constexpr bool is_zero_terminated_string
Definition: daw_json_parse_policy.h:95
constexpr void move_to_next_class_member()
Definition: daw_json_parse_policy.h:503
constexpr void trim_left_unchecked()
Definition: daw_json_parse_policy.h:399
switch_t< json_details::get_bits_for< ExecModeTypes, std::size_t >(PolicyFlags), constexpr_exec_tag, runtime_exec_tag, simd_exec_tag > exec_tag_t
Definition: daw_json_parse_policy.h:74
constexpr DAW_ATTRIB_INLINE char front() const
Definition: daw_json_parse_policy.h:348
constexpr DAW_ATTRIB_FLATINLINE iterator data() const
Definition: daw_json_parse_policy.h:278
constexpr bool is_at_next_array_element() const
Definition: daw_json_parse_policy.h:511
static constexpr bool force_name_equal_check
Definition: daw_json_parse_policy.h:88
iterator first
Definition: daw_json_parse_policy.h:149
BasicParsePolicy< PolicyFlags, json_details::NoAllocator > without_allocator_type
Definition: daw_json_parse_policy.h:243
constexpr bool is_at_next_class_member() const
Definition: daw_json_parse_policy.h:507
static constexpr bool is_unchecked_input
Definition: daw_json_parse_policy.h:64
constexpr void trim_left_checked()
Definition: daw_json_parse_policy.h:395
static constexpr exec_tag_t exec_tag
Definition: daw_json_parse_policy.h:76
iterator class_first
Definition: daw_json_parse_policy.h:151
constexpr bool is_at_token_after_value() const
Definition: daw_json_parse_policy.h:515
constexpr ParseState skip_array()
Definition: daw_json_parse_policy.h:541
static constexpr bool minified_document
Definition: daw_json_parse_policy.h:109
constexpr ParseState skip_class()
Definition: daw_json_parse_policy.h:533
constexpr class_pos_t get_class_position() const
Definition: daw_json_parse_policy.h:391
constexpr DAW_ATTRIB_INLINE bool is_space_checked() const
Definition: daw_json_parse_policy.h:425
constexpr bool starts_with(char const (&rhs)[N]) const
Definition: daw_json_parse_policy.h:314
static constexpr bool must_verify_end_of_data_is_valid
Definition: daw_json_parse_policy.h:135
constexpr DAW_ATTRIB_FLATINLINE ParseState skip_bracketed_item_unchecked()
Definition: daw_json_parse_policy.h:528
constexpr with_allocator_type< Alloc > with_allocator(Alloc &alloc) const
Definition: daw_json_parse_policy.h:235
constexpr DAW_ATTRIB_FLATINLINE void move_next_member()
Definition: daw_json_parse_policy.h:494
constexpr DAW_ATTRIB_FLATINLINE void move_to_next_of()
Definition: daw_json_parse_policy.h:340
static constexpr bool precise_ieee754
Definition: daw_json_parse_policy.h:102
iterator last
Definition: daw_json_parse_policy.h:150
constexpr DAW_ATTRIB_FLATINLINE bool empty() const
Definition: daw_json_parse_policy.h:297
CharT * iterator
Definition: daw_json_parse_policy.h:59
constexpr DAW_ATTRIB_FLATINLINE void move_to_next_of_unchecked()
Definition: daw_json_parse_policy.h:326
constexpr bool is_opening_brace_checked() const
Definition: daw_json_parse_policy.h:442
constexpr auto with_allocator(BasicParsePolicy< PolicyFlags, Alloc > p) const
Definition: daw_json_parse_policy.h:222
iterator class_last
Definition: daw_json_parse_policy.h:152
static constexpr with_allocator_type< Alloc > with_allocator(iterator f, iterator l, iterator cf, iterator cl, Alloc &alloc)
Definition: daw_json_parse_policy.h:215
constexpr DAW_ATTRIB_INLINE void remove_prefix()
Definition: daw_json_parse_policy.h:368
constexpr void move_next_member_or_end_unchecked()
Definition: daw_json_parse_policy.h:462
constexpr DAW_ATTRIB_FLATINLINE ParseState skip_bracketed_item_checked()
Definition: daw_json_parse_policy.h:521
constexpr DAW_ATTRIB_FLATINLINE void move_to_next_of_checked()
Definition: daw_json_parse_policy.h:333
constexpr BasicParsePolicy(iterator f, iterator l, iterator cf, iterator cl, Allocator &alloc)
Definition: daw_json_parse_policy.h:183
std::size_t counter
Definition: daw_json_parse_policy.h:153
constexpr bool is_quotes_checked() const
Definition: daw_json_parse_policy.h:450
static constexpr without_allocator_type without_allocator(iterator f, iterator l)
Definition: daw_json_parse_policy.h:268
constexpr DAW_ATTRIB_FLATINLINE bool has_more() const
Definition: daw_json_parse_policy.h:309
static constexpr without_allocator_type without_allocator(BasicParsePolicy p)
Definition: daw_json_parse_policy.h:246
constexpr DAW_ATTRIB_FLATINLINE void move_next_member_or_end_checked()
Definition: daw_json_parse_policy.h:471
switch_t< json_details::get_bits_for< PolicyCommentTypes, std::size_t >(PolicyFlags), NoCommentSkippingPolicy, CppCommentSkippingPolicy, HashCommentSkippingPolicy > CommentPolicy
Definition: daw_json_parse_policy.h:147
constexpr void set_class_position()
Definition: daw_json_parse_policy.h:376
static constexpr bool allow_temporarily_mutating_buffer
Definition: daw_json_parse_policy.h:53
constexpr BasicParsePolicy()=default
static constexpr bool expect_long_strings
Definition: daw_json_parse_policy.h:139
static constexpr bool allow_escaped_names
Definition: daw_json_parse_policy.h:81
constexpr BasicParsePolicy(iterator f, iterator l)
Definition: daw_json_parse_policy.h:162
std::conditional_t< allow_temporarily_mutating_buffer, char, char const > CharT
Definition: daw_json_parse_policy.h:58
constexpr bool is_null() const
Definition: daw_json_parse_policy.h:364
constexpr bool is_closing_brace_checked() const
Definition: daw_json_parse_policy.h:446
constexpr void move_to_end_of_literal()
Definition: daw_json_parse_policy.h:403
constexpr DAW_ATTRIB_INLINE char front_checked() const
Definition: daw_json_parse_policy.h:353
constexpr bool is_opening_bracket_checked() const
Definition: daw_json_parse_policy.h:438
constexpr DAW_ATTRIB_FLATINLINE iterator end() const
Definition: daw_json_parse_policy.h:293
constexpr BasicParsePolicy copy(iterator f=iterator{ }, iterator l=iterator{ }, iterator cf=iterator{ }, iterator cl=iterator{ }) const
Definition: daw_json_parse_policy.h:192
static constexpr with_allocator_type< Alloc > with_allocator(iterator f, iterator l, Alloc &alloc)
Definition: daw_json_parse_policy.h:263
static constexpr bool use_exact_mappings_by_default
Definition: daw_json_parse_policy.h:131
constexpr DAW_ATTRIB_INLINE bool is_space_unchecked() const
Definition: daw_json_parse_policy.h:433
constexpr DAW_ATTRIB_INLINE std::size_t size() const
Definition: daw_json_parse_policy.h:360
constexpr BasicParsePolicy(iterator f, iterator l, iterator cf, iterator cl)
Definition: daw_json_parse_policy.h:176
constexpr DAW_ATTRIB_INLINE void remove_prefix(std::size_t n)
Definition: daw_json_parse_policy.h:372
constexpr void trim_left()
Definition: daw_json_parse_policy.h:454
constexpr DAW_ATTRIB_FLATINLINE iterator data_end() const
Definition: daw_json_parse_policy.h:283
constexpr without_allocator_type without_allocator() const
Definition: daw_json_parse_policy.h:254
Definition: daw_json_exec_modes.h:19
Definition: daw_json_traits.h:543
AllocatorWrapper(allocator_type &alloc) noexcept
Definition: daw_json_allocator_wrapper.h:56
Definition: daw_json_parse_policy.h:564
Definition: daw_json_exec_modes.h:28
Definition: daw_json_exec_modes.h:41
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16