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'>( );
48 if( ( ParseState::is_zero_terminated_string or
49 parse_state.has_more( ) ) and
50 parse_state.front( ) ==
'\n' ) {
51 parse_state.remove_prefix( );
70 skip_comments_checked( parse_state );
71 while( parse_state.has_more( ) and parse_state.is_space_unchecked( ) ) {
72 parse_state.remove_prefix( );
73 skip_comments_checked( parse_state );
97 skip_comments( parse_state );
101 ErrorReason::UnexpectedEndOfData,
103 if( parse_policy_details::in<keys...>( parse_state.front( ) ) ) {
106 parse_state.remove_prefix( );
107 skip_comments( parse_state );
119 DAW_CPP23_STATIC_LOCAL
constexpr char PrimLeft =
120 BracketedType == json_details::SkipBracketedType::Class ?
'{' :
'[';
121 using PrimRight = daw::constant<PrimLeft ==
'{' ?
'}' :
']'>;
122 using SecLeft = daw::constant<PrimLeft ==
'{' ?
'[' :
'{'>;
123 using SecRight = daw::constant<SecLeft::value ==
'{' ?
'}' :
']'>;
126 auto result = parse_state;
128 std::uint32_t prime_bracket_count = 1;
129 std::uint32_t second_bracket_count = 0;
130 auto ptr_first = parse_state.first;
131 auto const ptr_last = parse_state.last;
134 ErrorReason::InvalidNull );
135 if( DAW_UNLIKELY( ptr_first >= ptr_last ) ) {
138 if( *ptr_first == PrimLeft ) {
141 while( DAW_LIKELY( ptr_first < ptr_last ) ) {
143 switch( *ptr_first ) {
150 ptr_first += json_details::mem_skip_until_end_of_string<
151 ParseState::is_unchecked_input,
152 typename ParseState::exec_tag_t>(
153 daw::not_null<char const *>( daw::never_null, ptr_first ),
154 daw::not_null<char const *>( daw::never_null, ptr_last ) )
158 ErrorReason::UnexpectedEndOfData,
162 if( prime_bracket_count == 1 and second_bracket_count == 0 ) {
167 ++prime_bracket_count;
169 case PrimRight::value:
170 --prime_bracket_count;
171 if( prime_bracket_count == 0 ) {
173 ErrorReason::InvalidBracketing,
178 result.last = ptr_first;
179 result.counter = cnt;
180 parse_state.first = ptr_first;
185 ++second_bracket_count;
187 case SecRight::value:
188 --second_bracket_count;
192 while( ptr_first < ptr_last and *ptr_first !=
'\n' ) {
195 if( ptr_first < ptr_last ) {
203 ( second_bracket_count == 0 ),
204 ErrorReason::InvalidBracketing,
208 result.last = ptr_first;
209 result.counter = cnt;
210 parse_state.first = ptr_first;
218 DAW_CPP23_STATIC_LOCAL
constexpr char PrimLeft =
219 BracketedType == json_details::SkipBracketedType::Class ?
'{' :
'[';
221 using PrimRight = daw::constant<PrimLeft ==
'{' ?
'}' :
']'>;
222 using SecLeft = daw::constant<PrimLeft ==
'{' ?
'[' :
'{'>;
223 using SecRight = daw::constant<SecLeft::value ==
'{' ?
'}' :
']'>;
225 auto result = parse_state;
227 std::uint32_t prime_bracket_count = 1;
228 std::uint32_t second_bracket_count = 0;
229 auto ptr_first = parse_state.first;
230 auto const ptr_last = parse_state.last;
233 ErrorReason::InvalidNull );
234 if( *ptr_first == PrimLeft ) {
238 switch( *ptr_first ) {
246 ptr_first += json_details::mem_skip_until_end_of_string<
247 ParseState::is_unchecked_input,
248 typename ParseState::exec_tag_t>(
249 daw::not_null<char const *>( daw::never_null, ptr_first ),
250 daw::not_null<char const *>( daw::never_null, ptr_last ) )
255 if( prime_bracket_count == 1 and second_bracket_count == 0 ) {
260 ++prime_bracket_count;
262 case PrimRight::value:
263 --prime_bracket_count;
264 if( prime_bracket_count == 0 ) {
268 result.last = ptr_first;
269 result.counter = cnt;
270 parse_state.first = ptr_first;
275 ++second_bracket_count;
277 case SecRight::value:
278 --second_bracket_count;
282 while( *ptr_first !=
'\n' ) {