94      return daw::algorithm::accumulate(
 
   95        std::data( path_stack ), daw::data_end( path_stack ), std::string{ },
 
   98            if( sv.index( ) >= 0 ) {
 
  100              state += std::to_string( sv.index( ) );
 
  102            } 
else if( not sv.name( ).empty( ) ) {
 
  104              state += std::string( sv.name( ) );
 
  106            return DAW_FWD( state );
 
 
  116                             char const *doc_start ) {
 
  117      if( parse_location == 
nullptr or doc_start == 
nullptr ) {
 
  120      if( json_details::less{ }( parse_location, doc_start ) ) {
 
  127        std::vector<json_path_node> parse_stack{ };
 
  131        std::optional<json_path_node> last_popped{ };
 
  135          if( parse_stack.empty( ) ) {
 
  136            return JsonBaseParseTypes::None;
 
  138          return parse_stack.back( ).
type( );
 
  141        [[nodiscard]] 
bool handle_on_value( 
json_pair jp ) {
 
  142          if( 
auto const range = jp.
value.get_raw_state( );
 
  143              range.empty( ) or last <= std::data( range ) ) {
 
  146          if( 
auto const t = child_of( ); t == JsonBaseParseTypes::Class ) {
 
  147            state.m_name = *jp.
name;
 
  149          } 
else if( t == JsonBaseParseTypes::Array ) {
 
  156          state.m_value_start = jp.
value.get_raw_state( ).first;
 
  157          state.m_type = jp.
value.type( );
 
  158          last_popped = std::nullopt;
 
  162        [[nodiscard]] 
bool handle_on_array_start( 
json_value const & ) {
 
  163          parse_stack.push_back( state );
 
  168        [[nodiscard]] 
bool handle_on_array_end( ) {
 
  169          if( not parse_stack.empty( ) ) {
 
  170            last_popped = parse_stack.back( );
 
  171            state = parse_stack.back( );
 
  172            parse_stack.pop_back( );
 
  177        [[nodiscard]] 
bool handle_on_class_start( 
json_value const & ) {
 
  178          parse_stack.push_back( state );
 
  183        [[nodiscard]] 
bool handle_on_class_end( ) {
 
  184          if( not parse_stack.empty( ) ) {
 
  185            last_popped = parse_stack.back( );
 
  186            state = parse_stack.back( );
 
  187            parse_stack.pop_back( );
 
  192        [[nodiscard]] 
bool handle_on_number( 
json_value jv ) {
 
  193          auto sv = std::string_view( );
 
  194#if defined( DAW_USE_EXCEPTIONS ) 
  198#if defined( DAW_USE_EXCEPTIONS ) 
  199          } 
catch( json_exception 
const & ) {
 
  200            parse_stack.push_back( state );
 
  204          if( std::data( sv ) <= last and last <= daw::data_end( sv ) ) {
 
  205            parse_stack.push_back( state );
 
  211        [[nodiscard]] 
bool handle_on_bool( 
json_value jv ) {
 
  212          auto sv = std::string_view( );
 
  213#if defined( DAW_USE_EXCEPTIONS ) 
  217#if defined( DAW_USE_EXCEPTIONS ) 
  218          } 
catch( json_exception 
const & ) {
 
  219            parse_stack.push_back( state );
 
  223          if( std::data( sv ) <= last and last <= daw::data_end( sv ) ) {
 
  224            parse_stack.push_back( state );
 
  230        [[nodiscard]] 
bool handle_on_string( 
json_value jv ) {
 
  231          auto sv = std::string_view( );
 
  232#if defined( DAW_USE_EXCEPTIONS ) 
  236#if defined( DAW_USE_EXCEPTIONS ) 
  237          } 
catch( json_exception 
const & ) {
 
  238            parse_stack.push_back( state );
 
  242          if( std::data( sv ) <= last and last <= daw::data_end( sv ) ) {
 
  243            parse_stack.push_back( state );
 
  249        [[nodiscard]] 
bool handle_on_null( 
json_value jv ) {
 
  250          auto sv = std::string_view( );
 
  251#if defined( DAW_USE_EXCEPTIONS ) 
  255#if defined( DAW_USE_EXCEPTIONS ) 
  256          } 
catch( json_exception 
const & ) {
 
  257            parse_stack.push_back( state );
 
  261          if( std::data( sv ) <= last and last <= daw::data_end( sv ) ) {
 
  262            parse_stack.push_back( state );
 
  267      } handler{ doc_start, parse_location + 1 };
 
  269#if defined( DAW_USE_EXCEPTIONS ) 
  273#if defined( DAW_USE_EXCEPTIONS ) 
  274      } 
catch( json_exception 
const & ) {
 
  279      if( handler.last_popped ) {
 
  280        handler.parse_stack.push_back( *handler.last_popped );
 
  282      return std::move( handler.parse_stack );
 
 
  306                       ErrorReason::UnexpectedEndOfData );
 
  308                       ErrorReason::UnexpectedEndOfData );
 
  310      return daw::algorithm::accumulate( doc_start, doc_pos, std::size_t{ },
 
  311                                         []( std::size_t count, 
char c )
 
 
  328                       ErrorReason::UnexpectedEndOfData );
 
  330                       ErrorReason::UnexpectedEndOfData );
 
  332      auto const first = daw::reverse_iterator<char const *>( doc_pos );
 
  333      auto const last = daw::reverse_iterator<char const *>( doc_start );
 
  334      auto const pos = daw::algorithm::find( first, last, 
'\n' ) - first;
 
  336      return static_cast<std::size_t
>( pos );