Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Optimize value_iterator::get_string()#2211

Draft
CarlosEduR wants to merge 1 commit intosimdjson:masterfrom
CarlosEduR:optimization-get_string
Draft

Optimize value_iterator::get_string()#2211
CarlosEduR wants to merge 1 commit intosimdjson:masterfrom
CarlosEduR:optimization-get_string

Conversation

@CarlosEduR
Copy link
Member

Relates to:#1470

@CarlosEduR
Copy link
MemberAuthor

CarlosEduR commentedJul 11, 2024
edited
Loading

@lemire I'd like to confirm it before making the PR ready for review

I believe the current changes are not covering all cases we've talked about.

In case the character\ is not present, we should just return the string_view instance.
Now if it contains the character\:

  1. and encounter" before any\, then we also just return the string_view instance
  2. if there is not", we fallback on the existing code

is it correct?

const char* start = raw_json_string_result.value_unsafe().raw();
const char* json = start;

for (; *json != '\0'; ++json) {
Copy link
Member

@lemirelemireJul 11, 2024
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

You don't think you need*json != '\0'... and, in fact, it is likely incorrect. The JSON spec does not forbid null characters inside the string as far as I can tell, and it does not enforce that the string be null terminated.

CarlosEduR reacted with thumbs up emoji
@lemire
Copy link
Member

Let me do some work of my own (next few hours).

CarlosEduR reacted with thumbs up emoji

@lemire
Copy link
Member

Reproducing my comment here:

Here is my current view. We should have a simple/cheap inlined function (which can use NEON/SSE2) equivalent to the following...

std::none_of(s.begin(), s.end(),                        [](char c) {return c =='\\'; });

One thing that@CarlosEduR did not have is that you can callraw_json_token() to get a std::string_view that spans the whole string including the quotes. So all we need to do is callraw_json_token() , then have a fast function check that there is no backslash, and if so we avoid the copy.

Unfortunately thestd::none_of thing won't work because compilers cannot be trusted to generate good code. But it is the idea.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@lemirelemirelemire left review comments

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

@CarlosEduR@lemire

[8]ページ先頭

©2009-2026 Movatter.jp