diff --git a/td/telegram/MessageEntity.cpp b/td/telegram/MessageEntity.cpp index 4ed129a49..197ec364e 100644 --- a/td/telegram/MessageEntity.cpp +++ b/td/telegram/MessageEntity.cpp @@ -1142,6 +1142,14 @@ vector> find_urls(Slice str) { return result; } +static void sort_entities(vector &entities) { + if (std::is_sorted(entities.begin(), entities.end())) { + return; + } + + std::sort(entities.begin(), entities.end()); +} + #define check_is_sorted(entities) check_is_sorted_impl(entities, __LINE__) static void check_is_sorted_impl(const vector &entities, int line) { LOG_CHECK(std::is_sorted(entities.begin(), entities.end())) << line << " " << entities; @@ -1354,7 +1362,7 @@ vector find_entities(Slice text, bool skip_bot_commands, bool onl return entities; } - std::sort(entities.begin(), entities.end()); + sort_entities(entities); remove_intersecting_entities(entities); @@ -1852,7 +1860,7 @@ static Result> do_parse_markdown_v2(CSlice text, string &r << " entity at byte offset " << nested_entities.back().entity_byte_offset); } - std::sort(entities.begin(), entities.end()); + sort_entities(entities); return entities; } @@ -2160,7 +2168,7 @@ static FormattedText parse_markdown_v3_without_pre(Slice text, vector> do_parse_html(CSlice text, string &result) } } - std::sort(entities.begin(), entities.end()); + sort_entities(entities); return entities; } @@ -3462,9 +3470,7 @@ void split_entities(vector &entities, const vector entities = std::move(result); // entities are sorted only by offset now, re-sort if needed - if (!std::is_sorted(entities.begin(), entities.end())) { - std::sort(entities.begin(), entities.end()); - } + sort_entities(entities); } static vector resplit_entities(vector &&splittable_entities, @@ -3477,15 +3483,13 @@ static vector resplit_entities(vector &&splittable } combine(entities, std::move(splittable_entities)); - std::sort(entities.begin(), entities.end()); + sort_entities(entities); } return std::move(entities); } static void fix_entities(vector &entities) { - if (!std::is_sorted(entities.begin(), entities.end())) { - std::sort(entities.begin(), entities.end()); - } + sort_entities(entities); if (are_entities_valid(entities)) { // fast path @@ -3513,7 +3517,7 @@ static void fix_entities(vector &entities) { remove_entities_intersecting_blockquote(continuous_entities, blockquote_entities); combine(continuous_entities, std::move(blockquote_entities)); - std::sort(continuous_entities.begin(), continuous_entities.end()); + sort_entities(continuous_entities); } // must be called once to not merge some adjacent entities @@ -3550,7 +3554,7 @@ static void merge_new_entities(vector &entities, vector &entities, bool al } } if (need_sort) { - std::sort(entities.begin(), entities.end()); + sort_entities(entities); } // ltrim