From b15929f141e1eed58121f989df3711a16ec27b2b Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 28 Dec 2018 03:31:29 +0300 Subject: [PATCH] Better Bitmask output operator. GitOrigin-RevId: 1640da5cfe0f1d12ef0fc549a0a2c24000625812 --- td/telegram/files/FileBitmask.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/td/telegram/files/FileBitmask.cpp b/td/telegram/files/FileBitmask.cpp index e8e02a4b4..53c7e09af 100644 --- a/td/telegram/files/FileBitmask.cpp +++ b/td/telegram/files/FileBitmask.cpp @@ -131,8 +131,23 @@ int64 Bitmask::size() const { } StringBuilder &operator<<(StringBuilder &sb, const Bitmask &mask) { - for (int64 i = 0; i < mask.size(); i++) { - sb << (mask.get(i) ? '1' : '0'); + bool prev = 0; + int32 cnt = 0; + for (int64 i = 0; i <= mask.size(); i++) { + bool cur = mask.get(i); + if (cur != prev) { // zeros at the end are intentionally skipped + if (cnt < 5) { + while (cnt > 0) { + sb << (prev ? '1' : '0'); + cnt--; + } + } else { + sb << (prev ? '1' : '0') << "(x" << cnt << ')'; + cnt = 0; + } + } + prev = cur; + cnt++; } return sb; }