Add fast path in remove_invalid_entities.
This commit is contained in:
parent
ca9dd55141
commit
5c2441021e
@ -3657,6 +3657,19 @@ static Result<string> clean_input_string_with_entities(const string &text, vecto
|
|||||||
// entities must be sorted by offset and length, but not necessary by type
|
// entities must be sorted by offset and length, but not necessary by type
|
||||||
// returns {last_non_whitespace_pos, last_non_whitespace_utf16_offset}
|
// returns {last_non_whitespace_pos, last_non_whitespace_utf16_offset}
|
||||||
static std::pair<size_t, int32> remove_invalid_entities(const string &text, vector<MessageEntity> &entities) {
|
static std::pair<size_t, int32> remove_invalid_entities(const string &text, vector<MessageEntity> &entities) {
|
||||||
|
if (entities.empty()) {
|
||||||
|
// fast path
|
||||||
|
for (size_t pos = 0; pos < text.size(); pos++) {
|
||||||
|
auto back_pos = text.size() - pos - 1;
|
||||||
|
auto c = text[back_pos];
|
||||||
|
if (c != '\n' && c != ' ') {
|
||||||
|
return {back_pos, 0 /*unused*/};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return {text.size(), -1};
|
||||||
|
}
|
||||||
|
|
||||||
// check_is_sorted(entities);
|
// check_is_sorted(entities);
|
||||||
vector<MessageEntity *> nested_entities_stack;
|
vector<MessageEntity *> nested_entities_stack;
|
||||||
size_t current_entity = 0;
|
size_t current_entity = 0;
|
||||||
|
@ -733,6 +733,12 @@ TEST(MessageEntities, fix_formatted_text) {
|
|||||||
check_fix_formatted_text(str, {}, false, false, false, false);
|
check_fix_formatted_text(str, {}, false, false, false, false);
|
||||||
check_fix_formatted_text(str, {}, false, false, false, true);
|
check_fix_formatted_text(str, {}, false, false, false, true);
|
||||||
|
|
||||||
|
check_fix_formatted_text(" aba\n ", {}, " aba\n ", {}, true, true, true, true);
|
||||||
|
check_fix_formatted_text(" aba\n ", {}, "aba", {}, true, true, true, false);
|
||||||
|
check_fix_formatted_text(" \n ", {}, "", {}, true, true, true, true);
|
||||||
|
check_fix_formatted_text(" \n ", {}, "", {}, true, true, true, false);
|
||||||
|
check_fix_formatted_text(" \n ", {}, false, true, true, false);
|
||||||
|
|
||||||
str += "a \r\n ";
|
str += "a \r\n ";
|
||||||
fixed_str += "a \n ";
|
fixed_str += "a \n ";
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user