44 while( parse_state.has_more( ) and parse_state.front( ) ==
'#' ) {
45 parse_state.remove_prefix( );
46 parse_state.template move_to_next_of_checked<'\n'>( );
47 if( parse_state.front( ) ==
'\n' ) {
48 parse_state.remove_prefix( );
67 skip_comments_checked( parse_state );
68 while( parse_state.has_more( ) and parse_state.is_space_unchecked( ) ) {
69 parse_state.remove_prefix( );
70 skip_comments_checked( parse_state );
92 skip_comments( parse_state );
95 ErrorReason::UnexpectedEndOfData,
97 while( not parse_policy_details::in<keys...>( parse_state.front( ) ) ) {
99 ErrorReason::UnexpectedEndOfData,
101 parse_state.remove_prefix( );
102 skip_comments( parse_state );
113 using PrimRight = daw::constant<PrimLeft ==
'{' ?
'}' :
']'>;
114 using SecLeft = daw::constant<PrimLeft ==
'{' ?
'[' :
'{'>;
115 using SecRight = daw::constant<SecLeft::value ==
'{' ?
'}' :
']'>;
118 auto result = parse_state;
120 std::uint32_t prime_bracket_count = 1;
121 std::uint32_t second_bracket_count = 0;
122 auto ptr_first = daw::not_null<char const *>( parse_state.first );
123 auto const ptr_last = daw::not_null<char const *>( parse_state.last );
124 if( DAW_UNLIKELY( ptr_first >= ptr_last ) ) {
127 if( *ptr_first == PrimLeft ) {
130 while( DAW_LIKELY( ptr_first < ptr_last ) ) {
132 switch( *ptr_first ) {
138 ptr_first = json_details::mem_skip_until_end_of_string<
139 ParseState::is_unchecked_input,
140 typename ParseState::exec_tag_t>( ptr_first, ptr_last );
142 ErrorReason::UnexpectedEndOfData,
146 if( prime_bracket_count == 1 and second_bracket_count == 0 ) {
151 ++prime_bracket_count;
153 case PrimRight::value:
154 --prime_bracket_count;
155 if( prime_bracket_count == 0 ) {
157 ErrorReason::InvalidBracketing,
162 result.last = ptr_first;
163 result.counter = cnt;
164 parse_state.first = ptr_first;
169 ++second_bracket_count;
171 case SecRight::value:
172 --second_bracket_count;
176 while( ptr_first < ptr_last and *ptr_first !=
'\n' ) {
179 if( ptr_first < ptr_last ) {
187 ( second_bracket_count == 0 ),
188 ErrorReason::InvalidBracketing,
192 result.last = ptr_first;
193 result.counter = cnt;
194 parse_state.first = ptr_first;
202 using PrimRight = daw::constant<PrimLeft ==
'{' ?
'}' :
']'>;
203 using SecLeft = daw::constant<PrimLeft ==
'{' ?
'[' :
'{'>;
204 using SecRight = daw::constant<SecLeft::value ==
'{' ?
'}' :
']'>;
206 auto result = parse_state;
208 std::uint32_t prime_bracket_count = 1;
209 std::uint32_t second_bracket_count = 0;
211 daw::not_null<char const *>( daw::never_null, parse_state.first );
212 auto const ptr_last =
213 daw::not_null<char const *>( daw::never_null, parse_state.last );
214 if( *ptr_first == PrimLeft ) {
218 switch( *ptr_first ) {
224 ptr_first = json_details::mem_skip_until_end_of_string<
225 ParseState::is_unchecked_input,
226 typename ParseState::exec_tag_t>( ptr_first, ptr_last );
229 if( prime_bracket_count == 1 and second_bracket_count == 0 ) {
234 ++prime_bracket_count;
236 case PrimRight::value:
237 --prime_bracket_count;
238 if( prime_bracket_count == 0 ) {
242 result.last = ptr_first;
243 result.counter = cnt;
244 parse_state.first = ptr_first;
249 ++second_bracket_count;
251 case SecRight::value:
252 --second_bracket_count;
256 while( *ptr_first !=
'\n' ) {