21 namespace json_details {
22 namespace name::name_parser {
27 template<
typename ParseState>
28 [[maybe_unused]]
static constexpr void
38 template<
typename ParseState>
40 maybe_unused]] DAW_ATTRIB_INLINE
inline constexpr daw::string_view
42 if constexpr( ParseState::allow_escaped_names ) {
45 return daw::string_view( std::data( r ), std::size( r ) );
48 if constexpr( ParseState::is_unchecked_input ) {
49 parse_state.template move_to_next_of_unchecked<
'"'>( );
51 parse_state.template move_to_next_of_checked<
'"'>( );
56 auto result = daw::string_view( ptr,
parse_state.first );
77 if( path.front( ) ==
'.' ) {
78 path.remove_prefix( );
81 path.pop_front( [&, in_escape =
false](
char c )
mutable {
93 result.found_char = c;
102 [[nodiscard]]
constexpr bool
104 daw::string_view member_name ) {
105 if( json_path_item.front( ) ==
'\\' ) {
106 json_path_item.remove_prefix( );
108 while( not json_path_item.empty( ) and not member_name.empty( ) ) {
109 if( json_path_item.front( ) != member_name.front( ) ) {
112 json_path_item.remove_prefix( );
113 if( not json_path_item.empty( ) and
114 json_path_item.front( ) ==
'\\' ) {
115 json_path_item.remove_prefix( );
117 member_name.remove_prefix( );
119 return std::size( json_path_item ) == std::size( member_name );
126 template<
typename ParseState>
127 [[nodiscard]] DAW_ATTRIB_FLATTEN
inline constexpr daw::string_view
135 template<
typename ParseState>
137 daw::string_view path ) {
140 while( not pop_result.current.empty( ) ) {
141 if( pop_result.found_char ==
']' ) {
147 auto idx = daw::parser::parse_unsigned_int<std::size_t>(
148 pop_result.current );
180 template<
typename ParsePolicy,
typename String>
181 [[nodiscard]]
constexpr std::pair<bool, ParsePolicy>
183 static_assert( std::is_convertible_v<
decltype( std::data( str ) ),
184 typename ParsePolicy::CharT *> );
187 ParsePolicy( std::data( str ), daw::data_end( str ) );
190 if(
parse_state.has_more( ) and not start_path.empty( ) ) {
193 return std::pair<bool, ParsePolicy>( found,
parse_state );
196 template<
typename ParsePolicy,
typename String,
typename Allocator>
198 daw::string_view start_path,
201 std::is_same<char const *, typename ParsePolicy::iterator>::value,
202 "Only char const * ranges are currently supported" );
204 std::data( str ), daw::data_end( str ), alloc );
206 if(
parse_state.has_more( ) and not start_path.empty( ) ) {
#define daw_json_assert_weak(Bool,...)
Definition: daw_json_assert.h:190
ParseState & parse_state
Definition: daw_json_parse_class.h:182
constexpr DAW_ATTRIB_INLINE daw::string_view parse_nq(ParseState &parse_state)
Definition: daw_json_parse_name.h:41
static constexpr void trim_end_of_name(ParseState &parse_state)
Definition: daw_json_parse_name.h:29
constexpr bool json_path_compare(daw::string_view json_path_item, daw::string_view member_name)
Definition: daw_json_parse_name.h:103
constexpr bool find_range2(ParseState &parse_state, daw::string_view path)
Definition: daw_json_parse_name.h:136
constexpr DAW_ATTRIB_FLATTEN daw::string_view parse_name(ParseState &parse_state)
Definition: daw_json_parse_name.h:128
constexpr ParseState skip_value(ParseState &parse_state)
Definition: daw_json_skip.h:304
constexpr std::pair< bool, ParsePolicy > find_range(String &&str, daw::string_view start_path)
Definition: daw_json_parse_name.h:182
constexpr pop_json_path_result pop_json_path(daw::string_view &path)
Definition: daw_json_parse_name.h:72
constexpr DAW_ATTRIB_FLATINLINE ParseState skip_string_nq(ParseState &parse_state)
Definition: daw_json_skip.h:39
Definition: daw_from_json.h:22
Definition: daw_json_parse_name.h:64
char found_char
Definition: daw_json_parse_name.h:66
daw::string_view current
Definition: daw_json_parse_name.h:65
#define DAW_JSON_VER
The version string used in namespace definitions. Must be a valid namespace name.
Definition: version.h:16