From f06346fbf03900c278e1d59717e1387bffc03f39 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 13 Nov 2020 20:26:30 +0300 Subject: [PATCH] Allow precompute size of serialized tags. --- ui/text/text_entity.cpp | 14 ++++++++++++++ ui/text/text_entity.h | 11 +++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/ui/text/text_entity.cpp b/ui/text/text_entity.cpp index fe43783..9bdfc43 100644 --- a/ui/text/text_entity.cpp +++ b/ui/text/text_entity.cpp @@ -1950,6 +1950,20 @@ void Trim(TextWithEntities &result) { } } +int SerializeTagsSize(const TextWithTags::Tags &tags) { + auto result = qint32(0); + if (tags.isEmpty()) { + return result; + } + result += sizeof(qint32); + for (const auto &tag : tags) { + result += 2 * sizeof(qint32) // offset, length + + sizeof(quint32) // id.size + + tag.id.size() * sizeof(ushort); + } + return result; +} + QByteArray SerializeTags(const TextWithTags::Tags &tags) { if (tags.isEmpty()) { return QByteArray(); diff --git a/ui/text/text_entity.h b/ui/text/text_entity.h index 83f4384..aa04175 100644 --- a/ui/text/text_entity.h +++ b/ui/text/text_entity.h @@ -344,10 +344,13 @@ inline QString PrepareForSending(const QString &text, PrepareTextOption option = // Replace bad symbols with space and remove '\r'. void ApplyServerCleaning(TextWithEntities &result); -QByteArray SerializeTags(const TextWithTags::Tags &tags); -TextWithTags::Tags DeserializeTags(QByteArray data, int textLength); -QString TagsMimeType(); -QString TagsTextMimeType(); +[[nodiscard]] int SerializeTagsSize(const TextWithTags::Tags &tags); +[[nodiscard]] QByteArray SerializeTags(const TextWithTags::Tags &tags); +[[nodiscard]] TextWithTags::Tags DeserializeTags( + QByteArray data, + int textLength); +[[nodiscard]] QString TagsMimeType(); +[[nodiscard]] QString TagsTextMimeType(); inline const auto kMentionTagStart = qstr("mention://user.");