From edfa5d1d982a8d499877eb9fafc5192a0baa2974 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 3 Jul 2021 23:51:36 +0300 Subject: [PATCH] Use final instead of override. --- benchmark/bench_actor.cpp | 30 +- benchmark/bench_crypto.cpp | 66 +-- benchmark/bench_db.cpp | 36 +- benchmark/bench_handshake.cpp | 10 +- benchmark/bench_http.cpp | 10 +- benchmark/bench_http_reader.cpp | 18 +- benchmark/bench_http_server.cpp | 10 +- benchmark/bench_http_server_cheat.cpp | 10 +- benchmark/bench_http_server_fast.cpp | 12 +- benchmark/bench_log.cpp | 32 +- benchmark/bench_misc.cpp | 54 +- benchmark/bench_queue.cpp | 22 +- benchmark/bench_tddb.cpp | 8 +- td/generate/tl_writer_c.h | 211 ++++---- td/generate/tl_writer_dotnet.h | 120 ++--- td/generate/tl_writer_hpp.h | 87 ++-- td/generate/tl_writer_java.h | 106 ++-- td/generate/tl_writer_jni_cpp.h | 69 ++- td/generate/tl_writer_jni_h.h | 35 +- td/mtproto/HandshakeActor.h | 10 +- td/mtproto/HandshakeConnection.h | 4 +- td/mtproto/HttpTransport.h | 20 +- td/mtproto/PacketStorer.h | 4 +- td/mtproto/Ping.cpp | 10 +- td/mtproto/PingConnection.cpp | 54 +- td/mtproto/RawConnection.cpp | 48 +- td/mtproto/SessionConnection.h | 8 +- td/mtproto/TcpTransport.h | 56 +- td/mtproto/TlsInit.h | 2 +- td/mtproto/TlsReaderByteFlow.h | 2 +- td/mtproto/utils.h | 4 +- td/telegram/AnimationsManager.cpp | 8 +- td/telegram/AnimationsManager.h | 2 +- td/telegram/AuthManager.h | 6 +- td/telegram/AutoDownloadSettings.cpp | 8 +- td/telegram/BackgroundManager.cpp | 32 +- td/telegram/BackgroundManager.h | 4 +- td/telegram/BotCommand.cpp | 12 +- td/telegram/CallActor.h | 10 +- td/telegram/CallManager.h | 4 +- td/telegram/CallbackQueriesManager.cpp | 8 +- td/telegram/Client.cpp | 12 +- td/telegram/ConfigManager.cpp | 44 +- td/telegram/ConfigManager.h | 10 +- td/telegram/ContactsManager.cpp | 320 ++++++------ td/telegram/ContactsManager.h | 4 +- td/telegram/CountryInfoManager.cpp | 8 +- td/telegram/CountryInfoManager.h | 4 +- td/telegram/DelayDispatcher.h | 4 +- td/telegram/DeviceTokenManager.h | 6 +- td/telegram/DhCache.h | 6 +- td/telegram/DialogDb.cpp | 38 +- td/telegram/Global.h | 4 +- td/telegram/GroupCallManager.cpp | 84 +-- td/telegram/GroupCallManager.h | 4 +- td/telegram/HashtagHints.h | 2 +- td/telegram/InlineQueriesManager.cpp | 8 +- td/telegram/InlineQueriesManager.h | 4 +- td/telegram/LanguagePackManager.h | 10 +- td/telegram/LinkManager.cpp | 8 +- td/telegram/LinkManager.h | 2 +- td/telegram/MessageContent.cpp | 90 ++-- td/telegram/MessagesDb.cpp | 78 ++- td/telegram/MessagesManager.cpp | 418 +++++++-------- td/telegram/MessagesManager.h | 8 +- td/telegram/NewPasswordState.cpp | 5 +- td/telegram/NewPasswordState.h | 5 +- td/telegram/NotificationManager.cpp | 10 +- td/telegram/NotificationManager.h | 4 +- td/telegram/NotificationType.cpp | 48 +- td/telegram/PasswordManager.h | 8 +- td/telegram/Payments.cpp | 36 +- td/telegram/PhoneNumberManager.h | 4 +- td/telegram/PollManager.cpp | 18 +- td/telegram/PollManager.h | 6 +- td/telegram/PrivacyManager.h | 4 +- td/telegram/QueryCombiner.h | 2 +- td/telegram/RequestActor.h | 10 +- td/telegram/SecretChatActor.h | 8 +- td/telegram/SecretChatsManager.cpp | 44 +- td/telegram/SecretChatsManager.h | 8 +- td/telegram/SecureManager.cpp | 46 +- td/telegram/SecureManager.h | 6 +- td/telegram/SecureStorage.cpp | 4 +- td/telegram/SecureStorage.h | 12 +- td/telegram/SequenceDispatcher.h | 14 +- td/telegram/StateManager.h | 4 +- td/telegram/StickersManager.cpp | 128 ++--- td/telegram/StickersManager.h | 4 +- td/telegram/StorageManager.h | 8 +- td/telegram/Td.cpp | 478 +++++++++--------- td/telegram/Td.h | 12 +- td/telegram/TermsOfService.cpp | 8 +- td/telegram/TopDialogManager.h | 6 +- td/telegram/UpdatesManager.cpp | 12 +- td/telegram/UpdatesManager.h | 18 +- td/telegram/WebPageBlock.cpp | 174 +++---- td/telegram/WebPagesManager.cpp | 8 +- td/telegram/WebPagesManager.h | 4 +- td/telegram/cli.cpp | 18 +- td/telegram/files/FileDb.cpp | 17 +- td/telegram/files/FileDownloader.h | 22 +- td/telegram/files/FileFromBytes.h | 8 +- td/telegram/files/FileGenerateManager.cpp | 42 +- td/telegram/files/FileGenerateManager.h | 6 +- td/telegram/files/FileHashUploader.h | 12 +- td/telegram/files/FileLoadManager.h | 36 +- td/telegram/files/FileLoader.h | 22 +- td/telegram/files/FileManager.cpp | 19 +- td/telegram/files/FileManager.h | 22 +- td/telegram/files/FileUploader.h | 22 +- td/telegram/files/ResourceManager.h | 4 +- td/telegram/logevent/LogEvent.h | 8 +- td/telegram/logevent/SecretChatEvent.h | 10 +- td/telegram/net/AuthDataShared.cpp | 20 +- td/telegram/net/ConnectionCreator.cpp | 10 +- td/telegram/net/ConnectionCreator.h | 10 +- td/telegram/net/DcAuthManager.cpp | 2 +- td/telegram/net/DcAuthManager.h | 4 +- td/telegram/net/NetQueryDelayer.h | 4 +- td/telegram/net/NetStatsManager.cpp | 4 +- td/telegram/net/NetStatsManager.h | 2 +- td/telegram/net/PublicRsaKeyShared.h | 4 +- td/telegram/net/PublicRsaKeyWatchdog.cpp | 2 +- td/telegram/net/PublicRsaKeyWatchdog.h | 6 +- td/telegram/net/Session.cpp | 12 +- td/telegram/net/Session.h | 42 +- td/telegram/net/SessionMultiProxy.cpp | 2 +- td/telegram/net/SessionMultiProxy.h | 4 +- td/telegram/net/SessionProxy.cpp | 14 +- td/telegram/net/SessionProxy.h | 4 +- td/telegram/net/TempAuthKeyWatchdog.h | 2 +- td/tl/tl_json.h | 4 +- tdactor/example/example.cpp | 4 +- tdactor/td/actor/ConcurrentScheduler.h | 4 +- tdactor/td/actor/MultiPromise.h | 34 +- tdactor/td/actor/PromiseFuture.h | 22 +- tdactor/td/actor/SignalSlot.h | 8 +- tdactor/td/actor/SleepActor.h | 4 +- tdactor/td/actor/Timeout.h | 4 +- tdactor/td/actor/impl/Event.h | 12 +- tdactor/td/actor/impl/Scheduler-decl.h | 8 +- tdactor/test/actors_bugs.cpp | 2 +- tdactor/test/actors_main.cpp | 38 +- tdactor/test/actors_simple.cpp | 44 +- tdactor/test/actors_workers.cpp | 6 +- tddb/td/db/BinlogKeyValue.h | 22 +- tddb/td/db/SqliteKeyValueAsync.cpp | 14 +- tddb/td/db/TQueue.cpp | 26 +- tddb/td/db/TQueue.h | 12 +- tddb/td/db/binlog/ConcurrentBinlog.cpp | 2 +- tddb/td/db/binlog/ConcurrentBinlog.h | 18 +- tdnet/td/net/GetHostByNameActor.cpp | 4 +- tdnet/td/net/HttpChunkedByteFlow.h | 2 +- tdnet/td/net/HttpConnectionBase.h | 12 +- tdnet/td/net/HttpContentLengthByteFlow.h | 2 +- tdnet/td/net/HttpInboundConnection.h | 6 +- tdnet/td/net/HttpOutboundConnection.h | 6 +- tdnet/td/net/HttpProxy.h | 2 +- tdnet/td/net/Socks5.h | 2 +- tdnet/td/net/SslStream.cpp | 4 +- tdnet/td/net/TcpListener.h | 8 +- tdnet/td/net/Wget.h | 12 +- tdutils/td/utils/AesCtrByteFlow.h | 2 +- tdutils/td/utils/Destructor.h | 2 +- tdutils/td/utils/GzipByteFlow.h | 2 +- tdutils/td/utils/JsonBuilder.h | 6 +- tdutils/td/utils/Observer.h | 2 +- tdutils/td/utils/Storer.h | 12 +- tdutils/td/utils/benchmark.h | 16 +- tdutils/td/utils/port/ServerSocketFd.cpp | 2 +- tdutils/td/utils/port/SocketFd.cpp | 2 +- tdutils/td/utils/port/StdStreams.cpp | 2 +- tdutils/td/utils/port/UdpSocketFd.cpp | 2 +- tdutils/td/utils/port/detail/Epoll.h | 14 +- tdutils/td/utils/port/detail/EventFdBsd.h | 16 +- tdutils/td/utils/port/detail/EventFdLinux.h | 16 +- tdutils/td/utils/port/detail/EventFdWindows.h | 16 +- tdutils/td/utils/port/detail/KQueue.h | 14 +- tdutils/td/utils/port/detail/Poll.h | 14 +- tdutils/td/utils/port/detail/Select.h | 14 +- tdutils/td/utils/port/detail/WineventPoll.h | 14 +- tdutils/td/utils/tests.cpp | 4 +- tdutils/td/utils/tests.h | 4 +- tdutils/test/ConcurrentHashMap.cpp | 8 +- tdutils/test/crypto.cpp | 6 +- tdutils/test/log.cpp | 8 +- test/db.cpp | 10 +- test/mtproto.cpp | 34 +- test/secret.cpp | 75 ++- test/tdclient.cpp | 50 +- 191 files changed, 2356 insertions(+), 2379 deletions(-) diff --git a/benchmark/bench_actor.cpp b/benchmark/bench_actor.cpp index a1bbd0c7b..b13b3556f 100644 --- a/benchmark/bench_actor.cpp +++ b/benchmark/bench_actor.cpp @@ -31,7 +31,7 @@ class RingBench : public td::Benchmark { td::ConcurrentScheduler *scheduler_ = nullptr; public: - std::string get_description() const override { + std::string get_description() const final { static const char *types[] = {"later", "immediate", "raw", "tail", "lambda"}; static_assert(0 <= type && type < 5, ""); return PSTRING() << "Ring (send_" << types[type] << ") (threads_n = " << thread_n_ << ")"; @@ -68,14 +68,14 @@ class RingBench : public td::Benchmark { } } - void raw_event(const td::Event::Raw &raw) override { + void raw_event(const td::Event::Raw &raw) final { pass(static_cast(raw.u32)); } - void start_up() override { + void start_up() final { yield(); } - void wakeup() override { + void wakeup() final { if (start_n != 0) { int n = start_n; start_n = 0; @@ -87,7 +87,7 @@ class RingBench : public td::Benchmark { RingBench(int actor_n, int thread_n) : actor_n_(actor_n), thread_n_(thread_n) { } - void start_up() override { + void start_up() final { scheduler_ = new td::ConcurrentScheduler(); scheduler_->init(thread_n_); @@ -103,7 +103,7 @@ class RingBench : public td::Benchmark { scheduler_->start(); } - void run(int n) override { + void run(int n) final { // first actor is on main_thread actor_array_[0].get_actor_unsafe()->start_n = td::max(n, 100); while (scheduler_->run_main(10)) { @@ -111,7 +111,7 @@ class RingBench : public td::Benchmark { } } - void tear_down() override { + void tear_down() final { scheduler_->finish(); delete scheduler_; } @@ -120,7 +120,7 @@ class RingBench : public td::Benchmark { template class QueryBench : public td::Benchmark { public: - std::string get_description() const override { + std::string get_description() const final { static const char *types[] = {"callback", "immediate future", "delayed future", "dummy", "lambda", "lambda_future"}; static_assert(0 <= type && type < 6, ""); return PSTRING() << "QueryBench: " << types[type]; @@ -163,14 +163,14 @@ class QueryBench : public td::Benchmark { public: explicit ClientCallback(td::ActorId server) : server_(server) { } - void on_result(int x) override { + void on_result(int x) final { send_closure(server_, &ServerActor::on_result, x); } private: td::ActorId server_; }; - void start_up() override { + void start_up() final { client_ = td::create_actor("Client", td::make_unique(actor_id(this))).release(); } @@ -179,7 +179,7 @@ class QueryBench : public td::Benchmark { wakeup(); } - void wakeup() override { + void wakeup() final { while (true) { if (n_ < 0) { td::Scheduler::instance()->finish(); @@ -222,7 +222,7 @@ class QueryBench : public td::Benchmark { wakeup(); } - void raw_event(const td::Event::Raw &event) override { + void raw_event(const td::Event::Raw &event) final { int val = future_.move_as_ok(); CHECK(val == n_ * n_); wakeup(); @@ -238,7 +238,7 @@ class QueryBench : public td::Benchmark { td::FutureActor future_; }; - void start_up() override { + void start_up() final { scheduler_ = new td::ConcurrentScheduler(); scheduler_->init(0); @@ -246,7 +246,7 @@ class QueryBench : public td::Benchmark { scheduler_->start(); } - void run(int n) override { + void run(int n) final { // first actor is on main_thread { auto guard = scheduler_->get_main_guard(); @@ -257,7 +257,7 @@ class QueryBench : public td::Benchmark { } } - void tear_down() override { + void tear_down() final { server_.release(); scheduler_->finish(); delete scheduler_; diff --git a/benchmark/bench_crypto.cpp b/benchmark/bench_crypto.cpp index 671beba50..a37446c77 100644 --- a/benchmark/bench_crypto.cpp +++ b/benchmark/bench_crypto.cpp @@ -33,18 +33,18 @@ class SHA1Bench : public td::Benchmark { public: alignas(64) unsigned char data[DATA_SIZE]; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "SHA1 OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; data[i] = 0; } } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { unsigned char md[20]; SHA1(data, DATA_SIZE, md); @@ -59,11 +59,11 @@ class AesEcbBench : public td::Benchmark { td::UInt256 key; td::UInt256 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES ECB OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -71,7 +71,7 @@ class AesEcbBench : public td::Benchmark { td::Random::secure_bytes(iv.raw, sizeof(iv)); } - void run(int n) override { + void run(int n) final { td::AesState state; state.init(td::as_slice(key), true); td::MutableSlice data_slice(data, DATA_SIZE); @@ -90,11 +90,11 @@ class AesIgeEncryptBench : public td::Benchmark { td::UInt256 key; td::UInt256 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES IGE OpenSSL encrypt [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -102,7 +102,7 @@ class AesIgeEncryptBench : public td::Benchmark { td::Random::secure_bytes(iv.raw, sizeof(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); td::AesIgeState state; state.init(as_slice(key), as_slice(iv), true); @@ -118,11 +118,11 @@ class AesIgeDecryptBench : public td::Benchmark { td::UInt256 key; td::UInt256 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES IGE OpenSSL decrypt [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -130,7 +130,7 @@ class AesIgeDecryptBench : public td::Benchmark { td::Random::secure_bytes(iv.raw, sizeof(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); td::AesIgeState state; state.init(as_slice(key), as_slice(iv), false); @@ -146,11 +146,11 @@ class AesCtrBench : public td::Benchmark { td::UInt256 key; td::UInt128 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES CTR OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -158,7 +158,7 @@ class AesCtrBench : public td::Benchmark { td::Random::secure_bytes(iv.raw, sizeof(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); td::AesCtrState state; state.init(as_slice(key), as_slice(iv)); @@ -175,11 +175,11 @@ class AesCtrOpenSSLBench : public td::Benchmark { td::UInt256 key; td::UInt128 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES CTR RAW OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -187,7 +187,7 @@ class AesCtrOpenSSLBench : public td::Benchmark { td::Random::secure_bytes(iv.raw, sizeof(iv)); } - void run(int n) override { + void run(int n) final { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); EVP_EncryptInit_ex(ctx, EVP_aes_256_ctr(), nullptr, key.raw, iv.raw); @@ -211,11 +211,11 @@ class AesCbcDecryptBench : public td::Benchmark { td::UInt256 key; td::UInt128 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES CBC Decrypt OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -223,7 +223,7 @@ class AesCbcDecryptBench : public td::Benchmark { td::Random::secure_bytes(as_slice(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); for (int i = 0; i < n; i++) { td::aes_cbc_decrypt(as_slice(key), as_slice(iv), data_slice, data_slice); @@ -237,11 +237,11 @@ class AesCbcEncryptBench : public td::Benchmark { td::UInt256 key; td::UInt128 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES CBC Encrypt OpenSSL [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; } @@ -249,7 +249,7 @@ class AesCbcEncryptBench : public td::Benchmark { td::Random::secure_bytes(as_slice(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, DATA_SIZE); for (int i = 0; i < n; i++) { td::aes_cbc_encrypt(as_slice(key), as_slice(iv), data_slice, data_slice); @@ -264,11 +264,11 @@ class AesIgeShortBench : public td::Benchmark { td::UInt256 key; td::UInt256 iv; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "AES IGE OpenSSL " << (use_state ? "EVP" : "C ") << "[" << SHORT_DATA_SIZE << "B]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < SHORT_DATA_SIZE; i++) { data[i] = 123; } @@ -276,7 +276,7 @@ class AesIgeShortBench : public td::Benchmark { td::Random::secure_bytes(as_slice(iv)); } - void run(int n) override { + void run(int n) final { td::MutableSlice data_slice(data, SHORT_DATA_SIZE); for (int i = 0; i < n; i++) { if (use_state) { @@ -367,18 +367,18 @@ class Crc32Bench : public td::Benchmark { public: alignas(64) unsigned char data[DATA_SIZE]; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "Crc32 zlib [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; data[i] = 0; } } - void run(int n) override { + void run(int n) final { td::uint64 res = 0; for (int i = 0; i < n; i++) { res += td::crc32(td::Slice(data, DATA_SIZE)); @@ -391,18 +391,18 @@ class Crc64Bench : public td::Benchmark { public: alignas(64) unsigned char data[DATA_SIZE]; - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << "Crc64 Anton [" << (DATA_SIZE >> 10) << "KB]"; } - void start_up() override { + void start_up() final { for (int i = 0; i < DATA_SIZE; i++) { data[i] = 123; data[i] = 0; } } - void run(int n) override { + void run(int n) final { td::uint64 res = 0; for (int i = 0; i < n; i++) { res += td::crc64(td::Slice(data, DATA_SIZE)); diff --git a/benchmark/bench_db.cpp b/benchmark/bench_db.cpp index 4b39c540f..ae9fd1e26 100644 --- a/benchmark/bench_db.cpp +++ b/benchmark/bench_db.cpp @@ -37,7 +37,7 @@ class TdKvBench : public td::Benchmark { name_ = std::move(name); } - td::string get_description() const override { + td::string get_description() const final { return name_; } @@ -47,7 +47,7 @@ class TdKvBench : public td::Benchmark { } private: - void loop() override { + void loop() final { KeyValueT::destroy("test_tddb").ignore(); class Worker : public Actor { @@ -57,7 +57,7 @@ class TdKvBench : public td::Benchmark { } private: - void loop() override { + void loop() final { for (int i = 0; i < n_; i++) { kv_.set(td::to_string(i % 10), td::to_string(i)); } @@ -71,12 +71,12 @@ class TdKvBench : public td::Benchmark { int n_; }; - void start_up_n(int n) override { + void start_up_n(int n) final { sched.init(1); sched.create_actor_unsafe
(1, "Main", n).release(); } - void run(int n) override { + void run(int n) final { sched.start(); while (sched.run_main(10)) { // empty @@ -84,17 +84,17 @@ class TdKvBench : public td::Benchmark { sched.finish(); } - void tear_down() override { + void tear_down() final { } }; template class SqliteKVBench : public td::Benchmark { td::SqliteDb db; - td::string get_description() const override { + td::string get_description() const final { return PSTRING() << "SqliteKV " << td::tag("is_encrypted", is_encrypted); } - void start_up() override { + void start_up() final { td::string path = "testdb.sqlite"; td::SqliteDb::destroy(path).ignore(); if (is_encrypted) { @@ -110,7 +110,7 @@ class SqliteKVBench : public td::Benchmark { db.exec("DROP TABLE IF EXISTS KV").ensure(); db.exec("CREATE TABLE IF NOT EXISTS KV (k BLOB PRIMARY KEY, v BLOB)").ensure(); } - void run(int n) override { + void run(int n) final { auto stmt = db.get_statement("REPLACE INTO KV (k, v) VALUES(?1, ?2)").move_as_ok(); db.exec("BEGIN TRANSACTION").ensure(); for (int i = 0; i < n; i++) { @@ -144,14 +144,14 @@ static td::Status init_db(td::SqliteDb &db) { class SqliteKeyValueAsyncBench : public td::Benchmark { public: - td::string get_description() const override { + td::string get_description() const final { return "SqliteKeyValueAsync"; } - void start_up() override { + void start_up() final { do_start_up().ensure(); scheduler_->start(); } - void run(int n) override { + void run(int n) final { auto guard = scheduler_->get_main_guard(); for (int i = 0; i < n; i++) { @@ -160,7 +160,7 @@ class SqliteKeyValueAsyncBench : public td::Benchmark { sqlite_kv_async_->set(key, value, td::Auto()); } } - void tear_down() override { + void tear_down() final { scheduler_->run_main(0.1); { auto guard = scheduler_->get_main_guard(); @@ -200,12 +200,12 @@ class SqliteKeyValueAsyncBench : public td::Benchmark { }; class SeqKvBench : public td::Benchmark { - td::string get_description() const override { + td::string get_description() const final { return "SeqKvBench"; } td::SeqKeyValue kv; - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { kv.set(PSLICE() << i % 10, PSLICE() << i); } @@ -214,16 +214,16 @@ class SeqKvBench : public td::Benchmark { template class BinlogKeyValueBench : public td::Benchmark { - td::string get_description() const override { + td::string get_description() const final { return PSTRING() << "BinlogKeyValue " << td::tag("is_encrypted", is_encrypted); } td::BinlogKeyValue kv; - void start_up() override { + void start_up() final { td::SqliteDb::destroy("test_binlog").ignore(); kv.init("test_binlog", is_encrypted ? td::DbKey::password("cucumber") : td::DbKey::empty()).ensure(); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { kv.set(td::to_string(i % 10), td::to_string(i)); } diff --git a/benchmark/bench_handshake.cpp b/benchmark/bench_handshake.cpp index cb657ad7f..4c8ee58c3 100644 --- a/benchmark/bench_handshake.cpp +++ b/benchmark/bench_handshake.cpp @@ -29,29 +29,29 @@ static string prime_base64 = "w"; class HandshakeBench : public Benchmark { - std::string get_description() const override { + std::string get_description() const final { return "Handshake"; } class FakeDhCallback : public DhCallback { public: - int is_good_prime(Slice prime_str) const override { + int is_good_prime(Slice prime_str) const final { auto it = cache.find(prime_str.str()); if (it == cache.end()) { return -1; } return it->second; } - void add_good_prime(Slice prime_str) const override { + void add_good_prime(Slice prime_str) const final { cache[prime_str.str()] = 1; } - void add_bad_prime(Slice prime_str) const override { + void add_bad_prime(Slice prime_str) const final { cache[prime_str.str()] = 0; } mutable std::map cache; } dh_callback; - void run(int n) override { + void run(int n) final { DhHandshake a; DhHandshake b; auto prime = base64url_decode(prime_base64).move_as_ok(); diff --git a/benchmark/bench_http.cpp b/benchmark/bench_http.cpp index 6ac75ad36..9bbcc163c 100644 --- a/benchmark/bench_http.cpp +++ b/benchmark/bench_http.cpp @@ -25,7 +25,7 @@ namespace td { std::atomic counter; class HttpClient : public HttpOutboundConnection::Callback { - void start_up() override { + void start_up() final { IPAddress addr; addr.init_ipv4_port("127.0.0.1", 8082).ensure(); auto fd = SocketFd::open(addr); @@ -37,12 +37,12 @@ class HttpClient : public HttpOutboundConnection::Callback { cnt_ = 100000; counter++; } - void tear_down() override { + void tear_down() final { if (--counter == 0) { Scheduler::instance()->finish(); } } - void loop() override { + void loop() final { if (cnt_-- < 0) { return stop(); } @@ -50,10 +50,10 @@ class HttpClient : public HttpOutboundConnection::Callback { send_closure(connection_, &HttpOutboundConnection::write_ok); LOG(INFO) << "SEND"; } - void handle(unique_ptr result) override { + void handle(unique_ptr result) final { loop(); } - void on_connection_error(Status error) override { + void on_connection_error(Status error) final { LOG(ERROR) << "ERROR: " << error; } diff --git a/benchmark/bench_http_reader.cpp b/benchmark/bench_http_reader.cpp index b8870b396..b6d4651a0 100644 --- a/benchmark/bench_http_reader.cpp +++ b/benchmark/bench_http_reader.cpp @@ -17,11 +17,11 @@ static std::string http_query = "GET / HTTP/1.1\r\nConnection:keep-alive\r\nhost static const size_t block_size = 2500; class HttpReaderBench : public td::Benchmark { - std::string get_description() const override { + std::string get_description() const final { return "HttpReaderBench"; } - void run(int n) override { + void run(int n) final { int cnt = static_cast(block_size / http_query.size()); td::HttpQuery q; int parsed = 0; @@ -46,18 +46,18 @@ class HttpReaderBench : public td::Benchmark { td::ChainBufferReader reader_; td::HttpReader http_reader_; - void start_up() override { + void start_up() final { reader_ = writer_.extract_reader(); http_reader_.init(&reader_, 10000, 0); } }; class BufferBench : public td::Benchmark { - std::string get_description() const override { + std::string get_description() const final { return "BufferBench"; } - void run(int n) override { + void run(int n) final { int cnt = static_cast(block_size / http_query.size()); for (int i = 0; i < n; i += cnt) { for (int j = 0; j < cnt; j++) { @@ -73,17 +73,17 @@ class BufferBench : public td::Benchmark { td::ChainBufferReader reader_; td::HttpReader http_reader_; - void start_up() override { + void start_up() final { reader_ = writer_.extract_reader(); } }; class FindBoundaryBench : public td::Benchmark { - std::string get_description() const override { + std::string get_description() const final { return "FindBoundaryBench"; } - void run(int n) override { + void run(int n) final { int cnt = static_cast(block_size / http_query.size()); for (int i = 0; i < n; i += cnt) { for (int j = 0; j < cnt; j++) { @@ -103,7 +103,7 @@ class FindBoundaryBench : public td::Benchmark { td::ChainBufferReader reader_; td::HttpReader http_reader_; - void start_up() override { + void start_up() final { reader_ = writer_.extract_reader(); } }; diff --git a/benchmark/bench_http_server.cpp b/benchmark/bench_http_server.cpp index b4cfd045b..ca548c2d8 100644 --- a/benchmark/bench_http_server.cpp +++ b/benchmark/bench_http_server.cpp @@ -23,7 +23,7 @@ static int cnt = 0; class HelloWorld : public HttpInboundConnection::Callback { public: - void handle(unique_ptr query, ActorOwn connection) override { + void handle(unique_ptr query, ActorOwn connection) final { // LOG(ERROR) << *query; HttpHeaderCreator hc; Slice content = "hello world"; @@ -40,7 +40,7 @@ class HelloWorld : public HttpInboundConnection::Callback { send_closure(connection, &HttpInboundConnection::write_next, BufferSlice(res.ok())); send_closure(connection.release(), &HttpInboundConnection::write_ok); } - void hangup() override { + void hangup() final { LOG(ERROR) << "CLOSE " << cnt--; stop(); } @@ -49,10 +49,10 @@ class HelloWorld : public HttpInboundConnection::Callback { const int N = 0; class Server : public TcpListener::Callback { public: - void start_up() override { + void start_up() final { listener_ = create_actor("Listener", 8082, ActorOwn(actor_id(this))); } - void accept(SocketFd fd) override { + void accept(SocketFd fd) final { LOG(ERROR) << "ACCEPT " << cnt++; pos_++; auto scheduler_id = pos_ % (N != 0 ? N : 1) + (N != 0); @@ -61,7 +61,7 @@ class Server : public TcpListener::Callback { create_actor_on_scheduler("HelloWorld", scheduler_id)) .release(); } - void hangup() override { + void hangup() final { // may be it should be default?.. LOG(ERROR) << "Hanging up.."; stop(); diff --git a/benchmark/bench_http_server_cheat.cpp b/benchmark/bench_http_server_cheat.cpp index 84ebdcf86..f5cdb7a67 100644 --- a/benchmark/bench_http_server_cheat.cpp +++ b/benchmark/bench_http_server_cheat.cpp @@ -39,7 +39,7 @@ class HelloWorld : public Actor { std::string write_buf_; size_t write_pos_{0}; - void start_up() override { + void start_up() final { Scheduler::subscribe(socket_fd_.get_poll_info().extract_pollable_fd(this)); HttpHeaderCreator hc; Slice content = "hello world"; @@ -53,7 +53,7 @@ class HelloWorld : public Actor { hello_ = hc.finish(content).ok().str(); } - void loop() override { + void loop() final { auto status = do_loop(); if (status.is_error()) { Scheduler::unsubscribe(socket_fd_.get_poll_info().get_pollable_fd_ref()); @@ -100,16 +100,16 @@ class HelloWorld : public Actor { const int N = 0; class Server : public TcpListener::Callback { public: - void start_up() override { + void start_up() final { listener_ = create_actor("Listener", 8082, ActorOwn(actor_id(this))); } - void accept(SocketFd fd) override { + void accept(SocketFd fd) final { LOG(ERROR) << "ACCEPT " << cnt++; pos_++; auto scheduler_id = pos_ % (N != 0 ? N : 1) + (N != 0); create_actor_on_scheduler("HttpInboundConnection", scheduler_id, std::move(fd)).release(); } - void hangup() override { + void hangup() final { // may be it should be default?.. LOG(ERROR) << "Hanging up.."; stop(); diff --git a/benchmark/bench_http_server_fast.cpp b/benchmark/bench_http_server_fast.cpp index 16c9843c2..874582c43 100644 --- a/benchmark/bench_http_server_fast.cpp +++ b/benchmark/bench_http_server_fast.cpp @@ -31,11 +31,11 @@ class HttpEchoConnection : public Actor { BufferedFd fd_; HttpReader reader_; HttpQuery query_; - void start_up() override { + void start_up() final { Scheduler::subscribe(fd_.get_poll_info().extract_pollable_fd(this)); reader_.init(&fd_.input_buffer(), 1024 * 1024, 0); } - void tear_down() override { + void tear_down() final { Scheduler::unsubscribe_before_close(fd_.get_poll_info().get_pollable_fd_ref()); fd_.close(); } @@ -55,7 +55,7 @@ class HttpEchoConnection : public Actor { fd_.output_buffer().append(res.ok()); } - void loop() override { + void loop() final { sync_with_poll(fd_); auto status = [&] { TRY_STATUS(loop_read()); @@ -87,15 +87,15 @@ class HttpEchoConnection : public Actor { const int N = 8; class Server : public TcpListener::Callback { public: - void start_up() override { + void start_up() final { listener_ = create_actor("Listener", 8082, ActorOwn(actor_id(this))); } - void accept(SocketFd fd) override { + void accept(SocketFd fd) final { pos_++; auto scheduler_id = pos_ % (N != 0 ? N : 1) + (N != 0); create_actor_on_scheduler("HttpInboundConnection", scheduler_id, std::move(fd)).release(); } - void hangup() override { + void hangup() final { LOG(ERROR) << "Hanging up.."; stop(); } diff --git a/benchmark/bench_log.cpp b/benchmark/bench_log.cpp index 5d8cf8c7d..723d8931b 100644 --- a/benchmark/bench_log.cpp +++ b/benchmark/bench_log.cpp @@ -44,24 +44,24 @@ class IostreamWriteBench : public td::Benchmark { char buffer[BUFFER_SIZE]; public: - std::string get_description() const override { + std::string get_description() const final { return "ostream (to file, no buf, no flush)"; } - void start_up() override { + void start_up() final { file_name_ = create_tmp_file(); stream.open(file_name_.c_str()); CHECK(stream.is_open()); // stream.rdbuf()->pubsetbuf(buffer, BUFFER_SIZE); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { stream << "This is just for test" << 987654321 << '\n'; } } - void tear_down() override { + void tear_down() final { stream.close(); unlink(file_name_.c_str()); } @@ -75,24 +75,24 @@ class FILEWriteBench : public td::Benchmark { char buffer[BUFFER_SIZE]; public: - std::string get_description() const override { + std::string get_description() const final { return "std::fprintf (to file, no buf, no flush)"; } - void start_up() override { + void start_up() final { file_name_ = create_tmp_file(); file = fopen(file_name_.c_str(), "w"); // setvbuf(file, buffer, _IOFBF, BUFFER_SIZE); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { std::fprintf(file, "This is just for test%d\n", 987654321); // std::fflush(file); } } - void tear_down() override { + void tear_down() final { std::fclose(file); unlink(file_name_.c_str()); } @@ -103,17 +103,17 @@ class FILEWriteBench : public td::Benchmark { #define ALOG(...) __android_log_print(ANDROID_LOG_VERBOSE, "XXX", __VA_ARGS__) class ALogWriteBench : public td::Benchmark { public: - std::string get_description() const override { + std::string get_description() const final { return "android_log"; } - void start_up() override { + void start_up() final { } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { ALOG("This is just for test%d\n", 987654321); } } - void tear_down() override { + void tear_down() final { } }; #endif @@ -127,24 +127,24 @@ class LogWriteBench : public td::Benchmark { char buffer[BUFFER_SIZE]; public: - std::string get_description() const override { + std::string get_description() const final { return "td_log (slow in debug mode)"; } - void start_up() override { + void start_up() final { file_name_ = create_tmp_file(); stream.open(file_name_.c_str()); CHECK(stream.is_open()); old_buf = std::cerr.rdbuf(stream.rdbuf()); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { LOG(DEBUG) << "This is just for test" << 987654321; } } - void tear_down() override { + void tear_down() final { stream.close(); unlink(file_name_.c_str()); std::cerr.rdbuf(old_buf); diff --git a/benchmark/bench_misc.cpp b/benchmark/bench_misc.cpp index 69df64cd0..0b956b99f 100644 --- a/benchmark/bench_misc.cpp +++ b/benchmark/bench_misc.cpp @@ -123,16 +123,16 @@ class PipeBench : public Benchmark { public: int p[2]; - string get_description() const override { + string get_description() const final { return "pipe write + read int32"; } - void start_up() override { + void start_up() final { int res = pipe(p); CHECK(res == 0); } - void run(int n) override { + void run(int n) final { int res = 0; for (int i = 0; i < n; i++) { int val = 1; @@ -145,7 +145,7 @@ class PipeBench : public Benchmark { do_not_optimize_away(res); } - void tear_down() override { + void tear_down() final { close(p[0]); close(p[1]); } @@ -157,23 +157,23 @@ class SemBench : public Benchmark { sem_t sem; public: - string get_description() const override { + string get_description() const final { return "sem post + wait"; } - void start_up() override { + void start_up() final { int err = sem_init(&sem, 0, 0); CHECK(err != -1); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { sem_post(&sem); sem_wait(&sem); } } - void tear_down() override { + void tear_down() final { sem_destroy(&sem); } }; @@ -182,13 +182,13 @@ class SemBench : public Benchmark { #if !TD_WINDOWS class UtimeBench : public Benchmark { public: - void start_up() override { + void start_up() final { FileFd::open("test", FileFd::Flags::Create | FileFd::Flags::Write).move_as_ok().close(); } - string get_description() const override { + string get_description() const final { return "utime"; } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { int err = utime("test", nullptr); CHECK(err >= 0); @@ -211,18 +211,18 @@ BENCH(Pwrite, "pwrite") { } class CreateFileBench : public Benchmark { - string get_description() const override { + string get_description() const final { return "create_file"; } - void start_up() override { + void start_up() final { mkdir("A").ensure(); } - void run(int n) override { + void run(int n) final { for (int i = 0; i < n; i++) { FileFd::open(PSLICE() << "A/" << i, FileFd::Flags::Write | FileFd::Flags::Create).move_as_ok().close(); } } - void tear_down() override { + void tear_down() final { td::walk_path("A/", [&](CSlice path, auto type) { if (type == td::WalkPath::Type::ExitDir) { rmdir(path).ignore(); @@ -234,16 +234,16 @@ class CreateFileBench : public Benchmark { }; class WalkPathBench : public Benchmark { - string get_description() const override { + string get_description() const final { return "walk_path"; } - void start_up_n(int n) override { + void start_up_n(int n) final { mkdir("A").ensure(); for (int i = 0; i < n; i++) { FileFd::open(PSLICE() << "A/" << i, FileFd::Flags::Write | FileFd::Flags::Create).move_as_ok().close(); } } - void run(int n) override { + void run(int n) final { int cnt = 0; td::walk_path("A/", [&](CSlice path, auto type) { if (type == td::WalkPath::Type::EnterDir) { @@ -253,7 +253,7 @@ class WalkPathBench : public Benchmark { cnt++; }).ignore(); } - void tear_down() override { + void tear_down() final { td::walk_path("A/", [&](CSlice path, auto type) { if (type == td::WalkPath::Type::ExitDir) { rmdir(path).ignore(); @@ -267,12 +267,12 @@ class WalkPathBench : public Benchmark { #if !TD_THREAD_UNSUPPORTED template class AtomicReleaseIncBench : public Benchmark { - string get_description() const override { + string get_description() const final { return PSTRING() << "AtomicReleaseInc" << ThreadN; } static std::atomic a_; - void run(int n) override { + void run(int n) final { std::vector threads; for (int i = 0; i < ThreadN; i++) { threads.emplace_back([&] { @@ -291,12 +291,12 @@ std::atomic AtomicReleaseIncBench::a_; template class AtomicReleaseCasIncBench : public Benchmark { - string get_description() const override { + string get_description() const final { return PSTRING() << "AtomicReleaseCasInc" << ThreadN; } static std::atomic a_; - void run(int n) override { + void run(int n) final { std::vector threads; for (int i = 0; i < ThreadN; i++) { threads.emplace_back([&] { @@ -317,11 +317,11 @@ std::atomic AtomicReleaseCasIncBench::a_; template class RwMutexReadBench : public Benchmark { - string get_description() const override { + string get_description() const final { return PSTRING() << "RwMutexRead" << ThreadN; } RwMutex mutex_; - void run(int n) override { + void run(int n) final { std::vector threads; for (int i = 0; i < ThreadN; i++) { threads.emplace_back([&] { @@ -337,11 +337,11 @@ class RwMutexReadBench : public Benchmark { }; template class RwMutexWriteBench : public Benchmark { - string get_description() const override { + string get_description() const final { return PSTRING() << "RwMutexWrite" << ThreadN; } RwMutex mutex_; - void run(int n) override { + void run(int n) final { std::vector threads; for (int i = 0; i < ThreadN; i++) { threads.emplace_back([&] { diff --git a/benchmark/bench_queue.cpp b/benchmark/bench_queue.cpp index a1218fe38..008f2f641 100644 --- a/benchmark/bench_queue.cpp +++ b/benchmark/bench_queue.cpp @@ -575,16 +575,16 @@ class QueueBenchmark2 : public td::Benchmark { explicit QueueBenchmark2(int connections_n = 1) : connections_n(connections_n) { } - std::string get_description() const override { + std::string get_description() const final { return "QueueBenchmark2"; } - void start_up() override { + void start_up() final { client.init(); server.init(); } - void tear_down() override { + void tear_down() final { client.destroy(); server.destroy(); } @@ -689,7 +689,7 @@ class QueueBenchmark2 : public td::Benchmark { return static_cast(arg)->server_run(nullptr); } - void run(int n) override { + void run(int n) final { pthread_t client_thread_id; pthread_t server_thread_id; @@ -713,16 +713,16 @@ class QueueBenchmark : public td::Benchmark { explicit QueueBenchmark(int connections_n = 1) : connections_n(connections_n) { } - std::string get_description() const override { + std::string get_description() const final { return "QueueBenchmark"; } - void start_up() override { + void start_up() final { client.init(); server.init(); } - void tear_down() override { + void tear_down() final { client.destroy(); server.destroy(); } @@ -821,7 +821,7 @@ class QueueBenchmark : public td::Benchmark { return static_cast(arg)->server_run(nullptr); } - void run(int n) override { + void run(int n) final { pthread_t client_thread_id; pthread_t server_thread_id; @@ -869,7 +869,7 @@ class RingBenchmark : public td::Benchmark { return static_cast(arg)->run(); } - void start_up() override { + void start_up() final { for (int i = 0; i < QN; i++) { q[i].int_id = i; q[i].queue.init(); @@ -877,13 +877,13 @@ class RingBenchmark : public td::Benchmark { } } - void tear_down() override { + void tear_down() final { for (int i = 0; i < QN; i++) { q[i].queue.destroy(); } } - void run(int n) override { + void run(int n) final { for (int i = 0; i < QN; i++) { pthread_create(&q[i].id, nullptr, run_gateway, &q[i]); } diff --git a/benchmark/bench_tddb.cpp b/benchmark/bench_tddb.cpp index f71ac5be6..5f82a153d 100644 --- a/benchmark/bench_tddb.cpp +++ b/benchmark/bench_tddb.cpp @@ -39,15 +39,15 @@ static Status init_db(SqliteDb &db) { class MessagesDbBench : public Benchmark { public: - string get_description() const override { + string get_description() const final { return "MessagesDb"; } - void start_up() override { + void start_up() final { LOG(ERROR) << "START UP"; do_start_up().ensure(); scheduler_->start(); } - void run(int n) override { + void run(int n) final { auto guard = scheduler_->get_main_guard(); for (int i = 0; i < n; i += 20) { auto dialog_id = DialogId{UserId{Random::fast(1, 100)}}; @@ -67,7 +67,7 @@ class MessagesDbBench : public Benchmark { } } } - void tear_down() override { + void tear_down() final { scheduler_->run_main(0.1); { auto guard = scheduler_->get_main_guard(); diff --git a/td/generate/tl_writer_c.h b/td/generate/tl_writer_c.h index 3a911663c..b3a81e6a1 100644 --- a/td/generate/tl_writer_c.h +++ b/td/generate/tl_writer_c.h @@ -24,47 +24,47 @@ class TlWriterCCommon : public tl::TL_writer { : TL_writer(name), is_header_(is_header), prefix_(prefix) { } - int get_max_arity() const override { + int get_max_arity() const final { return 0; } - bool is_built_in_simple_type(const std::string &name) const override { + bool is_built_in_simple_type(const std::string &name) const final { return name == "Bool" || name == "Int32" || name == "Int53" || name == "Int64" || name == "Double" || name == "String" || name == "Bytes"; } - bool is_built_in_complex_type(const std::string &name) const override { + bool is_built_in_complex_type(const std::string &name) const final { return name == "Vector"; } - bool is_type_bare(const tl::tl_type *t) const override { + bool is_type_bare(const tl::tl_type *t) const final { return t->simple_constructors <= 1 || (is_built_in_simple_type(t->name) && t->name != "Bool") || is_built_in_complex_type(t->name); } - std::vector get_parsers() const override { + std::vector get_parsers() const final { return {}; } - int get_parser_type(const tl::tl_combinator *t, const std::string &name) const override { + int get_parser_type(const tl::tl_combinator *t, const std::string &name) const final { return 0; } - std::vector get_storers() const override { + std::vector get_storers() const final { return {}; } - std::vector get_additional_functions() const override { + std::vector get_additional_functions() const final { return {"TdConvertToInternal", "TdConvertFromInternal", "TdSerialize", "TdToString", "TdDestroyObject", "TdStackStorer", "TdStackFetcher", "enum"}; } - int get_storer_type(const tl::tl_combinator *t, const std::string &name) const override { + int get_storer_type(const tl::tl_combinator *t, const std::string &name) const final { return name == "to_string" || name == "to_cpp_string"; } - std::string gen_base_tl_class_name() const override { + std::string gen_base_tl_class_name() const final { return "Object"; } - std::string gen_base_type_class_name(int arity) const override { + std::string gen_base_type_class_name(int arity) const final { assert(arity == 0); return "Object"; } - std::string gen_base_function_class_name() const override { + std::string gen_base_function_class_name() const final { return "Function"; } @@ -118,13 +118,13 @@ class TlWriterCCommon : public tl::TL_writer { return name; } - std::string gen_class_name(std::string name) const override { + std::string gen_class_name(std::string name) const final { if (name == "Object" || name == "#") { assert(false); } return to_CamelCase(name); } - std::string gen_field_name(std::string name) const override { + std::string gen_field_name(std::string name) const final { return gen_native_field_name(name); } @@ -220,10 +220,10 @@ class TlWriterCCommon : public tl::TL_writer { return !force ? ("struct Td" + gen_main_class_name(t) + " *") : gen_main_class_name(t); } - std::string gen_type_name(const tl::tl_tree_type *tree_type) const override { + std::string gen_type_name(const tl::tl_tree_type *tree_type) const final { return gen_type_name(tree_type, false); } - std::string gen_output_begin() const override { + std::string gen_output_begin() const final { if (is_header_ == 1) { return "#pragma once\n" "#ifdef __cplusplus\n" @@ -279,7 +279,7 @@ class TlWriterCCommon : public tl::TL_writer { "#include \"td/utils/tl_storers.h\"\n" "\n"; } - std::string gen_output_end() const override { + std::string gen_output_end() const final { if (is_header_ == 1) { return "#ifdef __cplusplus\n" "}\n" @@ -290,7 +290,7 @@ class TlWriterCCommon : public tl::TL_writer { return ""; } - std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const override { + std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const final { if (is_header_ != 1 || class_name == "") { return ""; } @@ -304,7 +304,7 @@ class TlWriterCCommon : public tl::TL_writer { } std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override { + bool is_proxy) const final { if (is_header_ != 1 || class_name == "") { return ""; } @@ -315,12 +315,12 @@ class TlWriterCCommon : public tl::TL_writer { } return "struct Td" + class_name + " {\n" + " int ID;\n int refcnt;\n" + tail; } - std::string gen_class_end() const override { + std::string gen_class_end() const final { return ""; } std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override { + const std::string &field_name) const final { if (is_header_ != 1 || class_name == "") { return ""; } @@ -328,14 +328,14 @@ class TlWriterCCommon : public tl::TL_writer { } std::string gen_store_function_begin(const std::string &storer_name, const std::string &class_name, int arity, - std::vector &vars, int storer_type) const override { + std::vector &vars, int storer_type) const final { return ""; } - std::string gen_store_function_end(const std::vector &vars, int storer_type) const override { + std::string gen_store_function_end(const std::vector &vars, int storer_type) const final { return ""; } - std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const override { + std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const final { if (!is_default || is_header_ == -1 || class_name == "") { return ""; } @@ -348,7 +348,7 @@ class TlWriterCCommon : public tl::TL_writer { return ss.str(); } std::string gen_constructor_parameter(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override { + bool is_default) const final { if (!is_default || is_header_ == -1) { return ""; } @@ -359,10 +359,10 @@ class TlWriterCCommon : public tl::TL_writer { return ss.str(); } std::string gen_constructor_field_init(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override { + bool is_default) const final { return ""; } - std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const override { + std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const final { if (!is_default || is_header_ == -1) { return ""; } @@ -389,7 +389,7 @@ class TlWriterCCommon : public tl::TL_writer { return ss.str(); } std::string gen_additional_function(const std::string &function_name, const tl::tl_combinator *t, - bool is_function) const override { + bool is_function) const final { std::stringstream ss; if (function_name == "enum") { return ss.str(); @@ -551,7 +551,7 @@ class TlWriterCCommon : public tl::TL_writer { explicit file_store_methods_to_td(const class TlWriterCCommon *cl) : cl(cl) { } void store_simple_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { if (type_name == "String") { ss << offset << res_var << " = (" << var << ") ? " << var << ": \"\";\n"; } else if (type_name == "Bytes") { @@ -563,35 +563,35 @@ class TlWriterCCommon : public tl::TL_writer { } } void store_common_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { ss << offset << res_var << " = TdConvertToInternal (" << var << ");\n"; } void store_array_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { } void store_array_el(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string idx) const override { + std::string idx) const final { ss << offset << res_var << ".push_back (std::move (" << var << "));\n"; } void store_array_finish(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { } - void store_nil(std::stringstream &ss, std::string offset) const override { + void store_nil(std::stringstream &ss, std::string offset) const final { ss << offset << "return nullptr;\n"; } std::string store_field_start(std::stringstream &ss, std::string offset, int depth, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { std::string res_var = "v" + int_to_string(depth); ss << offset << cl->gen_native_type_name(tree_type, true) << " " << res_var << ";\n"; return res_var; } - void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const override { + void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const final { } void store_arg_finish(std::stringstream &ss, std::string offset, std::string arg_name, - std::string res_var) const override { + std::string res_var) const final { } void store_constructor_finish(std::stringstream &ss, std::string offset, const tl::tl_combinator *t, - std::vector res_var) const override { + std::vector res_var) const final { auto native_class_name = cl->gen_native_class_name(t->name); ss << offset << "return td::td_api::make_object("; bool is_first = true; @@ -613,7 +613,7 @@ class TlWriterCCommon : public tl::TL_writer { explicit file_store_methods_destroy(const class TlWriterCCommon *cl) : cl(cl) { } void store_simple_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { if (type_name == "String") { ss << offset << "free (" << var << ");\n"; } else if (type_name == "Bytes") { @@ -621,32 +621,32 @@ class TlWriterCCommon : public tl::TL_writer { } } void store_common_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { ss << offset << "TdDestroyObject (" << var << ");\n"; } void store_array_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { } void store_array_el(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string idx) const override { + std::string idx) const final { } void store_array_finish(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { ss << offset << "delete[] " << var << "->data;\n" << offset << "delete " << var << ";\n"; } - void store_nil(std::stringstream &ss, std::string offset) const override { + void store_nil(std::stringstream &ss, std::string offset) const final { ss << offset << "return;\n"; } std::string store_field_start(std::stringstream &ss, std::string offset, int depth, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { return ""; } - void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const override { + void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const final { } void store_arg_finish(std::stringstream &ss, std::string offset, std::string arg_name, - std::string res_var) const override { + std::string res_var) const final { } - void store_constructor_start(std::stringstream &ss, std::string offset, const tl::tl_combinator *t) const override { + void store_constructor_start(std::stringstream &ss, std::string offset, const tl::tl_combinator *t) const final { ss << "#if TD_MSVC\n"; ss << offset << "static_assert (sizeof (long) == sizeof (var->refcnt), \"Illegal InterlockedDecrement\");\n"; ss << offset << "int ref = InterlockedDecrement (reinterpret_cast(&var->refcnt));\n"; @@ -661,7 +661,7 @@ class TlWriterCCommon : public tl::TL_writer { ss << offset << "}\n"; } void store_constructor_finish(std::stringstream &ss, std::string offset, const tl::tl_combinator *t, - std::vector res_var) const override { + std::vector res_var) const final { ss << offset << "delete var;\n"; } const class TlWriterCCommon *cl; @@ -670,7 +670,7 @@ class TlWriterCCommon : public tl::TL_writer { explicit file_store_methods_stack(const class TlWriterCCommon *cl) : cl(cl) { } void store_simple_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { if (type_name == "String") { ss << offset << "M->pack_string (" << var << ");\n"; } else if (type_name == "Bytes") { @@ -686,41 +686,41 @@ class TlWriterCCommon : public tl::TL_writer { } } void store_common_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { ss << offset << "TdStackStorer (" << var << ", M);\n"; } void store_array_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { ss << offset << "M->new_array ();\n"; } void store_array_el(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string idx) const override { + std::string idx) const final { ss << offset << "M->new_arr_field (" << idx << ");\n"; } void store_array_finish(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { } - void store_nil(std::stringstream &ss, std::string offset) const override { + void store_nil(std::stringstream &ss, std::string offset) const final { ss << offset << "M->pack_bool (0);\n" << offset << "return;\n"; } std::string store_field_start(std::stringstream &ss, std::string offset, int depth, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { return ""; } - void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const override { + void store_field_finish(std::stringstream &ss, std::string offset, std::string res_var) const final { } void store_arg_finish(std::stringstream &ss, std::string offset, std::string arg_name, - std::string res_var) const override { + std::string res_var) const final { ss << offset << "M->new_field (\"" << arg_name << "\");\n"; } - void store_constructor_start(std::stringstream &ss, std::string offset, const tl::tl_combinator *t) const override { + void store_constructor_start(std::stringstream &ss, std::string offset, const tl::tl_combinator *t) const final { ss << offset << "M->new_table ();\n"; auto class_name = cl->gen_class_name(t->name); ss << offset << "M->pack_string (\"" << class_name << "\");\n"; ss << offset << "M->new_field (\"ID\");\n"; } void store_constructor_finish(std::stringstream &ss, std::string offset, const tl::tl_combinator *t, - std::vector res_var) const override { + std::vector res_var) const final { } const class TlWriterCCommon *cl; }; @@ -771,11 +771,11 @@ class TlWriterCCommon : public tl::TL_writer { explicit file_fetch_methods_from_td(const class TlWriterCCommon *cl) : cl(cl) { } std::string fetch_field_start(std::stringstream &ss, std::string offset, int depth, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { return ""; } void fetch_simple_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { if (type_name == "String") { ss << offset << res_var << " = (" << var << ".length ()) ? td::str_dup (" << var << ") : nullptr;\n"; } else if (type_name == "Bytes") { @@ -791,7 +791,7 @@ class TlWriterCCommon : public tl::TL_writer { } } void fetch_common_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { auto native_type_name = cl->gen_native_type_name(tree_type, false); ss << offset << "if (!" << var << ") {\n" << offset << " " << res_var << " = nullptr;\n" @@ -801,19 +801,19 @@ class TlWriterCCommon : public tl::TL_writer { << offset << "}\n"; } void fetch_array_size(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { ss << offset << res_var << " = (int)" << var << ".size ();\n"; } std::string fetch_array_field_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string idx, const tl::tl_tree_type *tree_type) const override { + std::string idx, const tl::tl_tree_type *tree_type) const final { return var + "[" + idx + "]"; } std::string fetch_dict_field_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string key, const tl::tl_tree_type *tree_type) const override { + std::string key, const tl::tl_tree_type *tree_type) const final { return var + "." + key; } void fetch_field_finish(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { } const class TlWriterCCommon *cl; }; @@ -822,11 +822,11 @@ class TlWriterCCommon : public tl::TL_writer { explicit file_fetch_methods_stack(const class TlWriterCCommon *cl) : cl(cl) { } std::string fetch_field_start(std::stringstream &ss, std::string offset, int depth, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { return ""; } void fetch_simple_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string type_name) const override { + std::string type_name) const final { if (type_name == "String") { ss << offset << res_var << " = M->get_string ();\n"; } else if (type_name == "Bytes") { @@ -842,7 +842,7 @@ class TlWriterCCommon : public tl::TL_writer { } } void fetch_common_type(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { auto class_name = cl->gen_main_class_name(tree_type->type); ss << offset << "if (M->is_nil ()) {\n" << offset << " " << res_var << " = nullptr;\n" @@ -851,21 +851,21 @@ class TlWriterCCommon : public tl::TL_writer { << offset << "}\n"; } void fetch_array_size(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { ss << offset << res_var << " = M->get_arr_size ();\n"; } std::string fetch_array_field_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string idx, const tl::tl_tree_type *tree_type) const override { + std::string idx, const tl::tl_tree_type *tree_type) const final { ss << offset << " M->get_arr_field (" << idx << ");\n"; return ""; } std::string fetch_dict_field_start(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - std::string key, const tl::tl_tree_type *tree_type) const override { + std::string key, const tl::tl_tree_type *tree_type) const final { ss << offset << "M->get_field (\"" << key << "\");\n"; return ""; } void fetch_field_finish(std::stringstream &ss, std::string offset, std::string res_var, std::string var, - const tl::tl_tree_type *tree_type) const override { + const tl::tl_tree_type *tree_type) const final { ss << offset << "M->pop ();\n"; } const class TlWriterCCommon *cl; @@ -949,74 +949,74 @@ class TlWriterCCommon : public tl::TL_writer { << "}\n"; } - std::string gen_array_type_name(const tl::tl_tree_array *arr, const std::string &field_name) const override { + std::string gen_array_type_name(const tl::tl_tree_array *arr, const std::string &field_name) const final { assert(false); return std::string(); } - std::string gen_var_type_name() const override { + std::string gen_var_type_name() const final { assert(false); return std::string(); } - std::string gen_int_const(const tl::tl_tree *tree_c, const std::vector &vars) const override { + std::string gen_int_const(const tl::tl_tree *tree_c, const std::vector &vars) const final { assert(false); return std::string(); } - std::string gen_var_name(const tl::var_description &desc) const override { + std::string gen_var_name(const tl::var_description &desc) const final { assert(false); return ""; } - std::string gen_parameter_name(int index) const override { + std::string gen_parameter_name(int index) const final { assert(false); return ""; } - std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const override { + std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const final { return ""; } std::string gen_vars(const tl::tl_combinator *t, const tl::tl_tree_type *result_type, - std::vector &vars) const override { + std::vector &vars) const final { assert(vars.empty()); return ""; } - std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const override { + std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const final { assert(vars.empty()); return ""; } std::string gen_uni(const tl::tl_tree_type *result_type, std::vector &vars, - bool check_negative) const override { + bool check_negative) const final { assert(result_type->children.empty()); return ""; } - std::string gen_constructor_id_store(std::int32_t id, int storer_type) const override { + std::string gen_constructor_id_store(std::int32_t id, int storer_type) const final { return ""; } std::string gen_field_fetch(int field_num, const tl::arg &a, std::vector &vars, bool flat, - int parser_type) const override { + int parser_type) const final { return ""; } std::string gen_field_store(const tl::arg &a, std::vector &vars, bool flat, - int storer_type) const override { + int storer_type) const final { return ""; } std::string gen_type_fetch(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int parser_type) const override { + const std::vector &vars, int parser_type) const final { assert(vars.empty()); return ""; } std::string gen_type_store(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int storer_type) const override { + const std::vector &vars, int storer_type) const final { return ""; } - std::string gen_var_type_fetch(const tl::arg &a) const override { + std::string gen_var_type_fetch(const tl::arg &a) const final { assert(false); return ""; } - std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const override { + std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const final { if (is_proxy || is_header_ != 1) { return ""; } @@ -1024,47 +1024,47 @@ class TlWriterCCommon : public tl::TL_writer { return ""; } - std::string gen_function_result_type(const tl::tl_tree *result) const override { + std::string gen_function_result_type(const tl::tl_tree *result) const final { return ""; } std::string gen_fetch_function_begin(const std::string &parser_name, const std::string &class_name, const std::string &parent_class_name, int arity, int field_count, - std::vector &vars, int parser_type) const override { + std::vector &vars, int parser_type) const final { return ""; } std::string gen_fetch_function_end(bool has_parent, int field_count, const std::vector &vars, - int parser_type) const override { + int parser_type) const final { return ""; } std::string gen_fetch_function_result_begin(const std::string &parser_name, const std::string &class_name, - const tl::tl_tree *result) const override { + const tl::tl_tree *result) const final { return ""; } - std::string gen_fetch_function_result_end() const override { + std::string gen_fetch_function_result_end() const final { return ""; } std::string gen_fetch_function_result_any_begin(const std::string &parser_name, const std::string &class_name, - bool is_proxy) const override { + bool is_proxy) const final { return ""; } - std::string gen_fetch_function_result_any_end(bool is_proxy) const override { + std::string gen_fetch_function_result_any_end(bool is_proxy) const final { return ""; } - std::string gen_fetch_switch_begin() const override { + std::string gen_fetch_switch_begin() const final { return ""; } - std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const override { + std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const final { return ""; } - std::string gen_fetch_switch_end() const override { + std::string gen_fetch_switch_end() const final { return ""; } std::string gen_additional_proxy_function_begin(const std::string &function_name, const tl::tl_type *type, - const std::string &name, int arity, bool is_function) const override { + const std::string &name, int arity, bool is_function) const final { std::stringstream ss; std::string class_name; std::string native_class_name; @@ -1208,7 +1208,7 @@ class TlWriterCCommon : public tl::TL_writer { } std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const std::string &class_name, int arity) const override { + const std::string &class_name, int arity) const final { if (is_header_ != (function_name == "enum" ? 1 : 0)) { return ""; } @@ -1243,8 +1243,7 @@ class TlWriterCCommon : public tl::TL_writer { } std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const tl::tl_combinator *t, int arity, - bool is_function) const override { + const tl::tl_combinator *t, int arity, bool is_function) const final { if (is_header_ != (function_name == "enum" ? 1 : 0)) { return ""; } @@ -1321,7 +1320,7 @@ class TlWriterCCommon : public tl::TL_writer { } } std::string gen_additional_proxy_function_end(const std::string &function_name, const tl::tl_type *type, - bool is_function) const override { + bool is_function) const final { if (is_header_ != (function_name == "enum" ? 1 : 0)) { return ""; } @@ -1352,7 +1351,7 @@ class TlWriterCCommon : public tl::TL_writer { } } - int get_additional_function_type(const std::string &additional_function_name) const override { + int get_additional_function_type(const std::string &additional_function_name) const final { return 2; } }; diff --git a/td/generate/tl_writer_dotnet.h b/td/generate/tl_writer_dotnet.h index 80b1d4655..0fbcadcc4 100644 --- a/td/generate/tl_writer_dotnet.h +++ b/td/generate/tl_writer_dotnet.h @@ -24,52 +24,52 @@ class TlWriterDotNet : public TL_writer { TlWriterDotNet(const std::string &name, bool is_header, const std::string &prefix = "") : TL_writer(name), is_header_(is_header), prefix_(prefix) { } - int get_max_arity(void) const override { + int get_max_arity(void) const final { return 0; } - bool is_built_in_simple_type(const std::string &name) const override { + bool is_built_in_simple_type(const std::string &name) const final { return name == "Bool" || name == "Int32" || name == "Int53" || name == "Int64" || name == "Double" || name == "String" || name == "Bytes"; } - bool is_built_in_complex_type(const std::string &name) const override { + bool is_built_in_complex_type(const std::string &name) const final { return name == "Vector"; } - bool is_type_bare(const tl_type *t) const override { + bool is_type_bare(const tl_type *t) const final { return t->simple_constructors <= 1 || (is_built_in_simple_type(t->name) && t->name != "Bool") || is_built_in_complex_type(t->name); } - std::vector get_parsers(void) const override { + std::vector get_parsers(void) const final { return {"FromUnmanaged"}; } - int get_parser_type(const tl_combinator *t, const std::string &name) const override { + int get_parser_type(const tl_combinator *t, const std::string &name) const final { return 0; } - Mode get_parser_mode(int type) const override { + Mode get_parser_mode(int type) const final { return All; // Server; } - std::vector get_storers(void) const override { + std::vector get_storers(void) const final { return {"ToUnmanaged", "ToString"}; } - std::vector get_additional_functions(void) const override { + std::vector get_additional_functions(void) const final { return {"ToUnmanaged", "FromUnmanaged"}; } - int get_storer_type(const tl_combinator *t, const std::string &name) const override { + int get_storer_type(const tl_combinator *t, const std::string &name) const final { return name == "ToString"; } - Mode get_storer_mode(int type) const override { + Mode get_storer_mode(int type) const final { return type <= 1 ? All : Server; } - std::string gen_base_tl_class_name(void) const override { + std::string gen_base_tl_class_name(void) const final { return "BaseObject"; } - std::string gen_base_type_class_name(int arity) const override { + std::string gen_base_type_class_name(int arity) const final { assert(arity == 0); return "Object"; } - std::string gen_base_function_class_name(void) const override { + std::string gen_base_function_class_name(void) const final { return "Function"; } @@ -123,19 +123,19 @@ class TlWriterDotNet : public TL_writer { return name; } - std::string gen_class_name(std::string name) const override { + std::string gen_class_name(std::string name) const final { if (name == "Object" || name == "#") { assert(0); } return to_CamelCase(name); } - std::string gen_field_name(std::string name) const override { + std::string gen_field_name(std::string name) const final { assert(name.size() > 0); assert(is_alnum(name.back())); return to_CamelCase(name); } - std::string gen_type_name(const tl_tree_type *tree_type) const override { + std::string gen_type_name(const tl_tree_type *tree_type) const final { const tl_type *t = tree_type->type; const std::string &name = t->name; @@ -178,20 +178,20 @@ class TlWriterDotNet : public TL_writer { return gen_main_class_name(t) + "^"; } - std::string gen_output_begin(void) const override { + std::string gen_output_begin(void) const final { return prefix_ + "#include \"td/tl/tl_dotnet_object.h\"\n\n" "namespace Telegram {\n" "namespace Td {\n" "namespace Api {\n"; } - std::string gen_output_end() const override { + std::string gen_output_end() const final { return "}\n" "}\n" "}\n"; } - std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const override { + std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const final { if (!is_header_) { return ""; } @@ -201,7 +201,7 @@ class TlWriterDotNet : public TL_writer { } std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override { + bool is_proxy) const final { if (!is_header_) { return ""; } @@ -212,12 +212,12 @@ class TlWriterDotNet : public TL_writer { << " public:\n"; return ss.str(); } - std::string gen_class_end(void) const override { + std::string gen_class_end(void) const final { return ""; } std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override { + const std::string &field_name) const final { if (!is_header_) { return ""; } @@ -245,7 +245,7 @@ class TlWriterDotNet : public TL_writer { } std::string gen_store_function_begin(const std::string &storer_name, const std::string &class_name, int arity, - std::vector &vars, int storer_type) const override { + std::vector &vars, int storer_type) const final { if (storer_type < 0) { return ""; } @@ -266,18 +266,18 @@ class TlWriterDotNet : public TL_writer { } return ss.str(); } - std::string gen_store_function_end(const std::vector &vars, int storer_type) const override { + std::string gen_store_function_end(const std::vector &vars, int storer_type) const final { return ""; } - std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const override { + std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const final { std::stringstream ss; ss << "\n"; ss << (is_header_ ? " " : gen_class_name(class_name) + "::") << gen_class_name(class_name) << "("; return ss.str(); } std::string gen_constructor_parameter(int field_num, const std::string &class_name, const arg &a, - bool is_default) const override { + bool is_default) const final { if (is_default) { return ""; } @@ -296,7 +296,7 @@ class TlWriterDotNet : public TL_writer { return ss.str(); } std::string gen_constructor_field_init(int field_num, const std::string &class_name, const arg &a, - bool is_default) const override { + bool is_default) const final { if (is_default || is_header_) { return ""; } @@ -313,7 +313,7 @@ class TlWriterDotNet : public TL_writer { return ss.str(); } - std::string gen_constructor_end(const tl_combinator *t, int field_count, bool is_default) const override { + std::string gen_constructor_end(const tl_combinator *t, int field_count, bool is_default) const final { if (is_header_) { return ");\n"; } @@ -325,7 +325,7 @@ class TlWriterDotNet : public TL_writer { return ss.str(); } std::string gen_additional_function(const std::string &function_name, const tl_combinator *t, - bool is_function) const override { + bool is_function) const final { std::stringstream ss; if (is_header_ && function_name == "ToUnmanaged") { ss << "};\n"; @@ -390,124 +390,124 @@ class TlWriterDotNet : public TL_writer { ss << ");\n}\n"; } - std::string gen_array_type_name(const tl_tree_array *arr, const std::string &field_name) const override { + std::string gen_array_type_name(const tl_tree_array *arr, const std::string &field_name) const final { assert(0); return std::string(); } - std::string gen_var_type_name(void) const override { + std::string gen_var_type_name(void) const final { assert(0); return std::string(); } - std::string gen_int_const(const tl_tree *tree_c, const std::vector &vars) const override { + std::string gen_int_const(const tl_tree *tree_c, const std::vector &vars) const final { assert(0); return std::string(); } - std::string gen_var_name(const var_description &desc) const override { + std::string gen_var_name(const var_description &desc) const final { assert(0); return ""; } - std::string gen_parameter_name(int index) const override { + std::string gen_parameter_name(int index) const final { assert(0); return ""; } - std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const override { + std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const final { return ""; } std::string gen_vars(const tl_combinator *t, const tl_tree_type *result_type, - std::vector &vars) const override { + std::vector &vars) const final { assert(vars.empty()); return ""; } - std::string gen_function_vars(const tl_combinator *t, std::vector &vars) const override { + std::string gen_function_vars(const tl_combinator *t, std::vector &vars) const final { assert(vars.empty()); return ""; } std::string gen_uni(const tl_tree_type *result_type, std::vector &vars, - bool check_negative) const override { + bool check_negative) const final { assert(result_type->children.empty()); return ""; } - std::string gen_constructor_id_store(std::int32_t id, int storer_type) const override { + std::string gen_constructor_id_store(std::int32_t id, int storer_type) const final { return ""; } std::string gen_field_fetch(int field_num, const arg &a, std::vector &vars, bool flat, - int parser_type) const override { + int parser_type) const final { return ""; // std::stringstream ss; // ss << gen_field_name(a.name) << " = from_unmanaged(from->" << // gen_native_field_name(a.name) << ");\n"; return ss.str(); } std::string gen_field_store(const arg &a, std::vector &vars, bool flat, - int storer_type) const override { + int storer_type) const final { return ""; // std::stringstream ss; // ss << "to_unmanaged(" << gen_field_name(a.name) << ")"; // return ss.str(); } std::string gen_type_fetch(const std::string &field_name, const tl_tree_type *tree_type, - const std::vector &vars, int parser_type) const override { + const std::vector &vars, int parser_type) const final { assert(vars.empty()); return ""; } std::string gen_type_store(const std::string &field_name, const tl_tree_type *tree_type, - const std::vector &vars, int storer_type) const override { + const std::vector &vars, int storer_type) const final { return ""; } - std::string gen_var_type_fetch(const arg &a) const override { + std::string gen_var_type_fetch(const arg &a) const final { assert(0); return ""; } - std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const override { + std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const final { return ""; } - std::string gen_function_result_type(const tl_tree *result) const override { + std::string gen_function_result_type(const tl_tree *result) const final { return ""; } std::string gen_fetch_function_begin(const std::string &parser_name, const std::string &class_name, const std::string &parent_class_name, int arity, int field_count, - std::vector &vars, int parser_type) const override { + std::vector &vars, int parser_type) const final { return ""; } std::string gen_fetch_function_end(bool has_parent, int field_count, const std::vector &vars, - int parser_type) const override { + int parser_type) const final { return ""; } std::string gen_fetch_function_result_begin(const std::string &parser_name, const std::string &class_name, - const tl_tree *result) const override { + const tl_tree *result) const final { return ""; } - std::string gen_fetch_function_result_end(void) const override { + std::string gen_fetch_function_result_end(void) const final { return ""; } std::string gen_fetch_function_result_any_begin(const std::string &parser_name, const std::string &class_name, - bool is_proxy) const override { + bool is_proxy) const final { return ""; } - std::string gen_fetch_function_result_any_end(bool is_proxy) const override { + std::string gen_fetch_function_result_any_end(bool is_proxy) const final { return ""; } - std::string gen_fetch_switch_begin(void) const override { + std::string gen_fetch_switch_begin(void) const final { return ""; } - std::string gen_fetch_switch_case(const tl_combinator *t, int arity) const override { + std::string gen_fetch_switch_case(const tl_combinator *t, int arity) const final { return ""; } - std::string gen_fetch_switch_end(void) const override { + std::string gen_fetch_switch_end(void) const final { return ""; } std::string gen_additional_proxy_function_begin(const std::string &function_name, const tl_type *type, - const std::string &name, int arity, bool is_function) const override { + const std::string &name, int arity, bool is_function) const final { std::stringstream ss; if (is_header_ && function_name == "ToUnmanaged") { ss << "};\n"; @@ -542,15 +542,15 @@ class TlWriterDotNet : public TL_writer { return ss.str(); } std::string gen_additional_proxy_function_case(const std::string &function_name, const tl_type *type, - const std::string &class_name, int arity) const override { + const std::string &class_name, int arity) const final { return ""; } std::string gen_additional_proxy_function_case(const std::string &function_name, const tl_type *type, - const tl_combinator *t, int arity, bool is_function) const override { + const tl_combinator *t, int arity, bool is_function) const final { return ""; } std::string gen_additional_proxy_function_end(const std::string &function_name, const tl_type *type, - bool is_function) const override { + bool is_function) const final { return ""; } }; diff --git a/td/generate/tl_writer_hpp.h b/td/generate/tl_writer_hpp.h index da927f103..adb985d80 100644 --- a/td/generate/tl_writer_hpp.h +++ b/td/generate/tl_writer_hpp.h @@ -20,89 +20,88 @@ class TD_TL_writer_hpp : public TD_TL_writer { : TD_TL_writer(tl_name, string_type, bytes_type) { } - bool is_documentation_generated() const override; + bool is_documentation_generated() const final; - int get_additional_function_type(const std::string &additional_function_name) const override; - std::vector get_additional_functions() const override; + int get_additional_function_type(const std::string &additional_function_name) const final; + std::vector get_additional_functions() const final; - std::string gen_base_type_class_name(int arity) const override; - std::string gen_base_tl_class_name() const override; + std::string gen_base_type_class_name(int arity) const final; + std::string gen_base_tl_class_name() const final; - std::string gen_output_begin() const override; - std::string gen_output_end() const override; + std::string gen_output_begin() const final; + std::string gen_output_end() const final; - std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const override; + std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const final; std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override; - std::string gen_class_end() const override; + bool is_proxy) const final; + std::string gen_class_end() const final; - std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const override; + std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const final; std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override; + const std::string &field_name) const final; std::string gen_vars(const tl::tl_combinator *t, const tl::tl_tree_type *result_type, - std::vector &vars) const override; - std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const override; + std::vector &vars) const final; + std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const final; std::string gen_uni(const tl::tl_tree_type *result_type, std::vector &vars, - bool check_negative) const override; - std::string gen_constructor_id_store(std::int32_t id, int storer_type) const override; + bool check_negative) const final; + std::string gen_constructor_id_store(std::int32_t id, int storer_type) const final; std::string gen_field_fetch(int field_num, const tl::arg &a, std::vector &vars, bool flat, - int parser_type) const override; + int parser_type) const final; std::string gen_field_store(const tl::arg &a, std::vector &vars, bool flat, - int storer_type) const override; + int storer_type) const final; std::string gen_type_fetch(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int parser_type) const override; + const std::vector &vars, int parser_type) const final; std::string gen_type_store(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int storer_type) const override; - std::string gen_var_type_fetch(const tl::arg &a) const override; + const std::vector &vars, int storer_type) const final; + std::string gen_var_type_fetch(const tl::arg &a) const final; - std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const override; + std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const final; - std::string gen_function_result_type(const tl::tl_tree *result) const override; + std::string gen_function_result_type(const tl::tl_tree *result) const final; std::string gen_fetch_function_begin(const std::string &parser_name, const std::string &class_name, const std::string &parent_class_name, int arity, int field_count, - std::vector &vars, int parser_type) const override; + std::vector &vars, int parser_type) const final; std::string gen_fetch_function_end(bool has_parent, int field_count, const std::vector &vars, - int parser_type) const override; + int parser_type) const final; std::string gen_fetch_function_result_begin(const std::string &parser_name, const std::string &class_name, - const tl::tl_tree *result) const override; - std::string gen_fetch_function_result_end() const override; + const tl::tl_tree *result) const final; + std::string gen_fetch_function_result_end() const final; std::string gen_fetch_function_result_any_begin(const std::string &parser_name, const std::string &class_name, - bool is_proxy) const override; - std::string gen_fetch_function_result_any_end(bool is_proxy) const override; + bool is_proxy) const final; + std::string gen_fetch_function_result_any_end(bool is_proxy) const final; std::string gen_store_function_begin(const std::string &storer_name, const std::string &class_name, int arity, - std::vector &vars, int storer_type) const override; - std::string gen_store_function_end(const std::vector &vars, int storer_type) const override; + std::vector &vars, int storer_type) const final; + std::string gen_store_function_end(const std::vector &vars, int storer_type) const final; - std::string gen_fetch_switch_begin() const override; - std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const override; - std::string gen_fetch_switch_end() const override; + std::string gen_fetch_switch_begin() const final; + std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const final; + std::string gen_fetch_switch_end() const final; - std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const override; + std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const final; std::string gen_constructor_parameter(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override; + bool is_default) const final; std::string gen_constructor_field_init(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override; - std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const override; + bool is_default) const final; + std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const final; std::string gen_additional_function(const std::string &function_name, const tl::tl_combinator *t, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_begin(const std::string &function_name, const tl::tl_type *type, const std::string &class_name, int arity, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const std::string &class_name, int arity) const override; + const std::string &class_name, int arity) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const tl::tl_combinator *t, int arity, - bool is_function) const override; + const tl::tl_combinator *t, int arity, bool is_function) const final; std::string gen_additional_proxy_function_end(const std::string &function_name, const tl::tl_type *type, - bool is_function) const override; + bool is_function) const final; }; } // namespace td diff --git a/td/generate/tl_writer_java.h b/td/generate/tl_writer_java.h index e7ce4a891..0789165cf 100644 --- a/td/generate/tl_writer_java.h +++ b/td/generate/tl_writer_java.h @@ -28,92 +28,92 @@ class TD_TL_writer_java : public tl::TL_writer { : TL_writer(tl_name), package_name(package_name) { } - int get_max_arity() const override; + int get_max_arity() const final; - bool is_built_in_simple_type(const std::string &name) const override; - bool is_built_in_complex_type(const std::string &name) const override; - bool is_type_bare(const tl::tl_type *t) const override; - bool is_combinator_supported(const tl::tl_combinator *constructor) const override; + bool is_built_in_simple_type(const std::string &name) const final; + bool is_built_in_complex_type(const std::string &name) const final; + bool is_type_bare(const tl::tl_type *t) const final; + bool is_combinator_supported(const tl::tl_combinator *constructor) const final; - int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const override; - int get_storer_type(const tl::tl_combinator *t, const std::string &storer_name) const override; - std::vector get_parsers() const override; - std::vector get_storers() const override; + int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const final; + int get_storer_type(const tl::tl_combinator *t, const std::string &storer_name) const final; + std::vector get_parsers() const final; + std::vector get_storers() const final; - std::string gen_base_tl_class_name() const override; - std::string gen_base_type_class_name(int arity) const override; - std::string gen_base_function_class_name() const override; - std::string gen_class_name(std::string name) const override; - std::string gen_field_name(std::string name) const override; - std::string gen_var_name(const tl::var_description &desc) const override; - std::string gen_parameter_name(int index) const override; - std::string gen_type_name(const tl::tl_tree_type *tree_type) const override; - std::string gen_array_type_name(const tl::tl_tree_array *arr, const std::string &field_name) const override; - std::string gen_var_type_name() const override; + std::string gen_base_tl_class_name() const final; + std::string gen_base_type_class_name(int arity) const final; + std::string gen_base_function_class_name() const final; + std::string gen_class_name(std::string name) const final; + std::string gen_field_name(std::string name) const final; + std::string gen_var_name(const tl::var_description &desc) const final; + std::string gen_parameter_name(int index) const final; + std::string gen_type_name(const tl::tl_tree_type *tree_type) const final; + std::string gen_array_type_name(const tl::tl_tree_array *arr, const std::string &field_name) const final; + std::string gen_var_type_name() const final; - std::string gen_int_const(const tl::tl_tree *tree_c, const std::vector &vars) const override; + std::string gen_int_const(const tl::tl_tree *tree_c, const std::vector &vars) const final; - std::string gen_output_begin() const override; - std::string gen_output_end() const override; + std::string gen_output_begin() const final; + std::string gen_output_end() const final; - std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const override; + std::string gen_forward_class_declaration(const std::string &class_name, bool is_proxy) const final; std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override; - std::string gen_class_end() const override; + bool is_proxy) const final; + std::string gen_class_end() const final; - std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const override; + std::string gen_class_alias(const std::string &class_name, const std::string &alias_name) const final; std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override; + const std::string &field_name) const final; std::string gen_vars(const tl::tl_combinator *t, const tl::tl_tree_type *result_type, - std::vector &vars) const override; - std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const override; + std::vector &vars) const final; + std::string gen_function_vars(const tl::tl_combinator *t, std::vector &vars) const final; std::string gen_uni(const tl::tl_tree_type *result_type, std::vector &vars, - bool check_negative) const override; - std::string gen_constructor_id_store(std::int32_t id, int storer_type) const override; + bool check_negative) const final; + std::string gen_constructor_id_store(std::int32_t id, int storer_type) const final; std::string gen_field_fetch(int field_num, const tl::arg &a, std::vector &vars, bool flat, - int parser_type) const override; + int parser_type) const final; std::string gen_field_store(const tl::arg &a, std::vector &vars, bool flat, - int storer_type) const override; + int storer_type) const final; std::string gen_type_fetch(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int parser_type) const override; + const std::vector &vars, int parser_type) const final; std::string gen_type_store(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int storer_type) const override; - std::string gen_var_type_fetch(const tl::arg &a) const override; + const std::vector &vars, int storer_type) const final; + std::string gen_var_type_fetch(const tl::arg &a) const final; - std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const override; + std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const final; - std::string gen_function_result_type(const tl::tl_tree *result) const override; + std::string gen_function_result_type(const tl::tl_tree *result) const final; std::string gen_fetch_function_begin(const std::string &parser_name, const std::string &class_name, const std::string &parent_class_name, int arity, int field_count, - std::vector &vars, int parser_type) const override; + std::vector &vars, int parser_type) const final; std::string gen_fetch_function_end(bool has_parent, int field_count, const std::vector &vars, - int parser_type) const override; + int parser_type) const final; std::string gen_fetch_function_result_begin(const std::string &parser_name, const std::string &class_name, - const tl::tl_tree *result) const override; - std::string gen_fetch_function_result_end() const override; + const tl::tl_tree *result) const final; + std::string gen_fetch_function_result_end() const final; std::string gen_fetch_function_result_any_begin(const std::string &parser_name, const std::string &class_name, - bool is_proxy) const override; - std::string gen_fetch_function_result_any_end(bool is_proxy) const override; + bool is_proxy) const final; + std::string gen_fetch_function_result_any_end(bool is_proxy) const final; std::string gen_store_function_begin(const std::string &storer_name, const std::string &class_name, int arity, - std::vector &vars, int storer_type) const override; - std::string gen_store_function_end(const std::vector &vars, int storer_type) const override; + std::vector &vars, int storer_type) const final; + std::string gen_store_function_end(const std::vector &vars, int storer_type) const final; - std::string gen_fetch_switch_begin() const override; - std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const override; - std::string gen_fetch_switch_end() const override; + std::string gen_fetch_switch_begin() const final; + std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const final; + std::string gen_fetch_switch_end() const final; - std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const override; + std::string gen_constructor_begin(int field_count, const std::string &class_name, bool is_default) const final; std::string gen_constructor_parameter(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override; + bool is_default) const final; std::string gen_constructor_field_init(int field_num, const std::string &class_name, const tl::arg &a, - bool is_default) const override; - std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const override; + bool is_default) const final; + std::string gen_constructor_end(const tl::tl_combinator *t, int field_count, bool is_default) const final; }; } // namespace td diff --git a/td/generate/tl_writer_jni_cpp.h b/td/generate/tl_writer_jni_cpp.h index 3e8487221..d4b4d8262 100644 --- a/td/generate/tl_writer_jni_cpp.h +++ b/td/generate/tl_writer_jni_cpp.h @@ -32,9 +32,9 @@ class TD_TL_writer_jni_cpp : public TD_TL_writer_cpp { std::string gen_type_signature(const tl::tl_tree_type *tree_type) const; - std::string get_pretty_field_name(std::string field_name) const override; + std::string get_pretty_field_name(std::string field_name) const final; - std::string get_pretty_class_name(std::string class_name) const override; + std::string get_pretty_class_name(std::string class_name) const final; public: TD_TL_writer_jni_cpp(const std::string &tl_name, const std::string &string_type, const std::string &bytes_type, @@ -42,69 +42,68 @@ class TD_TL_writer_jni_cpp : public TD_TL_writer_cpp { : TD_TL_writer_cpp(tl_name, string_type, bytes_type, ext_include) { } - bool is_built_in_simple_type(const std::string &name) const override; - bool is_built_in_complex_type(const std::string &name) const override; + bool is_built_in_simple_type(const std::string &name) const final; + bool is_built_in_complex_type(const std::string &name) const final; - int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const override; - int get_additional_function_type(const std::string &additional_function_name) const override; - std::vector get_parsers() const override; - std::vector get_storers() const override; - std::vector get_additional_functions() const override; + int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const final; + int get_additional_function_type(const std::string &additional_function_name) const final; + std::vector get_parsers() const final; + std::vector get_storers() const final; + std::vector get_additional_functions() const final; - std::string gen_base_type_class_name(int arity) const override; - std::string gen_base_tl_class_name() const override; + std::string gen_base_type_class_name(int arity) const final; + std::string gen_base_tl_class_name() const final; std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override; + bool is_proxy) const final; std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override; + const std::string &field_name) const final; - std::string gen_constructor_id_store(std::int32_t id, int storer_type) const override; + std::string gen_constructor_id_store(std::int32_t id, int storer_type) const final; std::string gen_field_fetch(int field_num, const tl::arg &a, std::vector &vars, bool flat, - int parser_type) const override; + int parser_type) const final; std::string gen_field_store(const tl::arg &a, std::vector &vars, bool flat, - int storer_type) const override; + int storer_type) const final; std::string gen_type_fetch(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int parser_type) const override; + const std::vector &vars, int parser_type) const final; std::string gen_type_store(const std::string &field_name, const tl::tl_tree_type *tree_type, - const std::vector &vars, int storer_type) const override; + const std::vector &vars, int storer_type) const final; - std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const override; + std::string gen_get_id(const std::string &class_name, std::int32_t id, bool is_proxy) const final; std::string gen_fetch_function_begin(const std::string &parser_name, const std::string &class_name, const std::string &parent_class_name, int arity, int field_count, - std::vector &vars, int parser_type) const override; + std::vector &vars, int parser_type) const final; std::string gen_fetch_function_end(bool has_parent, int field_count, const std::vector &vars, - int parser_type) const override; + int parser_type) const final; std::string gen_fetch_function_result_begin(const std::string &parser_name, const std::string &class_name, - const tl::tl_tree *result) const override; - std::string gen_fetch_function_result_end() const override; + const tl::tl_tree *result) const final; + std::string gen_fetch_function_result_end() const final; std::string gen_fetch_function_result_any_begin(const std::string &parser_name, const std::string &class_name, - bool is_proxy) const override; - std::string gen_fetch_function_result_any_end(bool is_proxy) const override; + bool is_proxy) const final; + std::string gen_fetch_function_result_any_end(bool is_proxy) const final; std::string gen_store_function_begin(const std::string &storer_name, const std::string &class_name, int arity, - std::vector &vars, int storer_type) const override; + std::vector &vars, int storer_type) const final; - std::string gen_fetch_switch_begin() const override; - std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const override; - std::string gen_fetch_switch_end() const override; + std::string gen_fetch_switch_begin() const final; + std::string gen_fetch_switch_case(const tl::tl_combinator *t, int arity) const final; + std::string gen_fetch_switch_end() const final; std::string gen_additional_function(const std::string &function_name, const tl::tl_combinator *t, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_begin(const std::string &function_name, const tl::tl_type *type, const std::string &class_name, int arity, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const std::string &class_name, int arity) const override; + const std::string &class_name, int arity) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const tl::tl_combinator *t, int arity, - bool is_function) const override; + const tl::tl_combinator *t, int arity, bool is_function) const final; std::string gen_additional_proxy_function_end(const std::string &function_name, const tl::tl_type *type, - bool is_function) const override; + bool is_function) const final; }; } // namespace td diff --git a/td/generate/tl_writer_jni_h.h b/td/generate/tl_writer_jni_h.h index f5916cf46..ed6401ba1 100644 --- a/td/generate/tl_writer_jni_h.h +++ b/td/generate/tl_writer_jni_h.h @@ -20,38 +20,37 @@ class TD_TL_writer_jni_h : public TD_TL_writer_h { : TD_TL_writer_h(tl_name, string_type, bytes_type, ext_include) { } - bool is_built_in_simple_type(const std::string &name) const override; - bool is_built_in_complex_type(const std::string &name) const override; + bool is_built_in_simple_type(const std::string &name) const final; + bool is_built_in_complex_type(const std::string &name) const final; - int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const override; - int get_additional_function_type(const std::string &additional_function_name) const override; - std::vector get_parsers() const override; - std::vector get_storers() const override; - std::vector get_additional_functions() const override; + int get_parser_type(const tl::tl_combinator *t, const std::string &parser_name) const final; + int get_additional_function_type(const std::string &additional_function_name) const final; + std::vector get_parsers() const final; + std::vector get_storers() const final; + std::vector get_additional_functions() const final; - std::string gen_base_type_class_name(int arity) const override; - std::string gen_base_tl_class_name() const override; + std::string gen_base_type_class_name(int arity) const final; + std::string gen_base_tl_class_name() const final; - std::string gen_output_begin() const override; + std::string gen_output_begin() const final; std::string gen_class_begin(const std::string &class_name, const std::string &base_class_name, - bool is_proxy) const override; + bool is_proxy) const final; std::string gen_field_definition(const std::string &class_name, const std::string &type_name, - const std::string &field_name) const override; + const std::string &field_name) const final; std::string gen_additional_function(const std::string &function_name, const tl::tl_combinator *t, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_begin(const std::string &function_name, const tl::tl_type *type, const std::string &class_name, int arity, - bool is_function) const override; + bool is_function) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const std::string &class_name, int arity) const override; + const std::string &class_name, int arity) const final; std::string gen_additional_proxy_function_case(const std::string &function_name, const tl::tl_type *type, - const tl::tl_combinator *t, int arity, - bool is_function) const override; + const tl::tl_combinator *t, int arity, bool is_function) const final; std::string gen_additional_proxy_function_end(const std::string &function_name, const tl::tl_type *type, - bool is_function) const override; + bool is_function) const final; }; } // namespace td diff --git a/td/mtproto/HandshakeActor.h b/td/mtproto/HandshakeActor.h index 8e49d30d6..c239b9e4f 100644 --- a/td/mtproto/HandshakeActor.h +++ b/td/mtproto/HandshakeActor.h @@ -35,19 +35,19 @@ class HandshakeActor : public Actor { Promise> raw_connection_promise_; Promise> handshake_promise_; - void start_up() override; - void tear_down() override { + void start_up() final; + void tear_down() final { finish(Status::OK()); } - void hangup() override { + void hangup() final { finish(Status::Error(1, "Canceled")); stop(); } - void timeout_expired() override { + void timeout_expired() final { finish(Status::Error("Timeout expired")); stop(); } - void loop() override; + void loop() final; void finish(Status status) { // NB: order may be important for parent diff --git a/td/mtproto/HandshakeConnection.h b/td/mtproto/HandshakeConnection.h index 050da0fb1..bbcc41835 100644 --- a/td/mtproto/HandshakeConnection.h +++ b/td/mtproto/HandshakeConnection.h @@ -60,11 +60,11 @@ class HandshakeConnection AuthKeyHandshake *handshake_; unique_ptr context_; - void send_no_crypto(const Storer &storer) override { + void send_no_crypto(const Storer &storer) final { raw_connection_->send_no_crypto(PacketStorer(0, storer)); } - Status on_raw_packet(const PacketInfo &packet_info, BufferSlice packet) override { + Status on_raw_packet(const PacketInfo &packet_info, BufferSlice packet) final { if (packet_info.no_crypto_flag == false) { return Status::Error("Expected not encrypted packet"); } diff --git a/td/mtproto/HttpTransport.h b/td/mtproto/HttpTransport.h index 70488e96a..a1ec209c2 100644 --- a/td/mtproto/HttpTransport.h +++ b/td/mtproto/HttpTransport.h @@ -26,24 +26,24 @@ class Transport : public IStreamTransport { explicit Transport(string secret) : secret_(std::move(secret)) { } - Result read_next(BufferSlice *message, uint32 *quick_ack) override TD_WARN_UNUSED_RESULT; - bool support_quick_ack() const override { + Result read_next(BufferSlice *message, uint32 *quick_ack) final TD_WARN_UNUSED_RESULT; + bool support_quick_ack() const final { return false; } - void write(BufferWriter &&message, bool quick_ack) override; - bool can_read() const override; - bool can_write() const override; - void init(ChainBufferReader *input, ChainBufferWriter *output) override { + void write(BufferWriter &&message, bool quick_ack) final; + bool can_read() const final; + bool can_write() const final; + void init(ChainBufferReader *input, ChainBufferWriter *output) final { reader_.init(input); output_ = output; } - size_t max_prepend_size() const override; - size_t max_append_size() const override; - TransportType get_type() const override { + size_t max_prepend_size() const final; + size_t max_append_size() const final; + TransportType get_type() const final { return {TransportType::Http, 0, ProxySecret::from_raw(secret_)}; } - bool use_random_padding() const override; + bool use_random_padding() const final; private: string secret_; diff --git a/td/mtproto/PacketStorer.h b/td/mtproto/PacketStorer.h index 139dee23c..e8d6532f0 100644 --- a/td/mtproto/PacketStorer.h +++ b/td/mtproto/PacketStorer.h @@ -19,7 +19,7 @@ class PacketStorer : public Storer , public Impl { public: - size_t size() const override { + size_t size() const final { if (size_ != std::numeric_limits::max()) { return size_; } @@ -28,7 +28,7 @@ class PacketStorer return size_ = storer.get_length(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { TlStorerUnsafe storer(ptr); this->do_store(storer); return static_cast(storer.get_buf() - ptr); diff --git a/td/mtproto/Ping.cpp b/td/mtproto/Ping.cpp index 3d0c512ee..e9d5a7e4d 100644 --- a/td/mtproto/Ping.cpp +++ b/td/mtproto/Ping.cpp @@ -38,22 +38,22 @@ ActorOwn<> create_ping_actor(string debug, unique_ptr raw_connect Promise> promise_; ActorShared<> parent_; - void start_up() override { + void start_up() final { Scheduler::subscribe(ping_connection_->get_poll_info().extract_pollable_fd(this)); set_timeout_in(10); yield(); } - void hangup() override { + void hangup() final { finish(Status::Error("Canceled")); stop(); } - void tear_down() override { + void tear_down() final { finish(Status::OK()); } - void loop() override { + void loop() final { auto status = ping_connection_->flush(); if (status.is_error()) { finish(std::move(status)); @@ -65,7 +65,7 @@ ActorOwn<> create_ping_actor(string debug, unique_ptr raw_connect } } - void timeout_expired() override { + void timeout_expired() final { finish(Status::Error("Pong timeout expired")); stop(); } diff --git a/td/mtproto/PingConnection.cpp b/td/mtproto/PingConnection.cpp index 8f39b3861..52631fd04 100644 --- a/td/mtproto/PingConnection.cpp +++ b/td/mtproto/PingConnection.cpp @@ -35,15 +35,15 @@ class PingConnectionReqPQ : raw_connection_(std::move(raw_connection)), ping_count_(ping_count) { } - PollableFdInfo &get_poll_info() override { + PollableFdInfo &get_poll_info() final { return raw_connection_->get_poll_info(); } - unique_ptr move_as_raw_connection() override { + unique_ptr move_as_raw_connection() final { return std::move(raw_connection_); } - Status flush() override { + Status flush() final { if (!was_ping_) { UInt128 nonce; Random::secure_bytes(nonce.raw, sizeof(nonce)); @@ -55,14 +55,14 @@ class PingConnectionReqPQ } return raw_connection_->flush(AuthKey(), *this); } - bool was_pong() const override { + bool was_pong() const final { return finish_time_ > 0; } - double rtt() const override { + double rtt() const final { return finish_time_ - start_time_; } - Status on_raw_packet(const PacketInfo &packet_info, BufferSlice packet) override { + Status on_raw_packet(const PacketInfo &packet_info, BufferSlice packet) final { if (packet.size() < 12) { return Status::Error("Result is too small"); } @@ -105,31 +105,31 @@ class PingConnectionPingPong double rtt_; bool is_closed_{false}; Status status_; - void on_connected() override { + void on_connected() final { } - void on_closed(Status status) override { + void on_closed(Status status) final { is_closed_ = true; CHECK(status.is_error()); status_ = std::move(status); } - void on_auth_key_updated() override { + void on_auth_key_updated() final { } - void on_tmp_auth_key_updated() override { + void on_tmp_auth_key_updated() final { } - void on_server_salt_updated() override { + void on_server_salt_updated() final { } - void on_server_time_difference_updated() override { + void on_server_time_difference_updated() final { } - void on_session_created(uint64 unique_id, uint64 first_id) override { + void on_session_created(uint64 unique_id, uint64 first_id) final { } - void on_session_failed(Status status) override { + void on_session_failed(Status status) final { } - void on_container_sent(uint64 container_id, vector msgs_id) override { + void on_container_sent(uint64 container_id, vector msgs_id) final { } - Status on_pong() override { + Status on_pong() final { pong_cnt_++; if (pong_cnt_ == 1) { rtt_ = Time::now(); @@ -140,30 +140,30 @@ class PingConnectionPingPong return Status::OK(); } - void on_message_ack(uint64 id) override { + void on_message_ack(uint64 id) final { } - Status on_message_result_ok(uint64 id, BufferSlice packet, size_t original_size) override { + Status on_message_result_ok(uint64 id, BufferSlice packet, size_t original_size) final { LOG(ERROR) << "Unexpected message"; return Status::OK(); } - void on_message_result_error(uint64 id, int code, BufferSlice descr) override { + void on_message_result_error(uint64 id, int code, BufferSlice descr) final { } - void on_message_failed(uint64 id, Status status) override { + void on_message_failed(uint64 id, Status status) final { } - void on_message_info(uint64 id, int32 state, uint64 answer_id, int32 answer_size) override { + void on_message_info(uint64 id, int32 state, uint64 answer_id, int32 answer_size) final { } - Status on_destroy_auth_key() override { + Status on_destroy_auth_key() final { LOG(ERROR) << "Destroy auth key"; return Status::OK(); } - PollableFdInfo &get_poll_info() override { + PollableFdInfo &get_poll_info() final { return connection_->get_poll_info(); } - unique_ptr move_as_raw_connection() override { + unique_ptr move_as_raw_connection() final { return connection_->move_as_raw_connection(); } - Status flush() override { + Status flush() final { if (was_pong()) { return Status::OK(); } @@ -175,10 +175,10 @@ class PingConnectionPingPong } return Status::OK(); } - bool was_pong() const override { + bool was_pong() const final { return pong_cnt_ >= 2; } - double rtt() const override { + double rtt() const final { return rtt_; } }; diff --git a/td/mtproto/RawConnection.cpp b/td/mtproto/RawConnection.cpp index abe243335..5da655f98 100644 --- a/td/mtproto/RawConnection.cpp +++ b/td/mtproto/RawConnection.cpp @@ -42,18 +42,18 @@ class RawConnectionDefault : public RawConnection { transport_->init(&socket_fd_.input_buffer(), &socket_fd_.output_buffer()); } - void set_connection_token(StateManager::ConnectionToken connection_token) override { + void set_connection_token(StateManager::ConnectionToken connection_token) final { connection_token_ = std::move(connection_token); } - bool can_send() const override { + bool can_send() const final { return transport_->can_write(); } - TransportType get_transport_type() const override { + TransportType get_transport_type() const final { return transport_->get_type(); } void send_crypto(const Storer &storer, int64 session_id, int64 salt, const AuthKey &auth_key, - uint64 quick_ack_token) override { + uint64 quick_ack_token) final { PacketInfo info; info.version = 2; info.no_crypto_flag = false; @@ -78,7 +78,7 @@ class RawConnectionDefault : public RawConnection { transport_->write(std::move(packet), use_quick_ack); } - uint64 send_no_crypto(const Storer &storer) override { + uint64 send_no_crypto(const Storer &storer) final { PacketInfo info; info.no_crypto_flag = true; @@ -90,16 +90,16 @@ class RawConnectionDefault : public RawConnection { return info.message_id; } - PollableFdInfo &get_poll_info() override { + PollableFdInfo &get_poll_info() final { return socket_fd_.get_poll_info(); } - StatsCallback *stats_callback() override { + StatsCallback *stats_callback() final { return stats_callback_.get(); } // NB: After first returned error, all subsequent calls will return error too. - Status flush(const AuthKey &auth_key, Callback &callback) override { + Status flush(const AuthKey &auth_key, Callback &callback) final { auto status = do_flush(auth_key, callback); if (status.is_error()) { if (stats_callback_ && status.code() != 2) { @@ -110,19 +110,19 @@ class RawConnectionDefault : public RawConnection { return status; } - bool has_error() const override { + bool has_error() const final { return has_error_; } - void close() override { + void close() final { transport_.reset(); socket_fd_.close(); } - PublicFields &extra() override { + PublicFields &extra() final { return extra_; } - const PublicFields &extra() const override { + const PublicFields &extra() const final { return extra_; } @@ -268,18 +268,18 @@ class RawConnectionHttp : public RawConnection { answers_->init(); } - void set_connection_token(StateManager::ConnectionToken connection_token) override { + void set_connection_token(StateManager::ConnectionToken connection_token) final { connection_token_ = std::move(connection_token); } - bool can_send() const override { + bool can_send() const final { return mode_ == Send; } - TransportType get_transport_type() const override { + TransportType get_transport_type() const final { return mtproto::TransportType{mtproto::TransportType::Http, 0, mtproto::ProxySecret()}; } void send_crypto(const Storer &storer, int64 session_id, int64 salt, const AuthKey &auth_key, - uint64 quick_ack_token) override { + uint64 quick_ack_token) final { PacketInfo info; info.version = 2; info.no_crypto_flag = false; @@ -293,7 +293,7 @@ class RawConnectionHttp : public RawConnection { send_packet(packet.as_buffer_slice()); } - uint64 send_no_crypto(const Storer &storer) override { + uint64 send_no_crypto(const Storer &storer) final { PacketInfo info; info.no_crypto_flag = true; @@ -304,16 +304,16 @@ class RawConnectionHttp : public RawConnection { return info.message_id; } - PollableFdInfo &get_poll_info() override { + PollableFdInfo &get_poll_info() final { return answers_->reader_get_event_fd().get_poll_info(); } - StatsCallback *stats_callback() override { + StatsCallback *stats_callback() final { return stats_callback_.get(); } // NB: After first returned error, all subsequent calls will return error too. - Status flush(const AuthKey &auth_key, Callback &callback) override { + Status flush(const AuthKey &auth_key, Callback &callback) final { auto status = do_flush(auth_key, callback); if (status.is_error()) { if (stats_callback_ && status.code() != 2) { @@ -324,17 +324,17 @@ class RawConnectionHttp : public RawConnection { return status; } - bool has_error() const override { + bool has_error() const final { return has_error_; } - void close() override { + void close() final { } - PublicFields &extra() override { + PublicFields &extra() final { return extra_; } - const PublicFields &extra() const override { + const PublicFields &extra() const final { return extra_; } diff --git a/td/mtproto/SessionConnection.h b/td/mtproto/SessionConnection.h index 3dabd0a45..5bc3cd786 100644 --- a/td/mtproto/SessionConnection.h +++ b/td/mtproto/SessionConnection.h @@ -264,10 +264,10 @@ class SessionConnection Status init() TD_WARN_UNUSED_RESULT; Status do_flush() TD_WARN_UNUSED_RESULT; - Status before_write() override TD_WARN_UNUSED_RESULT; - Status on_raw_packet(const PacketInfo &info, BufferSlice packet) override; - Status on_quick_ack(uint64 quick_ack_token) override; - void on_read(size_t size) override; + Status before_write() final TD_WARN_UNUSED_RESULT; + Status on_raw_packet(const PacketInfo &info, BufferSlice packet) final; + Status on_quick_ack(uint64 quick_ack_token) final; + void on_read(size_t size) final; }; } // namespace mtproto diff --git a/td/mtproto/TcpTransport.h b/td/mtproto/TcpTransport.h index eae74776c..b57d6e836 100644 --- a/td/mtproto/TcpTransport.h +++ b/td/mtproto/TcpTransport.h @@ -51,10 +51,10 @@ class ITransport { class AbridgedTransport : public ITransport { public: - size_t read_from_stream(ChainBufferReader *stream, BufferSlice *message, uint32 *quick_ack) override; - void write_prepare_inplace(BufferWriter *message, bool quick_ack) override; - void init_output_stream(ChainBufferWriter *stream) override; - bool support_quick_ack() const override { + size_t read_from_stream(ChainBufferReader *stream, BufferSlice *message, uint32 *quick_ack) final; + void write_prepare_inplace(BufferWriter *message, bool quick_ack) final; + void init_output_stream(ChainBufferWriter *stream) final; + bool support_quick_ack() const final { return false; } }; @@ -63,10 +63,10 @@ class IntermediateTransport : ITransport { public: explicit IntermediateTransport(bool with_padding) : with_padding_(with_padding) { } - size_t read_from_stream(ChainBufferReader *stream, BufferSlice *message, uint32 *quick_ack) override; - void write_prepare_inplace(BufferWriter *message, bool quick_ack) override; - void init_output_stream(ChainBufferWriter *stream) override; - bool support_quick_ack() const override { + size_t read_from_stream(ChainBufferReader *stream, BufferSlice *message, uint32 *quick_ack) final; + void write_prepare_inplace(BufferWriter *message, bool quick_ack) final; + void init_output_stream(ChainBufferWriter *stream) final; + bool support_quick_ack() const final { return true; } bool with_padding() const { @@ -82,41 +82,41 @@ using TransportImpl = IntermediateTransport; class OldTransport : public IStreamTransport { public: OldTransport() = default; - Result read_next(BufferSlice *message, uint32 *quick_ack) override TD_WARN_UNUSED_RESULT { + Result read_next(BufferSlice *message, uint32 *quick_ack) final TD_WARN_UNUSED_RESULT { return impl_.read_from_stream(input_, message, quick_ack); } - bool support_quick_ack() const override { + bool support_quick_ack() const final { return impl_.support_quick_ack(); } - void write(BufferWriter &&message, bool quick_ack) override { + void write(BufferWriter &&message, bool quick_ack) final { impl_.write_prepare_inplace(&message, quick_ack); output_->append(message.as_buffer_slice()); } - void init(ChainBufferReader *input, ChainBufferWriter *output) override { + void init(ChainBufferReader *input, ChainBufferWriter *output) final { input_ = input; output_ = output; impl_.init_output_stream(output_); } - bool can_read() const override { + bool can_read() const final { return true; } - bool can_write() const override { + bool can_write() const final { return true; } - size_t max_prepend_size() const override { + size_t max_prepend_size() const final { return 4; } - size_t max_append_size() const override { + size_t max_append_size() const final { return 15; } - TransportType get_type() const override { + TransportType get_type() const final { return TransportType{TransportType::Tcp, 0, ProxySecret()}; } - bool use_random_padding() const override { + bool use_random_padding() const final { return false; } @@ -132,25 +132,25 @@ class ObfuscatedTransport : public IStreamTransport { : dc_id_(dc_id), secret_(secret), impl_(secret_.use_random_padding()) { } - Result read_next(BufferSlice *message, uint32 *quick_ack) override TD_WARN_UNUSED_RESULT; + Result read_next(BufferSlice *message, uint32 *quick_ack) final TD_WARN_UNUSED_RESULT; - bool support_quick_ack() const override { + bool support_quick_ack() const final { return impl_.support_quick_ack(); } - void write(BufferWriter &&message, bool quick_ack) override; + void write(BufferWriter &&message, bool quick_ack) final; - void init(ChainBufferReader *input, ChainBufferWriter *output) override; + void init(ChainBufferReader *input, ChainBufferWriter *output) final; - bool can_read() const override { + bool can_read() const final { return true; } - bool can_write() const override { + bool can_write() const final { return true; } - size_t max_prepend_size() const override { + size_t max_prepend_size() const final { size_t res = 4; if (secret_.emulate_tls()) { res += 5; @@ -165,14 +165,14 @@ class ObfuscatedTransport : public IStreamTransport { return res; } - size_t max_append_size() const override { + size_t max_append_size() const final { return 15; } - TransportType get_type() const override { + TransportType get_type() const final { return TransportType{TransportType::ObfuscatedTcp, dc_id_, secret_}; } - bool use_random_padding() const override { + bool use_random_padding() const final { return secret_.use_random_padding(); } diff --git a/td/mtproto/TlsInit.h b/td/mtproto/TlsInit.h index 3751fb3a6..acc7d0e58 100644 --- a/td/mtproto/TlsInit.h +++ b/td/mtproto/TlsInit.h @@ -43,7 +43,7 @@ class TlsInit : public TransparentProxy { void send_hello(); Status wait_hello_response(); - Status loop_impl() override; + Status loop_impl() final; }; } // namespace mtproto diff --git a/td/mtproto/TlsReaderByteFlow.h b/td/mtproto/TlsReaderByteFlow.h index 714d4aee9..e8575b87d 100644 --- a/td/mtproto/TlsReaderByteFlow.h +++ b/td/mtproto/TlsReaderByteFlow.h @@ -13,7 +13,7 @@ namespace mtproto { class TlsReaderByteFlow final : public ByteFlowBase { public: - bool loop() override; + bool loop() final; }; } // namespace mtproto diff --git a/td/mtproto/utils.h b/td/mtproto/utils.h index 3bf37288a..97c9af31e 100644 --- a/td/mtproto/utils.h +++ b/td/mtproto/utils.h @@ -26,7 +26,7 @@ class TLObjectStorer : public Storer { explicit TLObjectStorer(const T &object) : object_(object) { } - size_t size() const override { + size_t size() const final { if (size_ == std::numeric_limits::max()) { TlStorerCalcLength storer; storer.store_binary(object_.get_id()); @@ -35,7 +35,7 @@ class TLObjectStorer : public Storer { } return size_; } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { TlStorerUnsafe storer(ptr); storer.store_binary(object_.get_id()); object_.store(storer); diff --git a/td/telegram/AnimationsManager.cpp b/td/telegram/AnimationsManager.cpp index fa6274a1c..2f6d8aa9b 100644 --- a/td/telegram/AnimationsManager.cpp +++ b/td/telegram/AnimationsManager.cpp @@ -48,7 +48,7 @@ class GetSavedGifsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getSavedGifs(hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -58,7 +58,7 @@ class GetSavedGifsQuery : public Td::ResultHandler { td->animations_manager_->on_get_saved_animations(is_repair_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for get saved animations: " << status; } @@ -86,7 +86,7 @@ class SaveGifQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_saveGif(std::move(input_document), unsave))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -101,7 +101,7 @@ class SaveGifQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { VLOG(file_references) << "Receive " << status << " for " << file_id_; td->file_manager_->delete_file_reference(file_id_, file_reference_); diff --git a/td/telegram/AnimationsManager.h b/td/telegram/AnimationsManager.h index 29daa79fa..4bff114cd 100644 --- a/td/telegram/AnimationsManager.h +++ b/td/telegram/AnimationsManager.h @@ -138,7 +138,7 @@ class AnimationsManager : public Actor { void save_saved_animations_to_database(); - void tear_down() override; + void tear_down() final; class AnimationListLogEvent; diff --git a/td/telegram/AuthManager.h b/td/telegram/AuthManager.h index 5f426c5c1..66aeb4327 100644 --- a/td/telegram/AuthManager.h +++ b/td/telegram/AuthManager.h @@ -238,14 +238,14 @@ class AuthManager : public NetActor { void on_get_login_token(tl_object_ptr login_token); void on_get_authorization(tl_object_ptr auth_ptr); - void on_result(NetQueryPtr result) override; + void on_result(NetQueryPtr result) final; void update_state(State new_state, bool force = false, bool should_save_state = true); tl_object_ptr get_authorization_state_object(State authorization_state) const; void send_ok(uint64 query_id); - void start_up() override; - void tear_down() override; + void start_up() final; + void tear_down() final; }; } // namespace td diff --git a/td/telegram/AutoDownloadSettings.cpp b/td/telegram/AutoDownloadSettings.cpp index b76bb5421..79a5108c8 100644 --- a/td/telegram/AutoDownloadSettings.cpp +++ b/td/telegram/AutoDownloadSettings.cpp @@ -42,7 +42,7 @@ class GetAutoDownloadSettingsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getAutoDownloadSettings())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -54,7 +54,7 @@ class GetAutoDownloadSettingsQuery : public Td::ResultHandler { convert_auto_download_settings(settings->high_))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -98,7 +98,7 @@ class SaveAutoDownloadSettingsQuery : public Td::ResultHandler { flags, false /*ignored*/, false /*ignored*/, get_input_auto_download_settings(settings)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -108,7 +108,7 @@ class SaveAutoDownloadSettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/BackgroundManager.cpp b/td/telegram/BackgroundManager.cpp index 3306d93a6..328bcbfd8 100644 --- a/td/telegram/BackgroundManager.cpp +++ b/td/telegram/BackgroundManager.cpp @@ -57,7 +57,7 @@ class GetBackgroundQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getWallPaper(std::move(input_wallpaper)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -68,7 +68,7 @@ class GetBackgroundQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for GetBackgroundQuery for " << background_id_ << "/" << background_name_ << ": " << status; promise_.set_error(std::move(status)); @@ -87,7 +87,7 @@ class GetBackgroundsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getWallPapers(0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -96,7 +96,7 @@ class GetBackgroundsQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -113,7 +113,7 @@ class InstallBackgroundQuery : public Td::ResultHandler { telegram_api::account_installWallPaper(std::move(input_wallpaper), type.get_input_wallpaper_settings()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -123,7 +123,7 @@ class InstallBackgroundQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -148,7 +148,7 @@ class UploadBackgroundQuery : public Td::ResultHandler { std::move(input_file), type_.get_mime_type(), type.get_input_wallpaper_settings()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -158,7 +158,7 @@ class UploadBackgroundQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); CHECK(file_id_.is_valid()); if (begins_with(status.message(), "FILE_PART_") && ends_with(status.message(), "_MISSING")) { @@ -186,7 +186,7 @@ class UnsaveBackgroundQuery : public Td::ResultHandler { std::move(input_wallpaper), true, telegram_api::make_object()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -197,7 +197,7 @@ class UnsaveBackgroundQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for save background: " << status; } @@ -216,7 +216,7 @@ class ResetBackgroundsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_resetWallPapers())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -227,7 +227,7 @@ class ResetBackgroundsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for reset backgrounds: " << status; } @@ -237,20 +237,20 @@ class ResetBackgroundsQuery : public Td::ResultHandler { class BackgroundManager::UploadBackgroundFileCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->background_manager(), &BackgroundManager::on_upload_background_file, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->background_manager(), &BackgroundManager::on_upload_background_file_error, file_id, std::move(error)); } diff --git a/td/telegram/BackgroundManager.h b/td/telegram/BackgroundManager.h index 6ff9ad8c4..df1490d28 100644 --- a/td/telegram/BackgroundManager.h +++ b/td/telegram/BackgroundManager.h @@ -91,9 +91,9 @@ class BackgroundManager : public Actor { class UploadBackgroundFileCallback; - void start_up() override; + void start_up() final; - void tear_down() override; + void tear_down() final; static string get_background_database_key(bool for_dark_theme); diff --git a/td/telegram/BotCommand.cpp b/td/telegram/BotCommand.cpp index 28461a1c8..af915cd07 100644 --- a/td/telegram/BotCommand.cpp +++ b/td/telegram/BotCommand.cpp @@ -35,7 +35,7 @@ class SetBotCommandsQuery : public Td::ResultHandler { transform(commands, [](const BotCommand &command) { return command.get_input_bot_command(); })))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -47,7 +47,7 @@ class SetBotCommandsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -64,7 +64,7 @@ class ResetBotCommandsQuery : public Td::ResultHandler { telegram_api::bots_resetBotCommands(scope.get_input_bot_command_scope(td), language_code))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -73,7 +73,7 @@ class ResetBotCommandsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -91,7 +91,7 @@ class GetBotCommandsQuery : public Td::ResultHandler { telegram_api::bots_getBotCommands(scope.get_input_bot_command_scope(td), language_code))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -101,7 +101,7 @@ class GetBotCommandsQuery : public Td::ResultHandler { promise_.set_value(commands.get_bot_commands_object(td)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/CallActor.h b/td/telegram/CallActor.h index d4ac600ff..a4e39f8b5 100644 --- a/td/telegram/CallActor.h +++ b/td/telegram/CallActor.h @@ -191,15 +191,15 @@ class CallActor : public NetQueryCallback { static vector get_emojis_fingerprint(const string &key, const string &g_a); - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; Container> container_; - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; void send_with_promise(NetQueryPtr query, Promise promise); - void timeout_expired() override; - void hangup() override; + void timeout_expired() final; + void hangup() final; void on_error(Status status); }; diff --git a/td/telegram/CallManager.h b/td/telegram/CallManager.h index c1cb68149..931b1b381 100644 --- a/td/telegram/CallManager.h +++ b/td/telegram/CallManager.h @@ -55,7 +55,7 @@ class CallManager : public Actor { CallId create_call_actor(); void set_call_id(CallId call_id, Result r_server_call_id); - void hangup() override; - void hangup_shared() override; + void hangup() final; + void hangup_shared() final; }; } // namespace td diff --git a/td/telegram/CallbackQueriesManager.cpp b/td/telegram/CallbackQueriesManager.cpp index 029dfc14e..145071fbd 100644 --- a/td/telegram/CallbackQueriesManager.cpp +++ b/td/telegram/CallbackQueriesManager.cpp @@ -75,7 +75,7 @@ class GetBotCallbackAnswerQuery : public Td::ResultHandler { send_query(std::move(net_query)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -85,7 +85,7 @@ class GetBotCallbackAnswerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "DATA_INVALID") { td->messages_manager_->get_message_from_server({dialog_id_, message_id_}, Auto()); } else if (status.message() == "BOT_RESPONSE_TIMEOUT") { @@ -109,7 +109,7 @@ class SetBotCallbackAnswerQuery : public Td::ResultHandler { flags, false /*ignored*/, callback_query_id, text, url, cache_time))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -122,7 +122,7 @@ class SetBotCallbackAnswerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/Client.cpp b/td/telegram/Client.cpp index 3b533784f..ff6cd82a5 100644 --- a/td/telegram/Client.cpp +++ b/td/telegram/Client.cpp @@ -51,17 +51,17 @@ class TdReceiver { public: Callback(ClientManager::ClientId client_id, TdReceiver *impl) : client_id_(client_id), impl_(impl) { } - void on_result(uint64 id, td_api::object_ptr result) override { + void on_result(uint64 id, td_api::object_ptr result) final { impl_->responses_.push({client_id_, id, std::move(result)}); } - void on_error(uint64 id, td_api::object_ptr error) override { + void on_error(uint64 id, td_api::object_ptr error) final { impl_->responses_.push({client_id_, id, std::move(error)}); } Callback(const Callback &) = delete; Callback &operator=(const Callback &) = delete; Callback(Callback &&) = delete; Callback &operator=(Callback &&) = delete; - ~Callback() override { + ~Callback() final { impl_->responses_.push({client_id_, 0, nullptr}); } @@ -292,17 +292,17 @@ class TdReceiver { explicit Callback(ClientManager::ClientId client_id, std::shared_ptr output_queue) : client_id_(client_id), output_queue_(std::move(output_queue)) { } - void on_result(uint64 id, td_api::object_ptr result) override { + void on_result(uint64 id, td_api::object_ptr result) final { output_queue_->writer_put({client_id_, id, std::move(result)}); } - void on_error(uint64 id, td_api::object_ptr error) override { + void on_error(uint64 id, td_api::object_ptr error) final { output_queue_->writer_put({client_id_, id, std::move(error)}); } Callback(const Callback &) = delete; Callback &operator=(const Callback &) = delete; Callback(Callback &&) = delete; Callback &operator=(Callback &&) = delete; - ~Callback() override { + ~Callback() final { output_queue_->writer_put({client_id_, 0, nullptr}); } diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index c9227efe9..0299febe2 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -421,13 +421,13 @@ ActorOwn<> get_full_config(DcOption option, Promise promise, ActorSh public: explicit SimpleAuthData(DcId dc_id) : dc_id_(dc_id) { } - DcId dc_id() const override { + DcId dc_id() const final { return dc_id_; } - const std::shared_ptr &public_rsa_key() override { + const std::shared_ptr &public_rsa_key() final { return public_rsa_key_; } - mtproto::AuthKey get_auth_key() override { + mtproto::AuthKey get_auth_key() final { string dc_key = G()->td_db()->get_binlog_pmc()->get(auth_key_key()); mtproto::AuthKey res; @@ -436,31 +436,31 @@ ActorOwn<> get_full_config(DcOption option, Promise promise, ActorSh } return res; } - AuthKeyState get_auth_key_state() override { + AuthKeyState get_auth_key_state() final { return AuthDataShared::get_auth_key_state(get_auth_key()); } - void set_auth_key(const mtproto::AuthKey &auth_key) override { + void set_auth_key(const mtproto::AuthKey &auth_key) final { G()->td_db()->get_binlog_pmc()->set(auth_key_key(), serialize(auth_key)); //notify(); } - void update_server_time_difference(double diff) override { + void update_server_time_difference(double diff) final { G()->update_server_time_difference(diff); } - double get_server_time_difference() override { + double get_server_time_difference() final { return G()->get_server_time_difference(); } - void add_auth_key_listener(unique_ptr listener) override { + void add_auth_key_listener(unique_ptr listener) final { if (listener->notify()) { auth_key_listeners_.push_back(std::move(listener)); } } - void set_future_salts(const std::vector &future_salts) override { + void set_future_salts(const std::vector &future_salts) final { G()->td_db()->get_binlog_pmc()->set(future_salts_key(), serialize(future_salts)); } - std::vector get_future_salts() override { + std::vector get_future_salts() final { string future_salts = G()->td_db()->get_binlog_pmc()->get(future_salts_key()); std::vector res; if (!future_salts.empty()) { @@ -494,7 +494,7 @@ ActorOwn<> get_full_config(DcOption option, Promise promise, ActorSh } private: - void start_up() override { + void start_up() final { auto auth_data = std::make_shared(option_.get_dc_id()); int32 raw_dc_id = option_.get_dc_id().get_raw_id(); auto session_callback = make_unique(actor_shared(this, 1), std::move(option_)); @@ -514,10 +514,10 @@ ActorOwn<> get_full_config(DcOption option, Promise promise, ActorSh send_closure(session_, &Session::send, std::move(query)); set_timeout_in(10); } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { promise_.set_result(fetch_result(std::move(query))); } - void hangup_shared() override { + void hangup_shared() final { if (get_link_token() == 1) { if (promise_) { promise_.set_error(Status::Error("Failed")); @@ -525,10 +525,10 @@ ActorOwn<> get_full_config(DcOption option, Promise promise, ActorSh stop(); } } - void hangup() override { + void hangup() final { session_.reset(); } - void timeout_expired() override { + void timeout_expired() final { promise_.set_error(Status::Error("Timeout expired")); session_.reset(); } @@ -732,11 +732,11 @@ class ConfigRecoverer : public Actor { ActorShared<> parent_; - void hangup_shared() override { + void hangup_shared() final { ref_cnt_--; try_stop(); } - void hangup() override { + void hangup() final { ref_cnt_--; close_flag_ = true; full_config_query_.reset(); @@ -753,7 +753,7 @@ class ConfigRecoverer : public Actor { double max_connecting_delay() const { return expect_blocking() ? 5 : 20; } - void loop() override { + void loop() final { if (close_flag_) { return; } @@ -839,20 +839,20 @@ class ConfigRecoverer : public Actor { } } - void start_up() override { + void start_up() final { class StateCallback : public StateManager::Callback { public: explicit StateCallback(ActorId parent) : parent_(std::move(parent)) { } - bool on_state(StateManager::State state) override { + bool on_state(StateManager::State state) final { send_closure(parent_, &ConfigRecoverer::on_connecting, state == StateManager::State::Connecting); return parent_.is_alive(); } - bool on_network(NetType network_type, uint32 network_generation) override { + bool on_network(NetType network_type, uint32 network_generation) final { send_closure(parent_, &ConfigRecoverer::on_network, network_type != NetType::None, network_generation); return parent_.is_alive(); } - bool on_online(bool online_flag) override { + bool on_online(bool online_flag) final { send_closure(parent_, &ConfigRecoverer::on_online, online_flag); return parent_.is_alive(); } diff --git a/td/telegram/ConfigManager.h b/td/telegram/ConfigManager.h index ea3115f05..0cf265ffa 100644 --- a/td/telegram/ConfigManager.h +++ b/td/telegram/ConfigManager.h @@ -136,13 +136,13 @@ class ConfigManager : public NetQueryCallback { static constexpr uint64 REFCNT_TOKEN = std::numeric_limits::max() - 2; - void start_up() override; - void hangup_shared() override; - void hangup() override; - void loop() override; + void start_up() final; + void hangup_shared() final; + void hangup() final; + void loop() final; void try_stop(); - void on_result(NetQueryPtr res) override; + void on_result(NetQueryPtr res) final; void request_config_from_dc_impl(DcId dc_id); void process_config(tl_object_ptr config); diff --git a/td/telegram/ContactsManager.cpp b/td/telegram/ContactsManager.cpp index f8adf2dfb..74d050ce7 100644 --- a/td/telegram/ContactsManager.cpp +++ b/td/telegram/ContactsManager.cpp @@ -92,7 +92,7 @@ class DismissSuggestionQuery : public Td::ResultHandler { telegram_api::help_dismissSuggestion(std::move(input_peer), action.get_suggested_action_str()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -101,7 +101,7 @@ class DismissSuggestionQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "DismissSuggestionQuery"); promise_.set_error(std::move(status)); } @@ -119,7 +119,7 @@ class SetAccountTtlQuery : public Td::ResultHandler { telegram_api::account_setAccountTTL(make_tl_object(account_ttl)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -133,7 +133,7 @@ class SetAccountTtlQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -149,7 +149,7 @@ class GetAccountTtlQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getAccountTTL())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -161,7 +161,7 @@ class GetAccountTtlQuery : public Td::ResultHandler { promise_.set_value(std::move(ptr->days_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -178,7 +178,7 @@ class AcceptLoginTokenQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::auth_acceptLoginToken(BufferSlice(login_token)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -188,7 +188,7 @@ class AcceptLoginTokenQuery : public Td::ResultHandler { promise_.set_value(ContactsManager::convert_authorization_object(result_ptr.move_as_ok())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -204,7 +204,7 @@ class GetAuthorizationsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getAuthorizations())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -229,7 +229,7 @@ class GetAuthorizationsQuery : public Td::ResultHandler { promise_.set_value(std::move(results)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -245,7 +245,7 @@ class ResetAuthorizationQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_resetAuthorization(authorization_id))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -256,7 +256,7 @@ class ResetAuthorizationQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -272,7 +272,7 @@ class ResetAuthorizationsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::auth_resetAuthorizations())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -284,7 +284,7 @@ class ResetAuthorizationsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -301,7 +301,7 @@ class GetWebAuthorizationsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getWebAuthorizations())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -332,7 +332,7 @@ class GetWebAuthorizationsQuery : public Td::ResultHandler { promise_.set_value(std::move(results)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -348,7 +348,7 @@ class ResetWebAuthorizationQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_resetWebAuthorization(hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -359,7 +359,7 @@ class ResetWebAuthorizationQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -375,7 +375,7 @@ class ResetWebAuthorizationsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_resetWebAuthorizations())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -386,7 +386,7 @@ class ResetWebAuthorizationsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -398,7 +398,7 @@ class GetContactsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_getContacts(hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -409,7 +409,7 @@ class GetContactsQuery : public Td::ResultHandler { td->contacts_manager_->on_get_contacts(std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_contacts_failed(std::move(status)); td->updates_manager_->get_difference("GetContactsQuery"); } @@ -422,7 +422,7 @@ class GetContactsStatusesQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_getStatuses())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -431,7 +431,7 @@ class GetContactsStatusesQuery : public Td::ResultHandler { td->contacts_manager_->on_get_contacts_statuses(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for GetContactsStatusesQuery: " << status; } @@ -457,7 +457,7 @@ class AddContactQuery : public Td::ResultHandler { flags, false /*ignored*/, std::move(input_user), first_name, last_name, phone_number))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -468,7 +468,7 @@ class AddContactQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); td->messages_manager_->reget_dialog_action_bar(DialogId(user_id_), "AddContactQuery"); @@ -488,7 +488,7 @@ class AcceptContactQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_acceptContact(std::move(input_user)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -499,7 +499,7 @@ class AcceptContactQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); td->messages_manager_->reget_dialog_action_bar(DialogId(user_id_), "AcceptContactQuery"); @@ -543,7 +543,7 @@ class ImportContactsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_importContacts(std::move(contacts)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -603,7 +603,7 @@ class ImportContactsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); } @@ -620,7 +620,7 @@ class DeleteContactsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_deleteContacts(std::move(input_users)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -631,7 +631,7 @@ class DeleteContactsQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); } @@ -653,7 +653,7 @@ class DeleteContactsByPhoneNumberQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_deleteByPhones(std::move(user_phone_numbers)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -668,7 +668,7 @@ class DeleteContactsByPhoneNumberQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); } @@ -685,7 +685,7 @@ class ResetContactsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_resetSaved())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -702,7 +702,7 @@ class ResetContactsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->contacts_manager_->reload_contacts(true); } @@ -728,7 +728,7 @@ class SearchDialogsNearbyQuery : public Td::ResultHandler { telegram_api::contacts_getLocated(flags, false /*ignored*/, location.get_input_geo_point(), expire_date))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -737,7 +737,7 @@ class SearchDialogsNearbyQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -775,7 +775,7 @@ class UploadProfilePhotoQuery : public Td::ResultHandler { flags, std::move(photo_input_file), std::move(video_input_file), main_frame_timestamp))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -788,7 +788,7 @@ class UploadProfilePhotoQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->file_manager_->delete_partial_remote_location(file_id_); td->updates_manager_->get_difference("UploadProfilePhotoQuery"); @@ -813,7 +813,7 @@ class UpdateProfilePhotoQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::photos_updateProfilePhoto(std::move(input_photo)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -824,7 +824,7 @@ class UpdateProfilePhotoQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { if (file_id_.is_valid()) { VLOG(file_references) << "Receive " << status << " for " << file_id_; @@ -864,7 +864,7 @@ class DeleteProfilePhotoQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::photos_deletePhotos(std::move(input_photo_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -880,7 +880,7 @@ class DeleteProfilePhotoQuery : public Td::ResultHandler { td->contacts_manager_->on_delete_profile_photo(profile_photo_id_, std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -905,7 +905,7 @@ class UpdateProfileQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::account_updateProfile(flags, first_name, last_name, about))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -918,7 +918,7 @@ class UpdateProfileQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -934,7 +934,7 @@ class CheckUsernameQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_checkUsername(username))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -943,7 +943,7 @@ class CheckUsernameQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -959,7 +959,7 @@ class UpdateUsernameQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_updateUsername(username))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -970,7 +970,7 @@ class UpdateUsernameQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "USERNAME_NOT_MODIFIED" && !td->auth_manager_->is_bot()) { promise_.set_value(Unit()); return; @@ -1001,7 +1001,7 @@ class CheckChannelUsernameQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::channels_checkUsername(std::move(input_channel), username))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1010,7 +1010,7 @@ class CheckChannelUsernameQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (channel_id_.is_valid()) { td->contacts_manager_->on_get_channel_error(channel_id_, status, "CheckChannelUsernameQuery"); } @@ -1036,7 +1036,7 @@ class UpdateChannelUsernameQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::channels_updateUsername(std::move(input_channel), username))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1052,7 +1052,7 @@ class UpdateChannelUsernameQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "USERNAME_NOT_MODIFIED" || status.message() == "CHAT_NOT_MODIFIED") { td->contacts_manager_->on_update_channel_username(channel_id_, std::move(username_)); if (!td->auth_manager_->is_bot()) { @@ -1085,7 +1085,7 @@ class SetChannelStickerSetQuery : public Td::ResultHandler { telegram_api::channels_setStickers(std::move(input_channel), std::move(input_sticker_set)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1101,7 +1101,7 @@ class SetChannelStickerSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { td->contacts_manager_->on_update_channel_sticker_set(channel_id_, sticker_set_id_); if (!td->auth_manager_->is_bot()) { @@ -1131,7 +1131,7 @@ class ToggleChannelSignaturesQuery : public Td::ResultHandler { telegram_api::channels_toggleSignatures(std::move(input_channel), sign_messages))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1142,7 +1142,7 @@ class ToggleChannelSignaturesQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { if (!td->auth_manager_->is_bot()) { promise_.set_value(Unit()); @@ -1174,7 +1174,7 @@ class TogglePrehistoryHiddenQuery : public Td::ResultHandler { telegram_api::channels_togglePreHistoryHidden(std::move(input_channel), !is_all_history_available))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1195,7 +1195,7 @@ class TogglePrehistoryHiddenQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { if (!td->auth_manager_->is_bot()) { promise_.set_value(Unit()); @@ -1224,7 +1224,7 @@ class ConvertToGigagroupQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_convertToGigagroup(std::move(input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1236,7 +1236,7 @@ class ConvertToGigagroupQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -1279,7 +1279,7 @@ class EditChatAboutQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_editChatAbout(std::move(input_peer), about))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1295,7 +1295,7 @@ class EditChatAboutQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_ABOUT_NOT_MODIFIED" || status.message() == "CHAT_NOT_MODIFIED") { on_success(); if (!td->auth_manager_->is_bot()) { @@ -1327,7 +1327,7 @@ class SetDiscussionGroupQuery : public Td::ResultHandler { telegram_api::channels_setDiscussionGroup(std::move(broadcast_input_channel), std::move(group_input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1340,7 +1340,7 @@ class SetDiscussionGroupQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "LINK_NOT_MODIFIED") { return promise_.set_value(Unit()); } @@ -1368,7 +1368,7 @@ class EditLocationQuery : public Td::ResultHandler { std::move(input_channel), location_.get_input_geo_point(), location_.get_address()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1381,7 +1381,7 @@ class EditLocationQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "EditLocationQuery"); promise_.set_error(std::move(status)); } @@ -1407,7 +1407,7 @@ class ToggleSlowModeQuery : public Td::ResultHandler { telegram_api::channels_toggleSlowMode(std::move(input_channel), slow_mode_delay))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1427,7 +1427,7 @@ class ToggleSlowModeQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { td->contacts_manager_->on_update_channel_slow_mode_delay(channel_id_, slow_mode_delay_, Promise()); if (!td->auth_manager_->is_bot()) { @@ -1464,7 +1464,7 @@ class ReportChannelSpamQuery : public Td::ResultHandler { std::move(input_channel), std::move(input_user), MessagesManager::get_server_message_ids(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1476,7 +1476,7 @@ class ReportChannelSpamQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "ReportChannelSpamQuery"); promise_.set_error(std::move(status)); } @@ -1493,7 +1493,7 @@ class DeleteChatQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_deleteChat(chat_id.get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1505,7 +1505,7 @@ class DeleteChatQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -1525,7 +1525,7 @@ class DeleteChannelQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_deleteChannel(std::move(input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1536,7 +1536,7 @@ class DeleteChannelQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "DeleteChannelQuery"); promise_.set_error(std::move(status)); } @@ -1554,7 +1554,7 @@ class AddChatUserQuery : public Td::ResultHandler { telegram_api::messages_addChatUser(chat_id.get(), std::move(input_user), forward_limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1565,7 +1565,7 @@ class AddChatUserQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->updates_manager_->get_difference("AddChatUserQuery"); } @@ -1585,7 +1585,7 @@ class EditChatAdminQuery : public Td::ResultHandler { telegram_api::messages_editChatAdmin(chat_id.get(), std::move(input_user), is_administrator))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1601,7 +1601,7 @@ class EditChatAdminQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->updates_manager_->get_difference("EditChatAdminQuery"); } @@ -1638,7 +1638,7 @@ class ExportChatInviteQuery : public Td::ResultHandler { flags, false /*ignored*/, std::move(input_peer), expire_date, usage_limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1660,7 +1660,7 @@ class ExportChatInviteQuery : public Td::ResultHandler { promise_.set_value(invite_link.get_chat_invite_link_object(td->contacts_manager_.get())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ExportChatInviteQuery"); promise_.set_error(std::move(status)); } @@ -1688,7 +1688,7 @@ class EditChatInviteLinkQuery : public Td::ResultHandler { flags, false /*ignored*/, std::move(input_peer), invite_link, expire_date, usage_limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1712,7 +1712,7 @@ class EditChatInviteLinkQuery : public Td::ResultHandler { promise_.set_value(invite_link.get_chat_invite_link_object(td->contacts_manager_.get())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "EditChatInviteLinkQuery"); promise_.set_error(std::move(status)); } @@ -1738,7 +1738,7 @@ class GetExportedChatInviteQuery : public Td::ResultHandler { telegram_api::messages_getExportedChatInvite(std::move(input_peer), invite_link))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1762,7 +1762,7 @@ class GetExportedChatInviteQuery : public Td::ResultHandler { promise_.set_value(invite_link.get_chat_invite_link_object(td->contacts_manager_.get())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetExportedChatInviteQuery"); promise_.set_error(std::move(status)); } @@ -1801,7 +1801,7 @@ class GetExportedChatInvitesQuery : public Td::ResultHandler { std::move(input_user), offset_date, offset_invite_link, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1830,7 +1830,7 @@ class GetExportedChatInvitesQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(total_count, std::move(invite_links))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetExportedChatInvitesQuery"); promise_.set_error(std::move(status)); } @@ -1855,7 +1855,7 @@ class GetChatAdminWithInvitesQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getAdminsWithInvites(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1880,7 +1880,7 @@ class GetChatAdminWithInvitesQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(std::move(invite_link_counts))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetChatAdminWithInvitesQuery"); promise_.set_error(std::move(status)); } @@ -1911,7 +1911,7 @@ class GetChatInviteImportersQuery : public Td::ResultHandler { std::move(input_peer), invite_link, offset_date, std::move(input_user), limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1941,7 +1941,7 @@ class GetChatInviteImportersQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(total_count, std::move(invite_link_members))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetChatInviteImportersQuery"); promise_.set_error(std::move(status)); } @@ -1968,7 +1968,7 @@ class RevokeChatInviteLinkQuery : public Td::ResultHandler { flags, false /*ignored*/, std::move(input_peer), invite_link, 0, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2016,7 +2016,7 @@ class RevokeChatInviteLinkQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(total_count, std::move(links))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "RevokeChatInviteLinkQuery"); promise_.set_error(std::move(status)); } @@ -2041,7 +2041,7 @@ class DeleteExportedChatInviteQuery : public Td::ResultHandler { telegram_api::messages_deleteExportedChatInvite(std::move(input_peer), invite_link))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2050,7 +2050,7 @@ class DeleteExportedChatInviteQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "DeleteExportedChatInviteQuery"); promise_.set_error(std::move(status)); } @@ -2078,7 +2078,7 @@ class DeleteRevokedExportedChatInvitesQuery : public Td::ResultHandler { telegram_api::messages_deleteRevokedExportedChatInvites(std::move(input_peer), std::move(input_user)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2087,7 +2087,7 @@ class DeleteRevokedExportedChatInvitesQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "DeleteRevokedExportedChatInvitesQuery"); promise_.set_error(std::move(status)); } @@ -2107,7 +2107,7 @@ class CheckChatInviteQuery : public Td::ResultHandler { telegram_api::messages_checkChatInvite(LinkManager::get_dialog_invite_link_hash(invite_link_)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2119,7 +2119,7 @@ class CheckChatInviteQuery : public Td::ResultHandler { td->contacts_manager_->on_get_dialog_invite_link_info(invite_link_, std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2139,7 +2139,7 @@ class ImportChatInviteQuery : public Td::ResultHandler { telegram_api::messages_importChatInvite(LinkManager::get_dialog_invite_link_hash(invite_link_)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2162,7 +2162,7 @@ class ImportChatInviteQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->invalidate_invite_link_info(invite_link_); promise_.set_error(std::move(status)); } @@ -2184,7 +2184,7 @@ class DeleteChatUserQuery : public Td::ResultHandler { telegram_api::messages_deleteChatUser(flags, false /*ignored*/, chat_id.get(), std::move(input_user)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2195,7 +2195,7 @@ class DeleteChatUserQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->updates_manager_->get_difference("DeleteChatUserQuery"); } @@ -2216,7 +2216,7 @@ class JoinChannelQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_joinChannel(std::move(input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2227,7 +2227,7 @@ class JoinChannelQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "JoinChannelQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("JoinChannelQuery"); @@ -2250,7 +2250,7 @@ class InviteToChannelQuery : public Td::ResultHandler { telegram_api::channels_inviteToChannel(std::move(input_channel), std::move(input_users)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2262,7 +2262,7 @@ class InviteToChannelQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "InviteToChannelQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("InviteToChannelQuery"); @@ -2285,7 +2285,7 @@ class EditChannelAdminQuery : public Td::ResultHandler { std::move(input_channel), std::move(input_user), status.get_chat_admin_rights(), status.get_rank()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2297,7 +2297,7 @@ class EditChannelAdminQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "EditChannelAdminQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("EditChannelAdminQuery"); @@ -2320,7 +2320,7 @@ class EditChannelBannedQuery : public Td::ResultHandler { std::move(input_channel), std::move(input_peer), status.get_chat_banned_rights()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2332,7 +2332,7 @@ class EditChannelBannedQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "EditChannelBannedQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("EditChannelBannedQuery"); @@ -2354,7 +2354,7 @@ class LeaveChannelQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_leaveChannel(std::move(input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2365,7 +2365,7 @@ class LeaveChannelQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "LeaveChannelQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("LeaveChannelQuery"); @@ -2387,7 +2387,7 @@ class CanEditChannelCreatorQuery : public Td::ResultHandler { make_tl_object()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2398,7 +2398,7 @@ class CanEditChannelCreatorQuery : public Td::ResultHandler { promise_.set_error(Status::Error(500, "Server doesn't returned error")); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2426,7 +2426,7 @@ class EditChannelCreatorQuery : public Td::ResultHandler { std::move(input_channel), std::move(input_user), std::move(input_check_password)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2438,7 +2438,7 @@ class EditChannelCreatorQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "EditChannelCreatorQuery"); promise_.set_error(std::move(status)); td->updates_manager_->get_difference("EditChannelCreatorQuery"); @@ -2456,7 +2456,7 @@ class MigrateChatQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_migrateChat(chat_id.get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2467,7 +2467,7 @@ class MigrateChatQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); td->updates_manager_->get_difference("MigrateChatQuery"); } @@ -2494,7 +2494,7 @@ class GetCreatedPublicChannelsQuery : public Td::ResultHandler { telegram_api::channels_getAdminedPublicChannels(flags, false /*ignored*/, false /*ignored*/))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2522,7 +2522,7 @@ class GetCreatedPublicChannelsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2538,7 +2538,7 @@ class GetGroupsForDiscussionQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_getGroupsForDiscussion())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2566,7 +2566,7 @@ class GetGroupsForDiscussionQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2582,7 +2582,7 @@ class GetInactiveChannelsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_getInactiveChannels())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2597,7 +2597,7 @@ class GetInactiveChannelsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2613,7 +2613,7 @@ class GetUsersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::users_getUsers(std::move(input_users)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2624,7 +2624,7 @@ class GetUsersQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2640,7 +2640,7 @@ class GetFullUserQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::users_getFullUser(std::move(input_user)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2651,7 +2651,7 @@ class GetFullUserQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2677,7 +2677,7 @@ class GetUserPhotosQuery : public Td::ResultHandler { telegram_api::photos_getUserPhotos(std::move(input_user), offset, photo_id, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2704,7 +2704,7 @@ class GetUserPhotosQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2720,7 +2720,7 @@ class GetChatsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getChats(std::move(chat_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2747,7 +2747,7 @@ class GetChatsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2765,7 +2765,7 @@ class GetFullChatQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getFullChat(chat_id.get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2777,7 +2777,7 @@ class GetFullChatQuery : public Td::ResultHandler { td->contacts_manager_->on_get_chat_full(std::move(ptr->full_chat_), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_chat_full_failed(chat_id_); promise_.set_error(std::move(status)); } @@ -2802,7 +2802,7 @@ class GetChannelsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_getChannels(std::move(input_channels)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2830,7 +2830,7 @@ class GetChannelsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetChannelsQuery"); promise_.set_error(std::move(status)); } @@ -2849,7 +2849,7 @@ class GetFullChannelQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::channels_getFullChannel(std::move(input_channel)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2861,7 +2861,7 @@ class GetFullChannelQuery : public Td::ResultHandler { td->contacts_manager_->on_get_chat_full(std::move(ptr->full_chat_), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetFullChannelQuery"); td->contacts_manager_->on_get_channel_full_failed(channel_id_); promise_.set_error(std::move(status)); @@ -2891,7 +2891,7 @@ class GetChannelParticipantQuery : public Td::ResultHandler { telegram_api::channels_getParticipant(std::move(input_channel), std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2910,7 +2910,7 @@ class GetChannelParticipantQuery : public Td::ResultHandler { promise_.set_value(std::move(result)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "USER_NOT_PARTICIPANT") { promise_.set_value(DialogParticipant::left(participant_dialog_id_)); return; @@ -2941,7 +2941,7 @@ class GetChannelParticipantsQuery : public Td::ResultHandler { std::move(input_channel), filter.get_input_channel_participants_filter(), offset, limit, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2962,7 +2962,7 @@ class GetChannelParticipantsQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetChannelParticipantsQuery"); promise_.set_error(std::move(status)); } @@ -2990,7 +2990,7 @@ class GetChannelAdministratorsQuery : public Td::ResultHandler { std::numeric_limits::max(), hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3032,7 +3032,7 @@ class GetChannelAdministratorsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetChannelAdministratorsQuery"); promise_.set_error(std::move(status)); } @@ -3049,7 +3049,7 @@ class GetSupportUserQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_getSupport())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3063,7 +3063,7 @@ class GetSupportUserQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -3203,7 +3203,7 @@ class GetMegagroupStatsQuery : public Td::ResultHandler { telegram_api::stats_getMegagroupStats(flags, false /*ignored*/, std::move(input_channel)), dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3212,7 +3212,7 @@ class GetMegagroupStatsQuery : public Td::ResultHandler { promise_.set_value(td->contacts_manager_->convert_megagroup_stats(result_ptr.move_as_ok())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetMegagroupStatsQuery"); promise_.set_error(std::move(status)); } @@ -3241,7 +3241,7 @@ class GetBroadcastStatsQuery : public Td::ResultHandler { telegram_api::stats_getBroadcastStats(flags, false /*ignored*/, std::move(input_channel)), dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3256,7 +3256,7 @@ class GetBroadcastStatsQuery : public Td::ResultHandler { promise_.set_value(std::move(result)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetBroadcastStatsQuery"); promise_.set_error(std::move(status)); } @@ -3292,7 +3292,7 @@ class GetMessageStatsQuery : public Td::ResultHandler { dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3301,7 +3301,7 @@ class GetMessageStatsQuery : public Td::ResultHandler { promise_.set_value(td->contacts_manager_->convert_message_stats(result_ptr.move_as_ok())); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetMessageStatsQuery"); promise_.set_error(std::move(status)); } @@ -3323,7 +3323,7 @@ class LoadAsyncGraphQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::stats_loadAsyncGraph(flags, token, x), dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3333,24 +3333,24 @@ class LoadAsyncGraphQuery : public Td::ResultHandler { promise_.set_value(ContactsManager::convert_stats_graph(std::move(result))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; class ContactsManager::UploadProfilePhotoCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->contacts_manager(), &ContactsManager::on_upload_profile_photo, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->contacts_manager(), &ContactsManager::on_upload_profile_photo_error, file_id, std::move(error)); } diff --git a/td/telegram/ContactsManager.h b/td/telegram/ContactsManager.h index 902c577ef..4bfebe948 100644 --- a/td/telegram/ContactsManager.h +++ b/td/telegram/ContactsManager.h @@ -65,7 +65,7 @@ class ContactsManager : public Actor { ContactsManager &operator=(const ContactsManager &) = delete; ContactsManager(ContactsManager &&) = delete; ContactsManager &operator=(ContactsManager &&) = delete; - ~ContactsManager() override; + ~ContactsManager() final; static UserId load_my_id(); @@ -1550,7 +1550,7 @@ class ContactsManager : public Actor { void on_channel_participant_cache_timeout(ChannelId channel_id); - void tear_down() override; + void tear_down() final; Td *td_; ActorShared<> parent_; diff --git a/td/telegram/CountryInfoManager.cpp b/td/telegram/CountryInfoManager.cpp index 97d23f0b5..06f313fb3 100644 --- a/td/telegram/CountryInfoManager.cpp +++ b/td/telegram/CountryInfoManager.cpp @@ -36,7 +36,7 @@ class GetNearestDcQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create_unauth(telegram_api::help_getNearestDc())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -46,7 +46,7 @@ class GetNearestDcQuery : public Td::ResultHandler { promise_.set_value(std::move(result->country_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status) && status.message() != "BOT_METHOD_INVALID") { LOG(ERROR) << "GetNearestDc returned " << status; } @@ -67,7 +67,7 @@ class GetCountriesListQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create_unauth(telegram_api::help_getCountriesList(language_code, hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -76,7 +76,7 @@ class GetCountriesListQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "GetCountriesList returned " << status; } diff --git a/td/telegram/CountryInfoManager.h b/td/telegram/CountryInfoManager.h index 5abeb4825..48267ab98 100644 --- a/td/telegram/CountryInfoManager.h +++ b/td/telegram/CountryInfoManager.h @@ -36,10 +36,10 @@ class CountryInfoManager : public Actor { CountryInfoManager &operator=(const CountryInfoManager &) = delete; CountryInfoManager(CountryInfoManager &&) = delete; CountryInfoManager &operator=(CountryInfoManager &&) = delete; - ~CountryInfoManager() override; + ~CountryInfoManager() final; private: - void tear_down() override; + void tear_down() final; struct CallingCodeInfo; struct CountryInfo; diff --git a/td/telegram/DelayDispatcher.h b/td/telegram/DelayDispatcher.h index be60ec7a8..e96952106 100644 --- a/td/telegram/DelayDispatcher.h +++ b/td/telegram/DelayDispatcher.h @@ -38,8 +38,8 @@ class DelayDispatcher : public Actor { double default_delay_; ActorShared<> parent_; - void loop() override; - void tear_down() override; + void loop() final; + void tear_down() final; }; } // namespace td diff --git a/td/telegram/DeviceTokenManager.h b/td/telegram/DeviceTokenManager.h index d8aa77b13..bc5e70844 100644 --- a/td/telegram/DeviceTokenManager.h +++ b/td/telegram/DeviceTokenManager.h @@ -76,15 +76,15 @@ class DeviceTokenManager : public NetQueryCallback { std::array tokens_; int32 sync_cnt_{0}; - void start_up() override; + void start_up() final; static string get_database_key(int32 token_type); void save_info(int32 token_type); void dec_sync_cnt(); - void loop() override; - void on_result(NetQueryPtr net_query) override; + void loop() final; + void on_result(NetQueryPtr net_query) final; }; } // namespace td diff --git a/td/telegram/DhCache.h b/td/telegram/DhCache.h index 252469410..1e28e0dee 100644 --- a/td/telegram/DhCache.h +++ b/td/telegram/DhCache.h @@ -14,9 +14,9 @@ namespace td { class DhCache : public DhCallback { public: - int is_good_prime(Slice prime_str) const override; - void add_good_prime(Slice prime_str) const override; - void add_bad_prime(Slice prime_str) const override; + int is_good_prime(Slice prime_str) const final; + void add_good_prime(Slice prime_str) const final; + void add_bad_prime(Slice prime_str) const final; static DhCallback *instance() { static DhCache res; diff --git a/td/telegram/DialogDb.cpp b/td/telegram/DialogDb.cpp index 604f056de..4a81cac12 100644 --- a/td/telegram/DialogDb.cpp +++ b/td/telegram/DialogDb.cpp @@ -162,7 +162,7 @@ class DialogDbImpl : public DialogDbSyncInterface { } Status add_dialog(DialogId dialog_id, FolderId folder_id, int64 order, BufferSlice data, - vector notification_groups) override { + vector notification_groups) final { SCOPE_EXIT { add_dialog_stmt_.reset(); }; @@ -201,7 +201,7 @@ class DialogDbImpl : public DialogDbSyncInterface { return Status::OK(); } - Result get_dialog(DialogId dialog_id) override { + Result get_dialog(DialogId dialog_id) final { SCOPE_EXIT { get_dialog_stmt_.reset(); }; @@ -214,7 +214,7 @@ class DialogDbImpl : public DialogDbSyncInterface { return BufferSlice(get_dialog_stmt_.view_blob(0)); } - Result get_notification_group(NotificationGroupId notification_group_id) override { + Result get_notification_group(NotificationGroupId notification_group_id) final { SCOPE_EXIT { get_notification_group_stmt_.reset(); }; @@ -227,7 +227,7 @@ class DialogDbImpl : public DialogDbSyncInterface { get_last_notification_date(get_notification_group_stmt_, 1)); } - Result get_secret_chat_count(FolderId folder_id) override { + Result get_secret_chat_count(FolderId folder_id) final { SCOPE_EXIT { get_secret_chat_count_stmt_.reset(); }; @@ -237,8 +237,7 @@ class DialogDbImpl : public DialogDbSyncInterface { return get_secret_chat_count_stmt_.view_int32(0); } - Result get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, - int32 limit) override { + Result get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit) final { SCOPE_EXIT { get_dialogs_stmt_.reset(); }; @@ -263,7 +262,7 @@ class DialogDbImpl : public DialogDbSyncInterface { } Result> get_notification_groups_by_last_notification_date( - NotificationGroupKey notification_group_key, int32 limit) override { + NotificationGroupKey notification_group_key, int32 limit) final { auto &stmt = get_notification_groups_by_last_notification_date_stmt_; SCOPE_EXIT { stmt.reset(); @@ -285,10 +284,10 @@ class DialogDbImpl : public DialogDbSyncInterface { return std::move(notification_groups); } - Status begin_transaction() override { + Status begin_transaction() final { return db_.begin_transaction(); } - Status commit_transaction() override { + Status commit_transaction() final { return db_.commit_transaction(); } @@ -321,7 +320,7 @@ std::shared_ptr create_dialog_db_sync( return make_unique(safe_connection->get().clone()); }) { } - DialogDbSyncInterface &get() override { + DialogDbSyncInterface &get() final { return *lsls_db_.get(); } @@ -338,36 +337,35 @@ class DialogDbAsync : public DialogDbAsyncInterface { } void add_dialog(DialogId dialog_id, FolderId folder_id, int64 order, BufferSlice data, - vector notification_groups, Promise<> promise) override { + vector notification_groups, Promise<> promise) final { send_closure(impl_, &Impl::add_dialog, dialog_id, folder_id, order, std::move(data), std::move(notification_groups), std::move(promise)); } void get_notification_groups_by_last_notification_date(NotificationGroupKey notification_group_key, int32 limit, - Promise> promise) override { + Promise> promise) final { send_closure(impl_, &Impl::get_notification_groups_by_last_notification_date, notification_group_key, limit, std::move(promise)); } - void get_notification_group(NotificationGroupId notification_group_id, - Promise promise) override { + void get_notification_group(NotificationGroupId notification_group_id, Promise promise) final { send_closure(impl_, &Impl::get_notification_group, notification_group_id, std::move(promise)); } - void get_secret_chat_count(FolderId folder_id, Promise promise) override { + void get_secret_chat_count(FolderId folder_id, Promise promise) final { send_closure(impl_, &Impl::get_secret_chat_count, folder_id, std::move(promise)); } - void get_dialog(DialogId dialog_id, Promise promise) override { + void get_dialog(DialogId dialog_id, Promise promise) final { send_closure_later(impl_, &Impl::get_dialog, dialog_id, std::move(promise)); } void get_dialogs(FolderId folder_id, int64 order, DialogId dialog_id, int32 limit, - Promise promise) override { + Promise promise) final { send_closure_later(impl_, &Impl::get_dialogs, folder_id, order, dialog_id, limit, std::move(promise)); } - void close(Promise<> promise) override { + void close(Promise<> promise) final { send_closure_later(impl_, &Impl::close, std::move(promise)); } @@ -474,11 +472,11 @@ class DialogDbAsync : public DialogDbAsyncInterface { cancel_timeout(); } - void timeout_expired() override { + void timeout_expired() final { do_flush(); } - void start_up() override { + void start_up() final { sync_db_ = &sync_db_safe_->get(); } }; diff --git a/td/telegram/Global.h b/td/telegram/Global.h index 53eeeeef3..efb4e96fc 100644 --- a/td/telegram/Global.h +++ b/td/telegram/Global.h @@ -63,14 +63,14 @@ namespace td { class Global : public ActorContext { public: Global(); - ~Global() override; + ~Global() final; Global(const Global &) = delete; Global &operator=(const Global &) = delete; Global(Global &&other) = delete; Global &operator=(Global &&other) = delete; static constexpr int32 ID = -572104940; - int32 get_id() const override { + int32 get_id() const final { return ID; } diff --git a/td/telegram/GroupCallManager.cpp b/td/telegram/GroupCallManager.cpp index 2af701037..3d2046118 100644 --- a/td/telegram/GroupCallManager.cpp +++ b/td/telegram/GroupCallManager.cpp @@ -49,7 +49,7 @@ class GetGroupCallStreamQuery : public Td::ResultHandler { send_query(std::move(query)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -64,7 +64,7 @@ class GetGroupCallStreamQuery : public Td::ResultHandler { promise_.set_value(file->bytes_.as_slice().str()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -87,7 +87,7 @@ class GetGroupCallJoinAsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::phone_getGroupCallJoinAs(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -117,7 +117,7 @@ class GetGroupCallJoinAsQuery : public Td::ResultHandler { std::move(participant_aliaces))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetGroupCallJoinAsQuery"); promise_.set_error(std::move(status)); } @@ -141,7 +141,7 @@ class SaveDefaultGroupCallJoinAsQuery : public Td::ResultHandler { telegram_api::phone_saveDefaultGroupCallJoinAs(std::move(input_peer), std::move(as_input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -153,7 +153,7 @@ class SaveDefaultGroupCallJoinAsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { // td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetGroupCallJoinAsQuery"); promise_.set_error(std::move(status)); } @@ -184,7 +184,7 @@ class CreateGroupCallQuery : public Td::ResultHandler { telegram_api::phone_createGroupCall(flags, std::move(input_peer), Random::secure_int32(), title, start_date))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -212,7 +212,7 @@ class CreateGroupCallQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "CreateGroupCallQuery"); promise_.set_error(std::move(status)); } @@ -231,7 +231,7 @@ class GetGroupCallQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::phone_getGroupCall(input_group_call_id.get_input_group_call()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -243,7 +243,7 @@ class GetGroupCallQuery : public Td::ResultHandler { promise_.set_value(std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -264,7 +264,7 @@ class GetGroupCallParticipantQuery : public Td::ResultHandler { input_group_call_id.get_input_group_call(), std::move(input_peers), std::move(source_ids), string(), limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -276,7 +276,7 @@ class GetGroupCallParticipantQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -298,7 +298,7 @@ class GetGroupCallParticipantsQuery : public Td::ResultHandler { offset_, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -310,7 +310,7 @@ class GetGroupCallParticipantsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -327,7 +327,7 @@ class StartScheduledGroupCallQuery : public Td::ResultHandler { telegram_api::phone_startScheduledGroupCall(input_group_call_id.get_input_group_call()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -338,7 +338,7 @@ class StartScheduledGroupCallQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "GROUPCALL_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -389,7 +389,7 @@ class JoinGroupCallQuery : public Td::ResultHandler { return join_query_ref; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -401,7 +401,7 @@ class JoinGroupCallQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -422,7 +422,7 @@ class JoinGroupCallPresentationQuery : public Td::ResultHandler { return join_query_ref; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -435,7 +435,7 @@ class JoinGroupCallPresentationQuery : public Td::ResultHandler { std::move(ptr), Status::OK()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->group_call_manager_->process_join_group_call_presentation_response(input_group_call_id_, generation_, nullptr, std::move(status)); } @@ -453,7 +453,7 @@ class LeaveGroupCallPresentationQuery : public Td::ResultHandler { telegram_api::phone_leaveGroupCallPresentation(input_group_call_id.get_input_group_call()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -464,7 +464,7 @@ class LeaveGroupCallPresentationQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "PARTICIPANT_PRESENTATION_MISSING") { promise_.set_value(Unit()); return; @@ -485,7 +485,7 @@ class EditGroupCallTitleQuery : public Td::ResultHandler { telegram_api::phone_editGroupCallTitle(input_group_call_id.get_input_group_call(), title))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -496,7 +496,7 @@ class EditGroupCallTitleQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "GROUPCALL_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -517,7 +517,7 @@ class ToggleGroupCallStartSubscriptionQuery : public Td::ResultHandler { input_group_call_id.get_input_group_call(), start_subscribed))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -528,7 +528,7 @@ class ToggleGroupCallStartSubscriptionQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "GROUPCALL_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -549,7 +549,7 @@ class ToggleGroupCallSettingsQuery : public Td::ResultHandler { flags, false /*ignored*/, input_group_call_id.get_input_group_call(), join_muted))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -560,7 +560,7 @@ class ToggleGroupCallSettingsQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "GROUPCALL_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -581,7 +581,7 @@ class InviteToGroupCallQuery : public Td::ResultHandler { telegram_api::phone_inviteToGroupCall(input_group_call_id.get_input_group_call(), std::move(input_users)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -592,7 +592,7 @@ class InviteToGroupCallQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -613,7 +613,7 @@ class ExportGroupCallInviteQuery : public Td::ResultHandler { flags, false /*ignored*/, input_group_call_id.get_input_group_call()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -623,7 +623,7 @@ class ExportGroupCallInviteQuery : public Td::ResultHandler { promise_.set_value(std::move(ptr->link_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -647,7 +647,7 @@ class ToggleGroupCallRecordQuery : public Td::ResultHandler { flags, false /*ignored*/, input_group_call_id.get_input_group_call(), title))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -658,7 +658,7 @@ class ToggleGroupCallRecordQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "GROUPCALL_NOT_MODIFIED") { promise_.set_value(Unit()); return; @@ -703,7 +703,7 @@ class EditGroupCallParticipantQuery : public Td::ResultHandler { video_is_stopped, video_is_paused, presentation_is_paused))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -714,7 +714,7 @@ class EditGroupCallParticipantQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -734,7 +734,7 @@ class CheckGroupCallQuery : public Td::ResultHandler { telegram_api::phone_checkGroupCall(input_group_call_id.get_input_group_call(), std::move(audio_sources)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -750,7 +750,7 @@ class CheckGroupCallQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -767,7 +767,7 @@ class LeaveGroupCallQuery : public Td::ResultHandler { telegram_api::phone_leaveGroupCall(input_group_call_id.get_input_group_call(), audio_source))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -778,7 +778,7 @@ class LeaveGroupCallQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -795,7 +795,7 @@ class DiscardGroupCallQuery : public Td::ResultHandler { telegram_api::phone_discardGroupCall(input_group_call_id.get_input_group_call()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -806,7 +806,7 @@ class DiscardGroupCallQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/GroupCallManager.h b/td/telegram/GroupCallManager.h index 75ec4b8c2..d5e10f62c 100644 --- a/td/telegram/GroupCallManager.h +++ b/td/telegram/GroupCallManager.h @@ -36,7 +36,7 @@ class GroupCallManager : public Actor { GroupCallManager &operator=(const GroupCallManager &) = delete; GroupCallManager(GroupCallManager &&) = delete; GroupCallManager &operator=(GroupCallManager &&) = delete; - ~GroupCallManager() override; + ~GroupCallManager() final; DialogId get_group_call_participant_id(const td_api::object_ptr &message_sender); @@ -147,7 +147,7 @@ class GroupCallManager : public Actor { static constexpr int32 CHECK_GROUP_CALL_IS_JOINED_TIMEOUT = 10; static constexpr size_t MAX_TITLE_LENGTH = 64; // server side limit for group call/call record title length - void tear_down() override; + void tear_down() final; static void on_update_group_call_participant_order_timeout_callback(void *group_call_manager_ptr, int64 group_call_id_int); diff --git a/td/telegram/HashtagHints.h b/td/telegram/HashtagHints.h index c3f9060c6..e6db5dd72 100644 --- a/td/telegram/HashtagHints.h +++ b/td/telegram/HashtagHints.h @@ -35,7 +35,7 @@ class HashtagHints : public Actor { string get_key() const; - void start_up() override; + void start_up() final; void hashtag_used_impl(const string &hashtag); void from_db(Result data, bool dummy); diff --git a/td/telegram/InlineQueriesManager.cpp b/td/telegram/InlineQueriesManager.cpp index 5f3ebeb95..24d9b496f 100644 --- a/td/telegram/InlineQueriesManager.cpp +++ b/td/telegram/InlineQueriesManager.cpp @@ -92,7 +92,7 @@ class GetInlineBotResultsQuery : public Td::ResultHandler { return result; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -103,7 +103,7 @@ class GetInlineBotResultsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.code() == NetQuery::Canceled) { status = Status::Error(406, "Request canceled"); } else if (status.message() == "BOT_RESPONSE_TIMEOUT") { @@ -146,7 +146,7 @@ class SetInlineBotResultsQuery : public Td::ResultHandler { std::move(inline_bot_switch_pm)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -159,7 +159,7 @@ class SetInlineBotResultsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/InlineQueriesManager.h b/td/telegram/InlineQueriesManager.h index a3cc1bc8c..eabe1f193 100644 --- a/td/telegram/InlineQueriesManager.h +++ b/td/telegram/InlineQueriesManager.h @@ -109,9 +109,9 @@ class InlineQueriesManager : public Actor { static void on_drop_inline_query_result_timeout_callback(void *inline_queries_manager_ptr, int64 query_hash); - void loop() override; + void loop() final; - void tear_down() override; + void tear_down() final; int32 recently_used_bots_loaded_ = 0; // 0 - not loaded, 1 - load request was sent, 2 - loaded MultiPromiseActor resolve_recent_inline_bots_multipromise_{"ResolveRecentInlineBotsMultiPromiseActor"}; diff --git a/td/telegram/LanguagePackManager.h b/td/telegram/LanguagePackManager.h index 0574d12b3..7d3543a00 100644 --- a/td/telegram/LanguagePackManager.h +++ b/td/telegram/LanguagePackManager.h @@ -35,7 +35,7 @@ class LanguagePackManager : public NetQueryCallback { LanguagePackManager &operator=(const LanguagePackManager &) = delete; LanguagePackManager(LanguagePackManager &&) = delete; LanguagePackManager &operator=(LanguagePackManager &&) = delete; - ~LanguagePackManager() override; + ~LanguagePackManager() final; static bool check_language_pack_name(Slice name); @@ -188,11 +188,11 @@ class LanguagePackManager : public NetQueryCallback { Status do_delete_language(string language_code); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; - void start_up() override; - void hangup() override; - void tear_down() override; + void start_up() final; + void hangup() final; + void tear_down() final; Container> container_; void send_with_promise(NetQueryPtr query, Promise promise); diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp index 7fe69e96f..7f2e25371 100644 --- a/td/telegram/LinkManager.cpp +++ b/td/telegram/LinkManager.cpp @@ -355,7 +355,7 @@ class RequestUrlAuthQuery : public Td::ResultHandler { url_))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -389,7 +389,7 @@ class RequestUrlAuthQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!dialog_id_.is_valid() || !td->messages_manager_->on_get_dialog_error(dialog_id_, status, "RequestUrlAuthQuery")) { LOG(INFO) << "RequestUrlAuthQuery returned " << status; @@ -427,7 +427,7 @@ class AcceptUrlAuthQuery : public Td::ResultHandler { button_id, url_))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -450,7 +450,7 @@ class AcceptUrlAuthQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!dialog_id_.is_valid() || !td->messages_manager_->on_get_dialog_error(dialog_id_, status, "AcceptUrlAuthQuery")) { LOG(INFO) << "AcceptUrlAuthQuery returned " << status; diff --git a/td/telegram/LinkManager.h b/td/telegram/LinkManager.h index b6d5394e3..7aaf23a48 100644 --- a/td/telegram/LinkManager.h +++ b/td/telegram/LinkManager.h @@ -31,7 +31,7 @@ class LinkManager : public Actor { LinkManager &operator=(const LinkManager &) = delete; LinkManager(LinkManager &&) = delete; LinkManager &operator=(LinkManager &&) = delete; - ~LinkManager() override; + ~LinkManager() final; class InternalLink { public: diff --git a/td/telegram/MessageContent.cpp b/td/telegram/MessageContent.cpp index 6b3ae5ea5..c95a6e9dc 100644 --- a/td/telegram/MessageContent.cpp +++ b/td/telegram/MessageContent.cpp @@ -97,7 +97,7 @@ class MessageText : public MessageContent { MessageText(FormattedText text, WebPageId web_page_id) : text(std::move(text)), web_page_id(web_page_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Text; } }; @@ -112,7 +112,7 @@ class MessageAnimation : public MessageContent { MessageAnimation(FileId file_id, FormattedText &&caption) : file_id(file_id), caption(std::move(caption)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Animation; } }; @@ -127,7 +127,7 @@ class MessageAudio : public MessageContent { MessageAudio(FileId file_id, FormattedText &&caption) : file_id(file_id), caption(std::move(caption)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Audio; } }; @@ -142,7 +142,7 @@ class MessageDocument : public MessageContent { MessageDocument(FileId file_id, FormattedText &&caption) : file_id(file_id), caption(std::move(caption)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Document; } }; @@ -157,7 +157,7 @@ class MessagePhoto : public MessageContent { MessagePhoto(Photo &&photo, FormattedText &&caption) : photo(std::move(photo)), caption(std::move(caption)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Photo; } }; @@ -170,7 +170,7 @@ class MessageSticker : public MessageContent { explicit MessageSticker(FileId file_id) : file_id(file_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Sticker; } }; @@ -185,7 +185,7 @@ class MessageVideo : public MessageContent { MessageVideo(FileId file_id, FormattedText &&caption) : file_id(file_id), caption(std::move(caption)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Video; } }; @@ -202,7 +202,7 @@ class MessageVoiceNote : public MessageContent { : file_id(file_id), caption(std::move(caption)), is_listened(is_listened) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::VoiceNote; } }; @@ -215,7 +215,7 @@ class MessageContact : public MessageContent { explicit MessageContact(Contact &&contact) : contact(std::move(contact)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Contact; } }; @@ -228,7 +228,7 @@ class MessageLocation : public MessageContent { explicit MessageLocation(Location &&location) : location(std::move(location)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Location; } }; @@ -241,7 +241,7 @@ class MessageVenue : public MessageContent { explicit MessageVenue(Venue &&venue) : venue(std::move(venue)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Venue; } }; @@ -256,7 +256,7 @@ class MessageChatCreate : public MessageContent { : title(std::move(title)), participant_user_ids(std::move(participant_user_ids)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatCreate; } }; @@ -269,7 +269,7 @@ class MessageChatChangeTitle : public MessageContent { explicit MessageChatChangeTitle(string &&title) : title(std::move(title)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatChangeTitle; } }; @@ -282,21 +282,21 @@ class MessageChatChangePhoto : public MessageContent { explicit MessageChatChangePhoto(Photo &&photo) : photo(std::move(photo)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatChangePhoto; } }; class MessageChatDeletePhoto : public MessageContent { public: - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatDeletePhoto; } }; class MessageChatDeleteHistory : public MessageContent { public: - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatDeleteHistory; } }; @@ -309,14 +309,14 @@ class MessageChatAddUsers : public MessageContent { explicit MessageChatAddUsers(vector &&user_ids) : user_ids(std::move(user_ids)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatAddUsers; } }; class MessageChatJoinedByLink : public MessageContent { public: - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatJoinedByLink; } }; @@ -329,7 +329,7 @@ class MessageChatDeleteUser : public MessageContent { explicit MessageChatDeleteUser(UserId user_id) : user_id(user_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatDeleteUser; } }; @@ -342,7 +342,7 @@ class MessageChatMigrateTo : public MessageContent { explicit MessageChatMigrateTo(ChannelId migrated_to_channel_id) : migrated_to_channel_id(migrated_to_channel_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatMigrateTo; } }; @@ -355,7 +355,7 @@ class MessageChannelCreate : public MessageContent { explicit MessageChannelCreate(string &&title) : title(std::move(title)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChannelCreate; } }; @@ -370,7 +370,7 @@ class MessageChannelMigrateFrom : public MessageContent { : title(std::move(title)), migrated_from_chat_id(migrated_from_chat_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChannelMigrateFrom; } }; @@ -383,7 +383,7 @@ class MessagePinMessage : public MessageContent { explicit MessagePinMessage(MessageId message_id) : message_id(message_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::PinMessage; } }; @@ -396,7 +396,7 @@ class MessageGame : public MessageContent { explicit MessageGame(Game &&game) : game(std::move(game)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Game; } }; @@ -412,14 +412,14 @@ class MessageGameScore : public MessageContent { : game_message_id(game_message_id), game_id(game_id), score(score) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::GameScore; } }; class MessageScreenshotTaken : public MessageContent { public: - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ScreenshotTaken; } }; @@ -432,7 +432,7 @@ class MessageChatSetTtl : public MessageContent { explicit MessageChatSetTtl(int32 ttl) : ttl(ttl) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ChatSetTtl; } }; @@ -446,7 +446,7 @@ class MessageUnsupported : public MessageContent { explicit MessageUnsupported(int32 version) : version(version) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Unsupported; } }; @@ -463,7 +463,7 @@ class MessageCall : public MessageContent { : call_id(call_id), duration(duration), discard_reason(discard_reason), is_video(is_video) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Call; } }; @@ -476,7 +476,7 @@ class MessageInvoice : public MessageContent { explicit MessageInvoice(InputInvoice &&input_invoice) : input_invoice(std::move(input_invoice)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Invoice; } }; @@ -504,7 +504,7 @@ class MessagePaymentSuccessful : public MessageContent { , total_amount(total_amount) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::PaymentSuccessful; } }; @@ -519,14 +519,14 @@ class MessageVideoNote : public MessageContent { MessageVideoNote(FileId file_id, bool is_viewed) : file_id(file_id), is_viewed(is_viewed) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::VideoNote; } }; class MessageContactRegistered : public MessageContent { public: - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ContactRegistered; } }; @@ -535,7 +535,7 @@ class MessageExpiredPhoto : public MessageContent { public: MessageExpiredPhoto() = default; - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ExpiredPhoto; } }; @@ -544,7 +544,7 @@ class MessageExpiredVideo : public MessageContent { public: MessageExpiredVideo() = default; - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ExpiredVideo; } }; @@ -574,7 +574,7 @@ class MessageLiveLocation : public MessageContent { } } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::LiveLocation; } }; @@ -587,7 +587,7 @@ class MessageCustomServiceAction : public MessageContent { explicit MessageCustomServiceAction(string &&message) : message(std::move(message)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::CustomServiceAction; } }; @@ -600,7 +600,7 @@ class MessageWebsiteConnected : public MessageContent { explicit MessageWebsiteConnected(string &&domain_name) : domain_name(std::move(domain_name)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::WebsiteConnected; } }; @@ -613,7 +613,7 @@ class MessagePassportDataSent : public MessageContent { explicit MessagePassportDataSent(vector &&types) : types(std::move(types)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::PassportDataSent; } }; @@ -628,7 +628,7 @@ class MessagePassportDataReceived : public MessageContent { : values(std::move(values)), credentials(std::move(credentials)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::PassportDataReceived; } }; @@ -641,7 +641,7 @@ class MessagePoll : public MessageContent { explicit MessagePoll(PollId poll_id) : poll_id(poll_id) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Poll; } }; @@ -659,7 +659,7 @@ class MessageDice : public MessageContent { , dice_value(dice_value) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::Dice; } @@ -687,7 +687,7 @@ class MessageProximityAlertTriggered : public MessageContent { : traveler_dialog_id(traveler_dialog_id), watcher_dialog_id(watcher_dialog_id), distance(distance) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::ProximityAlertTriggered; } }; @@ -703,7 +703,7 @@ class MessageGroupCall : public MessageContent { : input_group_call_id(input_group_call_id), duration(duration), schedule_date(schedule_date) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::GroupCall; } }; @@ -718,7 +718,7 @@ class MessageInviteToGroupCall : public MessageContent { : input_group_call_id(input_group_call_id), user_ids(std::move(user_ids)) { } - MessageContentType get_type() const override { + MessageContentType get_type() const final { return MessageContentType::InviteToGroupCall; } }; diff --git a/td/telegram/MessagesDb.cpp b/td/telegram/MessagesDb.cpp index 796e8c929..1cd2a5853 100644 --- a/td/telegram/MessagesDb.cpp +++ b/td/telegram/MessagesDb.cpp @@ -279,7 +279,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { Status add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id, int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text, - NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data) override { + NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data) final { LOG(INFO) << "Add " << full_message_id << " to database"; auto dialog_id = full_message_id.get_dialog_id(); auto message_id = full_message_id.get_message_id(); @@ -358,7 +358,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return Status::OK(); } - Status add_scheduled_message(FullMessageId full_message_id, BufferSlice data) override { + Status add_scheduled_message(FullMessageId full_message_id, BufferSlice data) final { LOG(INFO) << "Add " << full_message_id << " to database"; auto dialog_id = full_message_id.get_dialog_id(); auto message_id = full_message_id.get_message_id(); @@ -383,7 +383,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return Status::OK(); } - Status delete_message(FullMessageId full_message_id) override { + Status delete_message(FullMessageId full_message_id) final { LOG(INFO) << "Delete " << full_message_id << " from database"; auto dialog_id = full_message_id.get_dialog_id(); auto message_id = full_message_id.get_message_id(); @@ -407,7 +407,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return Status::OK(); } - Status delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id) override { + Status delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id) final { LOG(INFO) << "Delete all messages in " << dialog_id << " up to " << from_message_id << " from database"; CHECK(dialog_id.is_valid()); CHECK(from_message_id.is_valid()); @@ -423,7 +423,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return status; } - Status delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id) override { + Status delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id) final { LOG(INFO) << "Delete all messages in " << dialog_id << " sent by " << sender_user_id << " from database"; CHECK(dialog_id.is_valid()); CHECK(sender_user_id.is_valid()); @@ -436,7 +436,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return Status::OK(); } - Result get_message(FullMessageId full_message_id) override { + Result get_message(FullMessageId full_message_id) final { auto dialog_id = full_message_id.get_dialog_id(); auto message_id = full_message_id.get_message_id(); CHECK(dialog_id.is_valid()); @@ -462,8 +462,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return BufferSlice(stmt.view_blob(0)); } - Result> get_message_by_unique_message_id( - ServerMessageId unique_message_id) override { + Result> get_message_by_unique_message_id(ServerMessageId unique_message_id) final { if (!unique_message_id.is_valid()) { return Status::Error("Invalid unique_message_id"); } @@ -479,7 +478,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return std::make_pair(dialog_id, BufferSlice(get_message_by_unique_message_id_stmt_.view_blob(1))); } - Result get_message_by_random_id(DialogId dialog_id, int64 random_id) override { + Result get_message_by_random_id(DialogId dialog_id, int64 random_id) final { SCOPE_EXIT { get_message_by_random_id_stmt_.reset(); }; @@ -493,7 +492,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { } Result get_dialog_message_by_date(DialogId dialog_id, MessageId first_message_id, - MessageId last_message_id, int32 date) override { + MessageId last_message_id, int32 date) final { int64 left_message_id = first_message_id.get(); int64 right_message_id = last_message_id.get(); LOG_CHECK(left_message_id <= right_message_id) << first_message_id << " " << last_message_id; @@ -557,7 +556,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { Result>, int32>> get_expiring_messages(int32 expires_from, int32 expires_till, - int32 limit) override { + int32 limit) final { SCOPE_EXIT { get_expiring_messages_stmt_.reset(); get_expiring_messages_helper_stmt_.reset(); @@ -591,7 +590,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return std::make_pair(std::move(messages), next_expires_till); } - Result> get_messages(MessagesDbMessagesQuery query) override { + Result> get_messages(MessagesDbMessagesQuery query) final { if (query.index_mask != 0) { return get_messages_from_index(query.dialog_id, query.from_message_id, query.index_mask, query.offset, query.limit); @@ -599,12 +598,12 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return get_messages_impl(get_messages_stmt_, query.dialog_id, query.from_message_id, query.offset, query.limit); } - Result> get_scheduled_messages(DialogId dialog_id, int32 limit) override { + Result> get_scheduled_messages(DialogId dialog_id, int32 limit) final { return get_messages_inner(get_scheduled_messages_stmt_, dialog_id, std::numeric_limits::max(), limit); } Result> get_messages_from_notification_id(DialogId dialog_id, NotificationId from_notification_id, - int32 limit) override { + int32 limit) final { auto &stmt = get_messages_from_notification_id_stmt_; SCOPE_EXIT { stmt.reset(); @@ -672,7 +671,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return sb.as_cslice().str(); } - Result get_messages_fts(MessagesDbFtsQuery query) override { + Result get_messages_fts(MessagesDbFtsQuery query) final { SCOPE_EXIT { get_messages_fts_stmt_.reset(); }; @@ -745,7 +744,7 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return get_messages_impl(stmt, dialog_id, from_message_id, offset, limit); } - Result get_calls(MessagesDbCallsQuery query) override { + Result get_calls(MessagesDbCallsQuery query) final { CHECK(query.index_mask != 0); LOG_CHECK(query.index_mask < (1 << MESSAGES_DB_INDEX_COUNT)) << tag("index_mask", query.index_mask); int index_i = -1; @@ -786,10 +785,10 @@ class MessagesDbImpl : public MessagesDbSyncInterface { return std::move(result); } - Status begin_transaction() override { + Status begin_transaction() final { return db_.begin_transaction(); } - Status commit_transaction() override { + Status commit_transaction() final { return db_.commit_transaction(); } @@ -933,7 +932,7 @@ std::shared_ptr create_messages_db_sync( return make_unique(safe_connection->get().clone()); }) { } - MessagesDbSyncInterface &get() override { + MessagesDbSyncInterface &get() final { return *lsls_db_.get(); } @@ -952,69 +951,68 @@ class MessagesDbAsync : public MessagesDbAsyncInterface { void add_message(FullMessageId full_message_id, ServerMessageId unique_message_id, UserId sender_user_id, int64 random_id, int32 ttl_expires_at, int32 index_mask, int64 search_id, string text, NotificationId notification_id, MessageId top_thread_message_id, BufferSlice data, - Promise<> promise) override { + Promise<> promise) final { send_closure_later(impl_, &Impl::add_message, full_message_id, unique_message_id, sender_user_id, random_id, ttl_expires_at, index_mask, search_id, std::move(text), notification_id, top_thread_message_id, std::move(data), std::move(promise)); } - void add_scheduled_message(FullMessageId full_message_id, BufferSlice data, Promise<> promise) override { + void add_scheduled_message(FullMessageId full_message_id, BufferSlice data, Promise<> promise) final { send_closure_later(impl_, &Impl::add_scheduled_message, full_message_id, std::move(data), std::move(promise)); } - void delete_message(FullMessageId full_message_id, Promise<> promise) override { + void delete_message(FullMessageId full_message_id, Promise<> promise) final { send_closure_later(impl_, &Impl::delete_message, full_message_id, std::move(promise)); } - void delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id, Promise<> promise) override { + void delete_all_dialog_messages(DialogId dialog_id, MessageId from_message_id, Promise<> promise) final { send_closure_later(impl_, &Impl::delete_all_dialog_messages, dialog_id, from_message_id, std::move(promise)); } - void delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id, Promise<> promise) override { + void delete_dialog_messages_from_user(DialogId dialog_id, UserId sender_user_id, Promise<> promise) final { send_closure_later(impl_, &Impl::delete_dialog_messages_from_user, dialog_id, sender_user_id, std::move(promise)); } - void get_message(FullMessageId full_message_id, Promise promise) override { + void get_message(FullMessageId full_message_id, Promise promise) final { send_closure_later(impl_, &Impl::get_message, full_message_id, std::move(promise)); } void get_message_by_unique_message_id(ServerMessageId unique_message_id, - Promise> promise) override { + Promise> promise) final { send_closure_later(impl_, &Impl::get_message_by_unique_message_id, unique_message_id, std::move(promise)); } - void get_message_by_random_id(DialogId dialog_id, int64 random_id, Promise promise) override { + void get_message_by_random_id(DialogId dialog_id, int64 random_id, Promise promise) final { send_closure_later(impl_, &Impl::get_message_by_random_id, dialog_id, random_id, std::move(promise)); } void get_dialog_message_by_date(DialogId dialog_id, MessageId first_message_id, MessageId last_message_id, int32 date, - Promise promise) override { + Promise promise) final { send_closure_later(impl_, &Impl::get_dialog_message_by_date, dialog_id, first_message_id, last_message_id, date, std::move(promise)); } - void get_messages(MessagesDbMessagesQuery query, Promise> promise) override { + void get_messages(MessagesDbMessagesQuery query, Promise> promise) final { send_closure_later(impl_, &Impl::get_messages, std::move(query), std::move(promise)); } - void get_scheduled_messages(DialogId dialog_id, int32 limit, Promise> promise) override { + void get_scheduled_messages(DialogId dialog_id, int32 limit, Promise> promise) final { send_closure_later(impl_, &Impl::get_scheduled_messages, dialog_id, limit, std::move(promise)); } void get_messages_from_notification_id(DialogId dialog_id, NotificationId from_notification_id, int32 limit, - Promise> promise) override { + Promise> promise) final { send_closure_later(impl_, &Impl::get_messages_from_notification_id, dialog_id, from_notification_id, limit, std::move(promise)); } - void get_calls(MessagesDbCallsQuery query, Promise promise) override { + void get_calls(MessagesDbCallsQuery query, Promise promise) final { send_closure_later(impl_, &Impl::get_calls, std::move(query), std::move(promise)); } - void get_messages_fts(MessagesDbFtsQuery query, Promise promise) override { + void get_messages_fts(MessagesDbFtsQuery query, Promise promise) final { send_closure_later(impl_, &Impl::get_messages_fts, std::move(query), std::move(promise)); } - void get_expiring_messages( - int32 expires_from, int32 expires_till, int32 limit, - Promise>, int32>> promise) override { + void get_expiring_messages(int32 expires_from, int32 expires_till, int32 limit, + Promise>, int32>> promise) final { send_closure_later(impl_, &Impl::get_expiring_messages, expires_from, expires_till, limit, std::move(promise)); } - void close(Promise<> promise) override { + void close(Promise<> promise) final { send_closure_later(impl_, &Impl::close, std::move(promise)); } - void force_flush() override { + void force_flush() final { send_closure_later(impl_, &Impl::force_flush); } @@ -1163,11 +1161,11 @@ class MessagesDbAsync : public MessagesDbAsyncInterface { pending_write_results_.clear(); cancel_timeout(); } - void timeout_expired() override { + void timeout_expired() final { do_flush(); } - void start_up() override { + void start_up() final { sync_db_ = &sync_db_safe_->get(); } }; diff --git a/td/telegram/MessagesManager.cpp b/td/telegram/MessagesManager.cpp index 228dc5152..d72356fcf 100644 --- a/td/telegram/MessagesManager.cpp +++ b/td/telegram/MessagesManager.cpp @@ -96,7 +96,7 @@ class GetDialogFiltersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getDialogFilters())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -105,7 +105,7 @@ class GetDialogFiltersQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -126,7 +126,7 @@ class UpdateDialogFilterQuery : public Td::ResultHandler { telegram_api::messages_updateDialogFilter(flags, dialog_filter_id.get(), std::move(filter)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -136,7 +136,7 @@ class UpdateDialogFilterQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(ERROR) << "Receive error for UpdateDialogFilterQuery: " << status; promise_.set_error(std::move(status)); } @@ -154,7 +154,7 @@ class UpdateDialogFiltersOrderQuery : public Td::ResultHandler { transform(dialog_filter_ids, [](auto dialog_filter_id) { return dialog_filter_id.get(); })))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -164,7 +164,7 @@ class UpdateDialogFiltersOrderQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -181,7 +181,7 @@ class GetSuggestedDialogFiltersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getSuggestedDialogFilters())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -190,7 +190,7 @@ class GetSuggestedDialogFiltersQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -210,7 +210,7 @@ class GetOnlinesQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getOnlines(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -220,7 +220,7 @@ class GetOnlinesQuery : public Td::ResultHandler { td->messages_manager_->on_update_dialog_online_member_count(dialog_id_, result->onlines_, true); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetOnlinesQuery"); td->messages_manager_->on_update_dialog_online_member_count(dialog_id_, 0, true); } @@ -232,7 +232,7 @@ class GetAllDraftsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getAllDrafts())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -243,7 +243,7 @@ class GetAllDraftsQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), Promise()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for GetAllDraftsQuery: " << status; } @@ -261,7 +261,7 @@ class GetDialogQuery : public Td::ResultHandler { td->messages_manager_->get_input_dialog_peers({dialog_id}, AccessRights::Read)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -287,7 +287,7 @@ class GetDialogQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetDialogQuery"); td->messages_manager_->on_get_dialog_query_finished(dialog_id_, std::move(status)); } @@ -309,7 +309,7 @@ class GetDialogsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getPeerDialogs(std::move(input_dialog_peers)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -324,7 +324,7 @@ class GetDialogsQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -346,7 +346,7 @@ class GetPinnedDialogsActor : public NetActorOnce { return result; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -361,7 +361,7 @@ class GetPinnedDialogsActor : public NetActorOnce { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -372,7 +372,7 @@ class GetDialogUnreadMarksQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getDialogUnreadMarks())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -386,7 +386,7 @@ class GetDialogUnreadMarksQuery : public Td::ResultHandler { G()->td_db()->get_binlog_pmc()->set("fetched_marks_as_unread", "1"); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for GetDialogUnreadMarksQuery: " << status; } @@ -417,7 +417,7 @@ class GetDiscussionMessageQuery : public Td::ResultHandler { telegram_api::messages_getDiscussionMessage(std::move(input_peer), message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -427,7 +427,7 @@ class GetDiscussionMessageQuery : public Td::ResultHandler { expected_dialog_id_, expected_message_id_, std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (expected_dialog_id_ == dialog_id_) { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetDiscussionMessageQuery"); } @@ -446,7 +446,7 @@ class GetMessagesQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getMessages(std::move(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -460,7 +460,7 @@ class GetMessagesQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "MESSAGE_IDS_EMPTY") { promise_.set_value(Unit()); return; @@ -485,7 +485,7 @@ class GetChannelMessagesQuery : public Td::ResultHandler { telegram_api::channels_getMessages(std::move(input_channel), std::move(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -520,7 +520,7 @@ class GetChannelMessagesQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "MESSAGE_IDS_EMPTY") { promise_.set_value(Unit()); return; @@ -545,7 +545,7 @@ class GetScheduledMessagesQuery : public Td::ResultHandler { telegram_api::messages_getScheduledMessages(std::move(input_peer), std::move(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -560,7 +560,7 @@ class GetScheduledMessagesQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "MESSAGE_IDS_EMPTY") { promise_.set_value(Unit()); return; @@ -601,7 +601,7 @@ class UpdateDialogPinnedMessageQuery : public Td::ResultHandler { std::move(input_peer), message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -612,7 +612,7 @@ class UpdateDialogPinnedMessageQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "UpdateDialogPinnedMessageQuery"); promise_.set_error(std::move(status)); } @@ -642,7 +642,7 @@ class UnpinAllMessagesQuery : public Td::ResultHandler { send_request(); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -673,7 +673,7 @@ class UnpinAllMessagesQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "UnpinAllMessagesQuery"); promise_.set_error(std::move(status)); } @@ -706,7 +706,7 @@ class ExportChannelMessageLinkQuery : public Td::ResultHandler { message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -722,7 +722,7 @@ class ExportChannelMessageLinkQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!ignore_result_) { td->contacts_manager_->on_get_channel_error(channel_id_, status, "ExportChannelMessageLinkQuery"); } @@ -753,7 +753,7 @@ class GetDialogListActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -787,7 +787,7 @@ class GetDialogListActor : public NetActorOnce { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -801,7 +801,7 @@ class SearchPublicDialogsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_search(query, 3 /* ignored server-side */))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -815,7 +815,7 @@ class SearchPublicDialogsQuery : public Td::ResultHandler { std::move(dialogs->results_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for SearchPublicDialogsQuery: " << status; } @@ -844,7 +844,7 @@ class GetCommonDialogsQuery : public Td::ResultHandler { telegram_api::messages_getCommonChats(std::move(input_user), offset_chat_id, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -872,7 +872,7 @@ class GetCommonDialogsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -895,7 +895,7 @@ class GetBlockedDialogsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_getBlocked(offset, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -931,7 +931,7 @@ class GetBlockedDialogsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_failed_get_blocked_dialogs(random_id_); promise_.set_error(std::move(status)); } @@ -950,7 +950,7 @@ class CreateChatQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_createChat(std::move(input_users), title))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -962,7 +962,7 @@ class CreateChatQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_create_new_dialog_fail(random_id_, std::move(status), std::move(promise_)); } }; @@ -996,7 +996,7 @@ class CreateChannelQuery : public Td::ResultHandler { about, location.get_input_geo_point(), location.get_address()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1008,7 +1008,7 @@ class CreateChannelQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_create_new_dialog_fail(random_id_, std::move(status), std::move(promise_)); } }; @@ -1025,7 +1025,7 @@ class CheckHistoryImportQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_checkHistoryImport(message_file_head))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1045,7 +1045,7 @@ class CheckHistoryImportQuery : public Td::ResultHandler { promise_.set_value(std::move(file_type)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -1065,7 +1065,7 @@ class CheckHistoryImportPeerQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_checkHistoryImportPeer(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1076,7 +1076,7 @@ class CheckHistoryImportPeerQuery : public Td::ResultHandler { promise_.set_value(std::move(ptr->confirm_text_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "CheckHistoryImportPeerQuery"); promise_.set_error(std::move(status)); } @@ -1105,7 +1105,7 @@ class InitHistoryImportQuery : public Td::ResultHandler { std::move(input_peer), std::move(input_file), narrow_cast(attached_file_ids_.size())))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1118,7 +1118,7 @@ class InitHistoryImportQuery : public Td::ResultHandler { std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (FileReferenceManager::is_file_reference_error(status)) { LOG(ERROR) << "Receive file reference error " << status; } @@ -1159,7 +1159,7 @@ class UploadImportedMediaQuery : public Td::ResultHandler { std::move(input_peer), import_id, file_name, std::move(input_media)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1172,7 +1172,7 @@ class UploadImportedMediaQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (FileReferenceManager::is_file_reference_error(status)) { LOG(ERROR) << "Receive file reference error " << status; } @@ -1204,7 +1204,7 @@ class StartImportHistoryQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_startHistoryImport(std::move(input_peer), import_id))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1216,7 +1216,7 @@ class StartImportHistoryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "StartImportHistoryQuery"); promise_.set_error(std::move(status)); } @@ -1258,7 +1258,7 @@ class EditDialogPhotoQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert(std::is_same::value, ""); @@ -1277,7 +1277,7 @@ class EditDialogPhotoQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (file_id_.is_valid() && was_uploaded_) { td->file_manager_->delete_partial_remote_location(file_id_); } @@ -1333,7 +1333,7 @@ class EditDialogTitleQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert(std::is_same::value, ""); @@ -1347,7 +1347,7 @@ class EditDialogTitleQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->updates_manager_->get_difference("EditDialogTitleQuery"); if (status.message() == "CHAT_NOT_MODIFIED") { @@ -1379,7 +1379,7 @@ class SetHistoryTtlQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_setHistoryTTL(std::move(input_peer), period))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1390,7 +1390,7 @@ class SetHistoryTtlQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { if (!td->auth_manager_->is_bot()) { promise_.set_value(Unit()); @@ -1419,7 +1419,7 @@ class EditChatDefaultBannedRightsQuery : public Td::ResultHandler { std::move(input_peer), permissions.get_chat_banned_rights()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1430,7 +1430,7 @@ class EditChatDefaultBannedRightsQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "CHAT_NOT_MODIFIED") { if (!td->auth_manager_->is_bot()) { promise_.set_value(Unit()); @@ -1485,7 +1485,7 @@ class SaveDraftMessageQuery : public Td::ResultHandler { "SaveDraftMessageQuery")))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1499,7 +1499,7 @@ class SaveDraftMessageQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SaveDraftMessageQuery")) { LOG(ERROR) << "Receive error for SaveDraftMessageQuery: " << status; } @@ -1518,7 +1518,7 @@ class ClearAllDraftsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_clearAllDrafts())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1534,7 +1534,7 @@ class ClearAllDraftsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for ClearAllDraftsQuery: " << status; } @@ -1568,7 +1568,7 @@ class ToggleDialogPinQuery : public Td::ResultHandler { telegram_api::messages_toggleDialogPin(flags, false /*ignored*/, std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1582,7 +1582,7 @@ class ToggleDialogPinQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ToggleDialogPinQuery")) { LOG(ERROR) << "Receive error for ToggleDialogPinQuery: " << status; } @@ -1608,7 +1608,7 @@ class ReorderPinnedDialogsQuery : public Td::ResultHandler { td->messages_manager_->get_input_dialog_peers(dialog_ids, AccessRights::Read)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1623,7 +1623,7 @@ class ReorderPinnedDialogsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for ReorderPinnedDialogsQuery: " << status; } @@ -1658,7 +1658,7 @@ class ToggleDialogUnreadMarkQuery : public Td::ResultHandler { telegram_api::messages_markDialogUnread(flags, false /*ignored*/, std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1672,7 +1672,7 @@ class ToggleDialogUnreadMarkQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ToggleDialogUnreadMarkQuery")) { LOG(ERROR) << "Receive error for ToggleDialogUnreadMarkQuery: " << status; } @@ -1705,7 +1705,7 @@ class ToggleDialogIsBlockedQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert( std::is_same::value, ""); auto result_ptr = fetch_result(packet); @@ -1719,7 +1719,7 @@ class ToggleDialogIsBlockedQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ToggleDialogIsBlockedQuery")) { LOG(ERROR) << "Receive error for ToggleDialogIsBlockedQuery: " << status; } @@ -1753,7 +1753,7 @@ class GetMessagesViewsQuery : public Td::ResultHandler { std::move(input_peer), MessagesManager::get_server_message_ids(message_ids_), increment_view_counter))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1778,7 +1778,7 @@ class GetMessagesViewsQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetMessagesViewsQuery")) { LOG(ERROR) << "Receive error for GetMessagesViewsQuery: " << status; } @@ -1799,7 +1799,7 @@ class ReadMessagesContentsQuery : public Td::ResultHandler { telegram_api::messages_readMessageContents(MessagesManager::get_server_message_ids(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1817,7 +1817,7 @@ class ReadMessagesContentsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for read message contents: " << status; } @@ -1849,7 +1849,7 @@ class ReadChannelMessagesContentsQuery : public Td::ResultHandler { std::move(input_channel), MessagesManager::get_server_message_ids(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1861,7 +1861,7 @@ class ReadChannelMessagesContentsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->contacts_manager_->on_get_channel_error(channel_id_, status, "ReadChannelMessagesContentsQuery")) { LOG(ERROR) << "Receive error for read messages contents in " << channel_id_ << ": " << status; } @@ -1893,7 +1893,7 @@ class GetDialogMessageByDateQuery : public Td::ResultHandler { telegram_api::messages_getHistory(std::move(input_peer), 0, date, -3, 5, 0, 0, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1915,7 +1915,7 @@ class GetDialogMessageByDateQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetDialogMessageByDateQuery")) { LOG(ERROR) << "Receive error for GetDialogMessageByDateQuery in " << dialog_id_ << ": " << status; } @@ -1968,7 +1968,7 @@ class GetHistoryQuery : public Td::ResultHandler { telegram_api::messages_getHistory(std::move(input_peer), 0, 0, 0, limit, 0, 0, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1992,7 +1992,7 @@ class GetHistoryQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetHistoryQuery")) { LOG(ERROR) << "Receive error for GetHistoryQuery in " << dialog_id_ << ": " << status; } @@ -2016,7 +2016,7 @@ class ReadHistoryQuery : public Td::ResultHandler { telegram_api::messages_readHistory(std::move(input_peer), max_message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2035,7 +2035,7 @@ class ReadHistoryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ReadHistoryQuery")) { LOG(ERROR) << "Receive error for ReadHistoryQuery: " << status; } @@ -2060,7 +2060,7 @@ class ReadChannelHistoryQuery : public Td::ResultHandler { telegram_api::channels_readHistory(std::move(input_channel), max_message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2069,7 +2069,7 @@ class ReadChannelHistoryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->contacts_manager_->on_get_channel_error(channel_id_, status, "ReadChannelHistoryQuery")) { LOG(ERROR) << "Receive error for ReadChannelHistoryQuery: " << status; } @@ -2094,7 +2094,7 @@ class ReadDiscussionQuery : public Td::ResultHandler { max_message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2103,7 +2103,7 @@ class ReadDiscussionQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ReadDiscussionQuery"); promise_.set_error(std::move(status)); } @@ -2177,7 +2177,7 @@ class SearchMessagesQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert(std::is_same::value, ""); @@ -2209,7 +2209,7 @@ class SearchMessagesQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!handle_errors_) { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SearchMessagesQuery"); } @@ -2259,7 +2259,7 @@ class SearchMessagesGlobalQuery : public Td::ResultHandler { std::move(input_peer), offset_message_id.get_server_message_id().get(), limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2273,7 +2273,7 @@ class SearchMessagesGlobalQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_failed_messages_search(random_id_); promise_.set_error(std::move(status)); } @@ -2299,7 +2299,7 @@ class GetAllScheduledMessagesQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getScheduledHistory(std::move(input_peer), hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2315,7 +2315,7 @@ class GetAllScheduledMessagesQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetAllScheduledMessagesQuery"); promise_.set_error(std::move(status)); } @@ -2346,7 +2346,7 @@ class GetRecentLocationsQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getRecentLocations(std::move(input_peer), limit, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2368,7 +2368,7 @@ class GetRecentLocationsQuery : public Td::ResultHandler { })); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetRecentLocationsQuery"); td->messages_manager_->on_get_recent_locations_failed(random_id_); promise_.set_error(std::move(status)); @@ -2400,7 +2400,7 @@ class GetMessagePublicForwardsQuery : public Td::ResultHandler { offset_message_id.get(), limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2413,7 +2413,7 @@ class GetMessagePublicForwardsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetMessagePublicForwardsQuery"); td->messages_manager_->on_failed_get_message_public_forwards(random_id_); promise_.set_error(std::move(status)); @@ -2431,7 +2431,7 @@ class HidePromoDataQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_hidePromoData(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2440,7 +2440,7 @@ class HidePromoDataQuery : public Td::ResultHandler { // we are not interested in the result } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "HidePromoDataQuery")) { LOG(ERROR) << "Receive error for sponsored chat hiding: " << status; } @@ -2487,7 +2487,7 @@ class DeleteHistoryQuery : public Td::ResultHandler { send_request(); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2510,7 +2510,7 @@ class DeleteHistoryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "DeleteHistoryQuery"); promise_.set_error(std::move(status)); } @@ -2537,7 +2537,7 @@ class DeleteChannelHistoryQuery : public Td::ResultHandler { telegram_api::channels_deleteHistory(std::move(input_channel), max_message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2550,7 +2550,7 @@ class DeleteChannelHistoryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->contacts_manager_->on_get_channel_error(channel_id_, status, "DeleteChannelHistoryQuery")) { LOG(ERROR) << "Receive error for DeleteChannelHistoryQuery: " << status; } @@ -2581,7 +2581,7 @@ class DeletePhoneCallHistoryQuery : public Td::ResultHandler { send_request(); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2608,7 +2608,7 @@ class DeletePhoneCallHistoryQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2635,7 +2635,7 @@ class BlockFromRepliesQuery : public Td::ResultHandler { flags, false /*ignored*/, false /*ignored*/, false /*ignored*/, message_id.get_server_message_id().get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2646,7 +2646,7 @@ class BlockFromRepliesQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -2683,7 +2683,7 @@ class DeleteUserHistoryQuery : public Td::ResultHandler { send_request(); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2706,7 +2706,7 @@ class DeleteUserHistoryQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "DeleteUserHistoryQuery"); promise_.set_error(std::move(status)); } @@ -2737,7 +2737,7 @@ class ReadMentionsQuery : public Td::ResultHandler { send_request(); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2766,7 +2766,7 @@ class ReadMentionsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ReadMentionsQuery"); promise_.set_error(std::move(status)); } @@ -2862,7 +2862,7 @@ class SendMessageActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2896,7 +2896,7 @@ class SendMessageActor : public NetActorOnce { Promise(), "send message actor"); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendMessage: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message will be re-sent @@ -2933,7 +2933,7 @@ class StartBotQuery : public Td::ResultHandler { return send_query_ref; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2946,7 +2946,7 @@ class StartBotQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), Promise()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for StartBotQuery: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message should be re-sent @@ -2978,7 +2978,7 @@ class SendInlineBotResultQuery : public Td::ResultHandler { return send_query_ref; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -2990,7 +2990,7 @@ class SendInlineBotResultQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), Promise()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendInlineBotResultQuery: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message will be re-sent @@ -3036,7 +3036,7 @@ class SendMultiMediaActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3082,7 +3082,7 @@ class SendMultiMediaActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), Promise()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendMultiMedia: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message will be re-sent @@ -3157,7 +3157,7 @@ class SendMediaActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3176,7 +3176,7 @@ class SendMediaActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), Promise()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendMedia: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message will be re-sent @@ -3246,7 +3246,7 @@ class UploadMediaQuery : public Td::ResultHandler { telegram_api::messages_uploadMedia(std::move(input_peer), std::move(input_media)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3264,7 +3264,7 @@ class UploadMediaQuery : public Td::ResultHandler { td->messages_manager_->on_upload_message_media_success(dialog_id_, message_id_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for UploadMediaQuery for " << message_id_ << " in " << dialog_id_ << ": " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, message will be re-sent @@ -3324,7 +3324,7 @@ class SendScheduledMessageActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3335,7 +3335,7 @@ class SendScheduledMessageActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendScheduledMessageActor: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SendScheduledMessageActor"); promise_.set_error(std::move(status)); @@ -3407,7 +3407,7 @@ class EditMessageActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3421,7 +3421,7 @@ class EditMessageActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for EditMessage: " << status; if (!td->auth_manager_->is_bot() && status.message() == "MESSAGE_NOT_MODIFIED") { return promise_.set_value(0); @@ -3470,7 +3470,7 @@ class EditInlineMessageQuery : public Td::ResultHandler { dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3481,7 +3481,7 @@ class EditInlineMessageQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for EditInlineMessageQuery: " << status; promise_.set_error(std::move(status)); } @@ -3526,7 +3526,7 @@ class SetGameScoreActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3537,7 +3537,7 @@ class SetGameScoreActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SetGameScore: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SetGameScoreActor"); promise_.set_error(std::move(status)); @@ -3572,7 +3572,7 @@ class SetInlineGameScoreQuery : public Td::ResultHandler { dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3583,7 +3583,7 @@ class SetInlineGameScoreQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SetInlineGameScoreQuery: " << status; promise_.set_error(std::move(status)); } @@ -3611,7 +3611,7 @@ class GetGameHighScoresQuery : public Td::ResultHandler { std::move(input_peer), message_id.get_server_message_id().get(), std::move(input_user)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3621,7 +3621,7 @@ class GetGameHighScoresQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for GetGameHighScoresQuery: " << status; td->messages_manager_->on_get_game_high_scores(random_id_, nullptr); td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetGameHighScoresQuery"); @@ -3650,7 +3650,7 @@ class GetInlineGameHighScoresQuery : public Td::ResultHandler { dc_id)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3660,7 +3660,7 @@ class GetInlineGameHighScoresQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for GetInlineGameHighScoresQuery: " << status; td->messages_manager_->on_get_game_high_scores(random_id_, nullptr); promise_.set_error(std::move(status)); @@ -3714,7 +3714,7 @@ class ForwardMessagesActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_dispatcher_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3759,7 +3759,7 @@ class ForwardMessagesActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for forward messages: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, messages should be re-sent @@ -3794,7 +3794,7 @@ class SendScreenshotNotificationQuery : public Td::ResultHandler { send_query(std::move(query)); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3807,7 +3807,7 @@ class SendScreenshotNotificationQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for SendScreenshotNotificationQuery: " << status; if (G()->close_flag() && G()->parameters().use_message_db) { // do not send error, messages should be re-sent @@ -3843,7 +3843,7 @@ class SetTypingQuery : public Td::ResultHandler { return result; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3854,7 +3854,7 @@ class SetTypingQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.code() == NetQuery::Canceled) { return promise_.set_value(Unit()); } @@ -3897,7 +3897,7 @@ class DeleteMessagesQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3916,7 +3916,7 @@ class DeleteMessagesQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { // MESSAGE_DELETE_FORBIDDEN can be returned in group chats when administrator rights was removed // MESSAGE_DELETE_FORBIDDEN can be returned in private chats for bots when revoke time limit exceeded @@ -3959,7 +3959,7 @@ class DeleteChannelMessagesQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -3979,7 +3979,7 @@ class DeleteChannelMessagesQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->contacts_manager_->on_get_channel_error(channel_id_, status, "DeleteChannelMessagesQuery") && status.message() != "MESSAGE_DELETE_FORBIDDEN") { LOG(ERROR) << "Receive error for delete channel messages: " << status; @@ -4008,7 +4008,7 @@ class DeleteScheduledMessagesQuery : public Td::ResultHandler { std::move(input_peer), MessagesManager::get_scheduled_server_message_ids(message_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4019,7 +4019,7 @@ class DeleteScheduledMessagesQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "DeleteScheduledMessagesQuery")) { LOG(ERROR) << "Receive error for delete scheduled messages: " << status; } @@ -4038,7 +4038,7 @@ class GetDialogNotifySettingsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getNotifySettings(std::move(input_notify_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4049,7 +4049,7 @@ class GetDialogNotifySettingsQuery : public Td::ResultHandler { td->messages_manager_->on_get_dialog_notification_settings_query_finished(dialog_id_, Status::OK()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetDialogNotifySettingsQuery"); td->messages_manager_->on_get_dialog_notification_settings_query_finished(dialog_id_, std::move(status)); } @@ -4076,7 +4076,7 @@ class GetNotifySettingsExceptionsQuery : public Td::ResultHandler { telegram_api::account_getNotifyExceptions(flags, false /* ignored */, std::move(input_notify_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4112,7 +4112,7 @@ class GetNotifySettingsExceptionsQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(updates_ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -4132,7 +4132,7 @@ class GetScopeNotifySettingsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getNotifySettings(std::move(input_notify_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4144,7 +4144,7 @@ class GetScopeNotifySettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -4184,7 +4184,7 @@ class UpdateDialogNotifySettingsQuery : public Td::ResultHandler { new_settings.mute_until, new_settings.sound)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4198,7 +4198,7 @@ class UpdateDialogNotifySettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "UpdateDialogNotifySettingsQuery")) { LOG(INFO) << "Receive error for set chat notification settings: " << status; } @@ -4233,7 +4233,7 @@ class UpdateScopeNotifySettingsQuery : public Td::ResultHandler { scope_ = scope; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4247,7 +4247,7 @@ class UpdateScopeNotifySettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for set notification settings: " << status; if (!td->auth_manager_->is_bot()) { @@ -4270,7 +4270,7 @@ class ResetNotifySettingsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_resetNotifySettings())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4284,7 +4284,7 @@ class ResetNotifySettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for reset notification settings: " << status; } @@ -4305,7 +4305,7 @@ class GetPeerSettingsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getPeerSettings(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4314,7 +4314,7 @@ class GetPeerSettingsQuery : public Td::ResultHandler { td->messages_manager_->on_get_peer_settings(dialog_id_, result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for get peer settings: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetPeerSettingsQuery"); } @@ -4343,7 +4343,7 @@ class UpdatePeerSettingsQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert(std::is_same::value, ""); @@ -4362,7 +4362,7 @@ class UpdatePeerSettingsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for update peer settings: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "UpdatePeerSettingsQuery"); td->messages_manager_->reget_dialog_action_bar(dialog_id_, "UpdatePeerSettingsQuery"); @@ -4388,7 +4388,7 @@ class ReportEncryptedSpamQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_reportEncryptedSpam(std::move(input_peer)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4404,7 +4404,7 @@ class ReportEncryptedSpamQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for report encrypted spam: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ReportEncryptedSpamQuery"); td->messages_manager_->reget_dialog_action_bar( @@ -4438,7 +4438,7 @@ class ReportPeerQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert( std::is_same::value, ""); @@ -4455,7 +4455,7 @@ class ReportPeerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for report peer: " << status; td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ReportPeerQuery"); td->messages_manager_->reget_dialog_action_bar(dialog_id_, "ReportPeerQuery"); @@ -4489,7 +4489,7 @@ class ReportProfilePhotoQuery : public Td::ResultHandler { report_reason_.get_message()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4503,7 +4503,7 @@ class ReportProfilePhotoQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for report chat photo: " << status; if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { VLOG(file_references) << "Receive " << status << " for " << file_id_; @@ -4547,7 +4547,7 @@ class EditPeerFoldersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::folders_editPeerFolders(std::move(input_folder_peers)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4558,7 +4558,7 @@ class EditPeerFoldersQuery : public Td::ResultHandler { td->updates_manager_->on_get_updates(std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "EditPeerFoldersQuery")) { LOG(INFO) << "Receive error for EditPeerFoldersQuery: " << status; } @@ -4590,7 +4590,7 @@ class GetStatsUrlQuery : public Td::ResultHandler { telegram_api::messages_getStatsURL(flags, false /*ignored*/, std::move(input_peer), parameters))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4600,7 +4600,7 @@ class GetStatsUrlQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(result->url_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetStatsUrlQuery"); promise_.set_error(std::move(status)); } @@ -4629,7 +4629,7 @@ class GetChannelDifferenceQuery : public Td::ResultHandler { pts, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4638,7 +4638,7 @@ class GetChannelDifferenceQuery : public Td::ResultHandler { td->messages_manager_->on_get_channel_difference(dialog_id_, pts_, limit_, result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetChannelDifferenceQuery")) { LOG(ERROR) << "Receive updates.getChannelDifference error for " << dialog_id_ << " with pts " << pts_ << " and limit " << limit_ << ": " << status; @@ -4662,7 +4662,7 @@ class ResolveUsernameQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::contacts_resolveUsername(username))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4678,7 +4678,7 @@ class ResolveUsernameQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == Slice("USERNAME_NOT_OCCUPIED")) { td->messages_manager_->drop_username(username_); } @@ -4716,7 +4716,7 @@ class GetChannelAdminLogQuery : public Td::ResultHandler { flags, std::move(input_channel), query, std::move(filter), std::move(input_users), from_event_id, 0, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -4726,7 +4726,7 @@ class GetChannelAdminLogQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->contacts_manager_->on_get_channel_error(channel_id_, status, "GetChannelAdminLogQuery"); td->messages_manager_->on_get_event_log(channel_id_, random_id_, nullptr); promise_.set_error(std::move(status)); @@ -4735,53 +4735,53 @@ class GetChannelAdminLogQuery : public Td::ResultHandler { class MessagesManager::UploadMediaCallback : public FileManager::UploadCallback { public: - void on_progress(FileId file_id) override { + void on_progress(FileId file_id) final { } - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_media, file_id, std::move(input_file), nullptr); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_media, file_id, nullptr, std::move(input_file)); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_media_error, file_id, std::move(error)); } }; class MessagesManager::UploadThumbnailCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_thumbnail, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_thumbnail, file_id, nullptr); } }; class MessagesManager::UploadDialogPhotoCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_dialog_photo, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_dialog_photo_error, file_id, std::move(error)); } @@ -4789,17 +4789,17 @@ class MessagesManager::UploadDialogPhotoCallback : public FileManager::UploadCal class MessagesManager::UploadImportedMessagesCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_imported_messages, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_imported_messages_error, file_id, std::move(error)); } @@ -4807,17 +4807,17 @@ class MessagesManager::UploadImportedMessagesCallback : public FileManager::Uplo class MessagesManager::UploadImportedMessageAttachmentCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_imported_message_attachment, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_upload_imported_message_attachment_error, file_id, std::move(error)); } @@ -8505,10 +8505,10 @@ void MessagesManager::load_secret_thumbnail(FileId thumbnail_file_id) { explicit Callback(Promise<> download_promise) : download_promise_(std::move(download_promise)) { } - void on_download_ok(FileId file_id) override { + void on_download_ok(FileId file_id) final { download_promise_.set_value(Unit()); } - void on_download_error(FileId file_id, Status error) override { + void on_download_error(FileId file_id, Status error) final { download_promise_.set_error(std::move(error)); } diff --git a/td/telegram/MessagesManager.h b/td/telegram/MessagesManager.h index 15e6c085c..540dd1161 100644 --- a/td/telegram/MessagesManager.h +++ b/td/telegram/MessagesManager.h @@ -136,7 +136,7 @@ class MessagesManager : public Actor { MessagesManager &operator=(const MessagesManager &) = delete; MessagesManager(MessagesManager &&) = delete; MessagesManager &operator=(MessagesManager &&) = delete; - ~MessagesManager() override; + ~MessagesManager() final; td_api::object_ptr get_message_sender_object_const(UserId user_id, DialogId dialog_id) const; @@ -2601,9 +2601,9 @@ class MessagesManager : public Actor { void on_message_ttl_expired(Dialog *d, Message *m); void on_message_ttl_expired_impl(Dialog *d, Message *m); - void start_up() override; - void loop() override; - void tear_down() override; + void start_up() final; + void loop() final; + void tear_down() final; void create_folders(); void init(); diff --git a/td/telegram/NewPasswordState.cpp b/td/telegram/NewPasswordState.cpp index 839b1b725..a5df3ff55 100644 --- a/td/telegram/NewPasswordState.cpp +++ b/td/telegram/NewPasswordState.cpp @@ -8,9 +8,8 @@ namespace td { -Result get_new_password_state( - tl_object_ptr new_algo, - tl_object_ptr new_secure_algo) { +Result get_new_password_state(tl_object_ptr new_algo, + tl_object_ptr new_secure_algo) { NewPasswordState state; CHECK(new_algo != nullptr); switch (new_algo->get_id()) { diff --git a/td/telegram/NewPasswordState.h b/td/telegram/NewPasswordState.h index 7c82ae20b..b6d84dd39 100644 --- a/td/telegram/NewPasswordState.h +++ b/td/telegram/NewPasswordState.h @@ -21,8 +21,7 @@ struct NewPasswordState { int32 srp_g = 0; }; -Result get_new_password_state( - tl_object_ptr new_algo, - tl_object_ptr new_secure_algo); +Result get_new_password_state(tl_object_ptr new_algo, + tl_object_ptr new_secure_algo); } // namespace td \ No newline at end of file diff --git a/td/telegram/NotificationManager.cpp b/td/telegram/NotificationManager.cpp index 72f6b6777..8362341af 100644 --- a/td/telegram/NotificationManager.cpp +++ b/td/telegram/NotificationManager.cpp @@ -78,7 +78,7 @@ class SetContactSignUpNotificationQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_setContactSignUpNotification(is_disabled))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -87,7 +87,7 @@ class SetContactSignUpNotificationQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for set contact sign up notification: " << status; } @@ -106,7 +106,7 @@ class GetContactSignUpNotificationQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::account_getContactSignUpNotification())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -116,7 +116,7 @@ class GetContactSignUpNotificationQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for get contact sign up notification: " << status; } @@ -292,7 +292,7 @@ void NotificationManager::init() { public: explicit StateCallback(ActorId parent) : parent_(std::move(parent)) { } - bool on_online(bool is_online) override { + bool on_online(bool is_online) final { if (is_online) { send_closure(parent_, &NotificationManager::flush_all_pending_notifications); } diff --git a/td/telegram/NotificationManager.h b/td/telegram/NotificationManager.h index 890296e36..8f1ee4810 100644 --- a/td/telegram/NotificationManager.h +++ b/td/telegram/NotificationManager.h @@ -209,8 +209,8 @@ class NotificationManager : public Actor { bool is_disabled() const; - void start_up() override; - void tear_down() override; + void start_up() final; + void tear_down() final; void add_update(int32 group_id, td_api::object_ptr update); diff --git a/td/telegram/NotificationType.cpp b/td/telegram/NotificationType.cpp index 11dd0a81b..479fc42c4 100644 --- a/td/telegram/NotificationType.cpp +++ b/td/telegram/NotificationType.cpp @@ -25,23 +25,23 @@ namespace td { class NotificationTypeMessage : public NotificationType { - bool can_be_delayed() const override { + bool can_be_delayed() const final { return message_id_.is_valid() && message_id_.is_server(); } - bool is_temporary() const override { + bool is_temporary() const final { return false; } - MessageId get_message_id() const override { + MessageId get_message_id() const final { return message_id_; } - vector get_file_ids(const Td *td) const override { + vector get_file_ids(const Td *td) const final { return {}; } - td_api::object_ptr get_notification_type_object(DialogId dialog_id) const override { + td_api::object_ptr get_notification_type_object(DialogId dialog_id) const final { auto message_object = G()->td().get_actor_unsafe()->messages_manager_->get_message_object({dialog_id, message_id_}); if (message_object == nullptr) { return nullptr; @@ -49,7 +49,7 @@ class NotificationTypeMessage : public NotificationType { return td_api::make_object(std::move(message_object)); } - StringBuilder &to_string_builder(StringBuilder &string_builder) const override { + StringBuilder &to_string_builder(StringBuilder &string_builder) const final { return string_builder << "NewMessageNotification[" << message_id_ << ']'; } @@ -61,27 +61,27 @@ class NotificationTypeMessage : public NotificationType { }; class NotificationTypeSecretChat : public NotificationType { - bool can_be_delayed() const override { + bool can_be_delayed() const final { return false; } - bool is_temporary() const override { + bool is_temporary() const final { return false; } - MessageId get_message_id() const override { + MessageId get_message_id() const final { return MessageId(); } - vector get_file_ids(const Td *td) const override { + vector get_file_ids(const Td *td) const final { return {}; } - td_api::object_ptr get_notification_type_object(DialogId dialog_id) const override { + td_api::object_ptr get_notification_type_object(DialogId dialog_id) const final { return td_api::make_object(); } - StringBuilder &to_string_builder(StringBuilder &string_builder) const override { + StringBuilder &to_string_builder(StringBuilder &string_builder) const final { return string_builder << "NewSecretChatNotification[]"; } @@ -91,27 +91,27 @@ class NotificationTypeSecretChat : public NotificationType { }; class NotificationTypeCall : public NotificationType { - bool can_be_delayed() const override { + bool can_be_delayed() const final { return false; } - bool is_temporary() const override { + bool is_temporary() const final { return false; } - MessageId get_message_id() const override { + MessageId get_message_id() const final { return MessageId::max(); } - vector get_file_ids(const Td *td) const override { + vector get_file_ids(const Td *td) const final { return {}; } - td_api::object_ptr get_notification_type_object(DialogId dialog_id) const override { + td_api::object_ptr get_notification_type_object(DialogId dialog_id) const final { return td_api::make_object(call_id_.get()); } - StringBuilder &to_string_builder(StringBuilder &string_builder) const override { + StringBuilder &to_string_builder(StringBuilder &string_builder) const final { return string_builder << "NewCallNotification[" << call_id_ << ']'; } @@ -123,19 +123,19 @@ class NotificationTypeCall : public NotificationType { }; class NotificationTypePushMessage : public NotificationType { - bool can_be_delayed() const override { + bool can_be_delayed() const final { return false; } - bool is_temporary() const override { + bool is_temporary() const final { return true; } - MessageId get_message_id() const override { + MessageId get_message_id() const final { return message_id_; } - vector get_file_ids(const Td *td) const override { + vector get_file_ids(const Td *td) const final { if (!document_.empty()) { return document_.get_file_ids(td); } @@ -327,7 +327,7 @@ class NotificationTypePushMessage : public NotificationType { UNREACHABLE(); } - td_api::object_ptr get_notification_type_object(DialogId dialog_id) const override { + td_api::object_ptr get_notification_type_object(DialogId dialog_id) const final { auto sender = G()->td().get_actor_unsafe()->messages_manager_->get_message_sender_object(sender_user_id_, sender_dialog_id_); return td_api::make_object( @@ -335,7 +335,7 @@ class NotificationTypePushMessage : public NotificationType { get_push_message_content_object(key_, arg_, photo_, document_)); } - StringBuilder &to_string_builder(StringBuilder &string_builder) const override { + StringBuilder &to_string_builder(StringBuilder &string_builder) const final { return string_builder << "NewPushMessageNotification[" << sender_user_id_ << "/" << sender_dialog_id_ << "/\"" << sender_name_ << "\", " << message_id_ << ", " << key_ << ", " << arg_ << ", " << photo_ << ", " << document_ << ']'; diff --git a/td/telegram/PasswordManager.h b/td/telegram/PasswordManager.h index 0ffd37b1a..13d6b09d1 100644 --- a/td/telegram/PasswordManager.h +++ b/td/telegram/PasswordManager.h @@ -195,11 +195,11 @@ class PasswordManager : public NetQueryCallback { Promise promise); void on_finish_create_temp_password(Result result, bool dummy); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; - void start_up() override; - void timeout_expired() override; - void hangup() override; + void start_up() final; + void timeout_expired() final; + void hangup() final; Container> container_; void send_with_promise(NetQueryPtr query, Promise promise); diff --git a/td/telegram/Payments.cpp b/td/telegram/Payments.cpp index c9eb4adc4..e9072ce37 100644 --- a/td/telegram/Payments.cpp +++ b/td/telegram/Payments.cpp @@ -51,7 +51,7 @@ class SetBotShippingAnswerQuery : public Td::ResultHandler { flags, shipping_query_id, error_message, std::move(shipping_options)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -64,7 +64,7 @@ class SetBotShippingAnswerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -88,7 +88,7 @@ class SetBotPreCheckoutAnswerQuery : public Td::ResultHandler { flags, false /*ignored*/, pre_checkout_query_id, error_message))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -101,7 +101,7 @@ class SetBotPreCheckoutAnswerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -283,7 +283,7 @@ class GetPaymentFormQuery : public Td::ResultHandler { flags, std::move(input_peer), server_message_id.get(), std::move(theme_parameters)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -316,7 +316,7 @@ class GetPaymentFormQuery : public Td::ResultHandler { convert_saved_credentials(std::move(payment_form->saved_credentials_)), can_save_credentials, need_password)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetPaymentFormQuery"); promise_.set_error(std::move(status)); } @@ -351,7 +351,7 @@ class ValidateRequestedInfoQuery : public Td::ResultHandler { flags, false /*ignored*/, std::move(input_peer), server_message_id.get(), std::move(requested_info)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -365,7 +365,7 @@ class ValidateRequestedInfoQuery : public Td::ResultHandler { transform(std::move(validated_order_info->shipping_options_), convert_shipping_option))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "ValidateRequestedInfoQuery"); promise_.set_error(std::move(status)); } @@ -406,7 +406,7 @@ class SendPaymentFormQuery : public Td::ResultHandler { std::move(input_credentials), tip_amount))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -434,7 +434,7 @@ class SendPaymentFormQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SendPaymentFormQuery"); promise_.set_error(std::move(status)); } @@ -460,7 +460,7 @@ class GetPaymentReceiptQuery : public Td::ResultHandler { telegram_api::payments_getPaymentReceipt(std::move(input_peer), server_message_id.get()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -492,7 +492,7 @@ class GetPaymentReceiptQuery : public Td::ResultHandler { payment_receipt->tip_amount_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetPaymentReceiptQuery"); promise_.set_error(std::move(status)); } @@ -509,7 +509,7 @@ class GetSavedInfoQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::payments_getSavedInfo())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -520,7 +520,7 @@ class GetSavedInfoQuery : public Td::ResultHandler { promise_.set_value(convert_order_info(std::move(saved_info->saved_info_))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -545,7 +545,7 @@ class ClearSavedInfoQuery : public Td::ResultHandler { telegram_api::payments_clearSavedInfo(flags, false /*ignored*/, false /*ignored*/))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -554,7 +554,7 @@ class ClearSavedInfoQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -572,7 +572,7 @@ class GetBankCardInfoQuery : public Td::ResultHandler { G()->get_webfile_dc_id())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -585,7 +585,7 @@ class GetBankCardInfoQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(response->title_, std::move(actions))); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/PhoneNumberManager.h b/td/telegram/PhoneNumberManager.h index ecfa06e2d..c622d3127 100644 --- a/td/telegram/PhoneNumberManager.h +++ b/td/telegram/PhoneNumberManager.h @@ -62,8 +62,8 @@ class PhoneNumberManager : public NetActor { void on_check_code_result(NetQueryPtr &result); void on_send_code_result(NetQueryPtr &result); - void on_result(NetQueryPtr result) override; - void tear_down() override; + void on_result(NetQueryPtr result) final; + void tear_down() final; }; } // namespace td diff --git a/td/telegram/PollManager.cpp b/td/telegram/PollManager.cpp index dc745159b..ab634428b 100644 --- a/td/telegram/PollManager.cpp +++ b/td/telegram/PollManager.cpp @@ -71,7 +71,7 @@ class GetPollResultsQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getPollResults(std::move(input_peer), message_id))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -80,7 +80,7 @@ class GetPollResultsQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetPollResultsQuery") && status.message() != "MESSAGE_ID_INVALID") { LOG(ERROR) << "Receive " << status << ", while trying to get results of " << poll_id_; @@ -119,7 +119,7 @@ class GetPollVotersQuery : public Td::ResultHandler { flags, std::move(input_peer), message_id, std::move(option), offset, limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -128,7 +128,7 @@ class GetPollVotersQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->messages_manager_->on_get_dialog_error(dialog_id_, status, "GetPollVotersQuery") && status.message() != "MESSAGE_ID_INVALID") { LOG(ERROR) << "Receive " << status << ", while trying to get voters of " << poll_id_; @@ -162,7 +162,7 @@ class SetPollAnswerActor : public NetActorOnce { std::move(query), actor_shared(this), sequence_id); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -173,7 +173,7 @@ class SetPollAnswerActor : public NetActorOnce { promise_.set_value(std::move(result)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->messages_manager_->on_get_dialog_error(dialog_id_, status, "SetPollAnswerActor"); promise_.set_error(std::move(status)); } @@ -218,7 +218,7 @@ class StopPollActor : public NetActorOnce { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -229,7 +229,7 @@ class StopPollActor : public NetActorOnce { td->updates_manager_->on_get_updates(std::move(result), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && status.message() == "MESSAGE_NOT_MODIFIED") { return promise_.set_value(Unit()); } @@ -251,7 +251,7 @@ void PollManager::start_up() { public: explicit StateCallback(ActorId parent) : parent_(std::move(parent)) { } - bool on_online(bool is_online) override { + bool on_online(bool is_online) final { if (is_online) { send_closure(parent_, &PollManager::on_online); } diff --git a/td/telegram/PollManager.h b/td/telegram/PollManager.h index c982e25e1..367616b2e 100644 --- a/td/telegram/PollManager.h +++ b/td/telegram/PollManager.h @@ -41,7 +41,7 @@ class PollManager : public Actor { PollManager &operator=(const PollManager &) = delete; PollManager(PollManager &&) = delete; PollManager &operator=(PollManager &&) = delete; - ~PollManager() override; + ~PollManager() final; static bool is_local_poll_id(PollId poll_id); @@ -138,8 +138,8 @@ class PollManager : public Actor { class SetPollAnswerLogEvent; class StopPollLogEvent; - void start_up() override; - void tear_down() override; + void start_up() final; + void tear_down() final; static void on_update_poll_timeout_callback(void *poll_manager_ptr, int64 poll_id_int); diff --git a/td/telegram/PrivacyManager.h b/td/telegram/PrivacyManager.h index c6c0fbaf2..febf09e7b 100644 --- a/td/telegram/PrivacyManager.h +++ b/td/telegram/PrivacyManager.h @@ -155,11 +155,11 @@ class PrivacyManager : public NetQueryCallback { void do_update_privacy(UserPrivacySetting user_privacy_setting, UserPrivacySettingRules &&privacy_rules, bool from_update); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; Container> container_; void send_with_promise(NetQueryPtr query, Promise promise); - void hangup() override; + void hangup() final; }; } // namespace td diff --git a/td/telegram/QueryCombiner.h b/td/telegram/QueryCombiner.h index 4e035860e..5ff29b2f1 100644 --- a/td/telegram/QueryCombiner.h +++ b/td/telegram/QueryCombiner.h @@ -45,7 +45,7 @@ class QueryCombiner : public Actor { void on_get_query_result(int64 query_id, Result &&result); - void loop() override; + void loop() final; }; } // namespace td diff --git a/td/telegram/RequestActor.h b/td/telegram/RequestActor.h index 6229c2cdf..bcdbb3a5e 100644 --- a/td/telegram/RequestActor.h +++ b/td/telegram/RequestActor.h @@ -60,7 +60,7 @@ class RequestActor : public Actor { } } - void raw_event(const Event::Raw &event) override { + void raw_event(const Event::Raw &event) final { if (future_.is_error()) { auto error = future_.move_as_error(); if (error == Status::Error::HANGUP_ERROR_CODE>()) { @@ -84,10 +84,10 @@ class RequestActor : public Actor { } } - void on_start_migrate(int32 /*sched_id*/) override { + void on_start_migrate(int32 /*sched_id*/) final { UNREACHABLE(); } - void on_finish_migrate() override { + void on_finish_migrate() final { UNREACHABLE(); } @@ -127,7 +127,7 @@ class RequestActor : public Actor { CHECK((std::is_same::value)); // all other results should be implicitly handled by overriding this method } - void hangup() override { + void hangup() final { do_send_error(Status::Error(500, "Request aborted")); stop(); } @@ -144,7 +144,7 @@ class RequestOnceActor : public RequestActor<> { RequestOnceActor(ActorShared td_id, uint64 request_id) : RequestActor(std::move(td_id), request_id) { } - void loop() override { + void loop() final { if (get_tries() < 2) { do_send_result(); stop(); diff --git a/td/telegram/SecretChatActor.h b/td/telegram/SecretChatActor.h index ac951b77a..838fd43ec 100644 --- a/td/telegram/SecretChatActor.h +++ b/td/telegram/SecretChatActor.h @@ -659,12 +659,12 @@ class SecretChatActor : public NetQueryCallback { void ask_on_binlog_replay_finish(); void check_status(Status status); - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; Status do_loop(); - void tear_down() override; + void tear_down() final; - void on_result_resendable(NetQueryPtr net_query, Promise promise) override; + void on_result_resendable(NetQueryPtr net_query, Promise promise) final; Status run_auth(); void run_pfs(); diff --git a/td/telegram/SecretChatsManager.cpp b/td/telegram/SecretChatsManager.cpp index 38e28d69c..f37a89b87 100644 --- a/td/telegram/SecretChatsManager.cpp +++ b/td/telegram/SecretChatsManager.cpp @@ -86,7 +86,7 @@ void SecretChatsManager::start_up() { public: explicit StateCallback(ActorId parent) : parent_(std::move(parent)) { } - bool on_online(bool online_flag) override { + bool on_online(bool online_flag) final { send_closure(parent_, &SecretChatsManager::on_online, online_flag); return parent_.is_alive(); } @@ -301,29 +301,29 @@ unique_ptr SecretChatsManager::make_secret_chat_contex Context &operator=(const Context &other) = delete; Context(Context &&other) = delete; Context &operator=(Context &&other) = delete; - ~Context() override { + ~Context() final { send_closure(std::move(sequence_dispatcher_), &SequenceDispatcher::close_silent); } - DhCallback *dh_callback() override { + DhCallback *dh_callback() final { return DhCache::instance(); } - NetQueryCreator &net_query_creator() override { + NetQueryCreator &net_query_creator() final { return G()->net_query_creator(); } - BinlogInterface *binlog() override { + BinlogInterface *binlog() final { return G()->td_db()->get_binlog(); } - SecretChatDb *secret_chat_db() override { + SecretChatDb *secret_chat_db() final { return secret_chat_db_.get(); } - std::shared_ptr dh_config() override { + std::shared_ptr dh_config() final { return G()->get_dh_config(); } - void set_dh_config(std::shared_ptr dh_config) override { + void set_dh_config(std::shared_ptr dh_config) final { G()->set_dh_config(std::move(dh_config)); } - void send_net_query(NetQueryPtr query, ActorShared callback, bool ordered) override { + void send_net_query(NetQueryPtr query, ActorShared callback, bool ordered) final { if (ordered) { send_closure(sequence_dispatcher_, &SequenceDispatcher::send_with_callback, std::move(query), std::move(callback)); @@ -332,63 +332,63 @@ unique_ptr SecretChatsManager::make_secret_chat_contex } } - bool get_config_option_boolean(const string &name) const override { + bool get_config_option_boolean(const string &name) const final { return G()->shared_config().get_option_boolean(name); } - int32 unix_time() override { + int32 unix_time() final { return G()->unix_time(); } - bool close_flag() override { + bool close_flag() final { return G()->close_flag(); } void on_update_secret_chat(int64 access_hash, UserId user_id, SecretChatState state, bool is_outbound, int32 ttl, - int32 date, string key_hash, int32 layer, FolderId initial_folder_id) override { + int32 date, string key_hash, int32 layer, FolderId initial_folder_id) final { send_closure(G()->contacts_manager(), &ContactsManager::on_update_secret_chat, secret_chat_id_, access_hash, user_id, state, is_outbound, ttl, date, key_hash, layer, initial_folder_id); } void on_inbound_message(UserId user_id, MessageId message_id, int32 date, tl_object_ptr file, - tl_object_ptr message, Promise<> promise) override { + tl_object_ptr message, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_get_secret_message, secret_chat_id_, user_id, message_id, date, std::move(file), std::move(message), std::move(promise)); } - void on_send_message_error(int64 random_id, Status error, Promise<> promise) override { + void on_send_message_error(int64 random_id, Status error, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_send_secret_message_error, random_id, std::move(error), std::move(promise)); } - void on_send_message_ack(int64 random_id) override { + void on_send_message_ack(int64 random_id) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_send_message_get_quick_ack, random_id); } void on_send_message_ok(int64 random_id, MessageId message_id, int32 date, - tl_object_ptr file, Promise<> promise) override { + tl_object_ptr file, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_send_secret_message_success, random_id, message_id, date, std::move(file), std::move(promise)); } - void on_delete_messages(std::vector random_ids, Promise<> promise) override { + void on_delete_messages(std::vector random_ids, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::delete_secret_messages, secret_chat_id_, std::move(random_ids), std::move(promise)); } - void on_flush_history(bool remove_from_dialog_list, MessageId message_id, Promise<> promise) override { + void on_flush_history(bool remove_from_dialog_list, MessageId message_id, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::delete_secret_chat_history, secret_chat_id_, remove_from_dialog_list, message_id, std::move(promise)); } - void on_read_message(int64 random_id, Promise<> promise) override { + void on_read_message(int64 random_id, Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::open_secret_message, secret_chat_id_, random_id, std::move(promise)); } void on_screenshot_taken(UserId user_id, MessageId message_id, int32 date, int64 random_id, - Promise<> promise) override { + Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_secret_chat_screenshot_taken, secret_chat_id_, user_id, message_id, date, random_id, std::move(promise)); } void on_set_ttl(UserId user_id, MessageId message_id, int32 date, int32 ttl, int64 random_id, - Promise<> promise) override { + Promise<> promise) final { send_closure_later(G()->messages_manager(), &MessagesManager::on_secret_chat_ttl_changed, secret_chat_id_, user_id, message_id, date, ttl, random_id, std::move(promise)); } diff --git a/td/telegram/SecretChatsManager.h b/td/telegram/SecretChatsManager.h index 1aac56443..0265af504 100644 --- a/td/telegram/SecretChatsManager.h +++ b/td/telegram/SecretChatsManager.h @@ -75,10 +75,10 @@ class SecretChatsManager : public Actor { ActorId create_chat_actor(int32 id); ActorId create_chat_actor_impl(int32 id, bool can_be_empty); - void start_up() override; - void hangup() override; - void hangup_shared() override; - void timeout_expired() override; + void start_up() final; + void hangup() final; + void hangup_shared() final; + void timeout_expired() final; void on_online(bool is_online); }; diff --git a/td/telegram/SecureManager.cpp b/td/telegram/SecureManager.cpp index f5478dd06..96a0a13cd 100644 --- a/td/telegram/SecureManager.cpp +++ b/td/telegram/SecureManager.cpp @@ -44,10 +44,10 @@ class GetSecureValue : public NetQueryCallback { void on_error(Status error); void on_secret(Result r_secret, bool dummy); - void loop() override; - void start_up() override; + void loop() final; + void start_up() final; - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; }; class GetAllSecureValues : public NetQueryCallback { @@ -63,10 +63,10 @@ class GetAllSecureValues : public NetQueryCallback { void on_error(Status error); void on_secret(Result r_secret, bool dummy); - void loop() override; - void start_up() override; + void loop() final; + void start_up() final; - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; }; class SetSecureValue : public NetQueryCallback { @@ -101,10 +101,10 @@ class SetSecureValue : public NetQueryCallback { private: ActorId actor_id_; uint32 upload_generation_; - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override; - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override; - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override; - void on_upload_error(FileId file_id, Status status) override; + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final; + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final; + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final; + void on_upload_error(FileId file_id, Status status) final; }; void on_upload_ok(FileId file_id, tl_object_ptr input_file, uint32 upload_generation); @@ -114,12 +114,12 @@ class SetSecureValue : public NetQueryCallback { void on_secret(Result r_secret, bool x); - void start_up() override; - void hangup() override; - void tear_down() override; + void start_up() final; + void hangup() final; + void tear_down() final; - void loop() override; - void on_result(NetQueryPtr query) override; + void loop() final; + void on_result(NetQueryPtr query) final; void load_secret(); void cancel_upload(); @@ -141,7 +141,7 @@ class SetSecureValueErrorsQuery : public Td::ResultHandler { telegram_api::users_setSecureValueErrors(std::move(input_user), std::move(input_errors)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -152,7 +152,7 @@ class SetSecureValueErrorsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.code() != 0) { promise_.set_error(std::move(status)); } else { @@ -663,14 +663,14 @@ class DeleteSecureValue : public NetQueryCallback { SecureValueType type_; Promise promise_; - void start_up() override { + void start_up() final { std::vector> types; types.push_back(get_input_secure_value_type(type_)); auto query = G()->net_query_creator().create(telegram_api::account_deleteSecureValue(std::move(types))); G()->net_query_dispatcher().dispatch_with_callback(std::move(query), actor_shared(this)); } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { auto r_result = fetch_result(std::move(query)); if (r_result.is_error()) { promise_.set_error(r_result.move_as_error()); @@ -708,14 +708,14 @@ class GetPassportAuthorizationForm : public NetQueryCallback { stop(); } - void start_up() override { + void start_up() final { auto account_get_authorization_form = telegram_api::account_getAuthorizationForm(bot_user_id_.get(), std::move(scope_), std::move(public_key_)); auto query = G()->net_query_creator().create(account_get_authorization_form); G()->net_query_dispatcher().dispatch_with_callback(std::move(query), actor_shared(this)); } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { auto r_result = fetch_result(std::move(query)); if (r_result.is_error()) { return on_error(r_result.move_as_error()); @@ -764,12 +764,12 @@ class GetPassportConfig : public NetQueryCallback { string country_code_; Promise> promise_; - void start_up() override { + void start_up() final { auto query = G()->net_query_creator().create(telegram_api::help_getPassportConfig(0)); G()->net_query_dispatcher().dispatch_with_callback(std::move(query), actor_shared(this)); } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { auto r_result = fetch_result(std::move(query)); if (r_result.is_error()) { promise_.set_error(r_result.move_as_error()); diff --git a/td/telegram/SecureManager.h b/td/telegram/SecureManager.h index 2b24522f7..fade3bea3 100644 --- a/td/telegram/SecureManager.h +++ b/td/telegram/SecureManager.h @@ -77,8 +77,8 @@ class SecureManager : public NetQueryCallback { std::unordered_map authorization_forms_; int32 max_authorization_form_id_{0}; - void hangup() override; - void hangup_shared() override; + void hangup() final; + void hangup_shared() final; void dec_refcnt(); void on_delete_secure_value(SecureValueType type, Promise promise, Result result); void on_get_passport_authorization_form( @@ -88,7 +88,7 @@ class SecureManager : public NetQueryCallback { Promise promise, Result r_secret); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; Container> container_; void send_with_promise(NetQueryPtr query, Promise promise); }; diff --git a/td/telegram/SecureStorage.cpp b/td/telegram/SecureStorage.cpp index 7c7866f05..dd57dab7c 100644 --- a/td/telegram/SecureStorage.cpp +++ b/td/telegram/SecureStorage.cpp @@ -94,8 +94,8 @@ class FileDataView : public DataView { public: FileDataView(FileFd &fd, int64 size); - int64 size() const override; - Result pread(int64 offset, int64 size) const override; + int64 size() const final; + Result pread(int64 offset, int64 size) const final; private: FileFd &fd_; diff --git a/td/telegram/SecureStorage.h b/td/telegram/SecureStorage.h index efdf52258..8ffd365b7 100644 --- a/td/telegram/SecureStorage.h +++ b/td/telegram/SecureStorage.h @@ -77,8 +77,8 @@ class DataView { class BufferSliceDataView : public DataView { public: explicit BufferSliceDataView(BufferSlice buffer_slice); - int64 size() const override; - Result pread(int64 offset, int64 size) const override; + int64 size() const final; + Result pread(int64 offset, int64 size) const final; private: BufferSlice buffer_slice_; @@ -87,8 +87,8 @@ class BufferSliceDataView : public DataView { class ConcatDataView : public DataView { public: ConcatDataView(const DataView &left, const DataView &right); - int64 size() const override; - Result pread(int64 offset, int64 size) const override; + int64 size() const final; + Result pread(int64 offset, int64 size) const final; private: const DataView &left_; @@ -164,8 +164,8 @@ class Decryptor { class Encryptor : public DataView { public: Encryptor(AesCbcState aes_cbc_state, const DataView &data_view); - int64 size() const override; - Result pread(int64 offset, int64 size) const override; + int64 size() const final; + Result pread(int64 offset, int64 size) const final; private: mutable AesCbcState aes_cbc_state_; diff --git a/td/telegram/SequenceDispatcher.h b/td/telegram/SequenceDispatcher.h index d8b27d8cc..5a39df42c 100644 --- a/td/telegram/SequenceDispatcher.h +++ b/td/telegram/SequenceDispatcher.h @@ -29,7 +29,7 @@ class SequenceDispatcher : public NetQueryCallback { explicit SequenceDispatcher(ActorShared parent) : parent_(std::move(parent)) { } void send_with_callback(NetQueryPtr query, ActorShared callback); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; void close_silent(); private: @@ -65,12 +65,12 @@ class SequenceDispatcher : public NetQueryCallback { void do_resend(Data &data); void do_finish(Data &data); - void loop() override; + void loop() final; void try_shrink(); - void timeout_expired() override; - void hangup() override; - void tear_down() override; + void timeout_expired() final; + void hangup() final; + void tear_down() final; }; class MultiSequenceDispatcher : public SequenceDispatcher::Parent { @@ -83,8 +83,8 @@ class MultiSequenceDispatcher : public SequenceDispatcher::Parent { ActorOwn dispatcher_; }; std::unordered_map dispatchers_; - void on_result() override; - void ready_to_close() override; + void on_result() final; + void ready_to_close() final; }; } // namespace td diff --git a/td/telegram/StateManager.h b/td/telegram/StateManager.h index 72aef4d09..beb78dc34 100644 --- a/td/telegram/StateManager.h +++ b/td/telegram/StateManager.h @@ -130,8 +130,8 @@ class StateManager final : public Actor { enum class Flag : int32 { Online, State, Network, LoggingOut }; void notify_flag(Flag flag); - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; void on_network_soft(); void do_on_network(NetType new_network_type, bool inc_generation); diff --git a/td/telegram/StickersManager.cpp b/td/telegram/StickersManager.cpp index 7909b1f65..74501be42 100644 --- a/td/telegram/StickersManager.cpp +++ b/td/telegram/StickersManager.cpp @@ -74,7 +74,7 @@ class GetAllStickersQuery : public Td::ResultHandler { } } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { static_assert(std::is_same::value, ""); @@ -88,7 +88,7 @@ class GetAllStickersQuery : public Td::ResultHandler { td->stickers_manager_->on_get_installed_sticker_sets(is_masks_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for get all stickers: " << status; } @@ -105,7 +105,7 @@ class SearchStickersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getStickers(emoji_, hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -116,7 +116,7 @@ class SearchStickersQuery : public Td::ResultHandler { td->stickers_manager_->on_find_stickers_success(emoji_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for search stickers: " << status; } @@ -135,7 +135,7 @@ class GetEmojiKeywordsLanguageQuery : public Td::ResultHandler { send_query( G()->net_query_creator().create(telegram_api::messages_getEmojiKeywordsLanguages(std::move(language_codes)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -146,7 +146,7 @@ class GetEmojiKeywordsLanguageQuery : public Td::ResultHandler { promise_.set_value(std::move(result)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -163,7 +163,7 @@ class GetEmojiKeywordsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getEmojiKeywords(language_code))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -172,7 +172,7 @@ class GetEmojiKeywordsQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -191,7 +191,7 @@ class GetEmojiKeywordsDifferenceQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getEmojiKeywordsDifference(language_code, version))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -200,7 +200,7 @@ class GetEmojiKeywordsDifferenceQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -217,7 +217,7 @@ class GetEmojiUrlQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getEmojiURL(language_code))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -226,7 +226,7 @@ class GetEmojiUrlQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -256,7 +256,7 @@ class GetArchivedStickerSetsQuery : public Td::ResultHandler { telegram_api::messages_getArchivedStickers(flags, is_masks /*ignored*/, offset_sticker_set_id.get(), limit))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -270,7 +270,7 @@ class GetArchivedStickerSetsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -282,7 +282,7 @@ class GetFeaturedStickerSetsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getFeaturedStickers(hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -293,7 +293,7 @@ class GetFeaturedStickerSetsQuery : public Td::ResultHandler { td->stickers_manager_->on_get_featured_sticker_sets(-1, -1, 0, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->stickers_manager_->on_get_featured_sticker_sets_failed(-1, -1, 0, std::move(status)); } }; @@ -312,7 +312,7 @@ class GetOldFeaturedStickerSetsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getOldFeaturedStickers(offset, limit, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -323,7 +323,7 @@ class GetOldFeaturedStickerSetsQuery : public Td::ResultHandler { td->stickers_manager_->on_get_featured_sticker_sets(offset_, limit_, generation_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->stickers_manager_->on_get_featured_sticker_sets_failed(offset_, limit_, generation_, std::move(status)); } }; @@ -345,7 +345,7 @@ class GetAttachedStickerSetsQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getAttachedStickers(std::move(input_stickered_media)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -356,7 +356,7 @@ class GetAttachedStickerSetsQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { VLOG(file_references) << "Receive " << status << " for " << file_id_; td->file_manager_->delete_file_reference(file_id_, file_reference_); @@ -394,7 +394,7 @@ class GetRecentStickersQuery : public Td::ResultHandler { telegram_api::messages_getRecentStickers(flags, is_attached /*ignored*/, hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -406,7 +406,7 @@ class GetRecentStickersQuery : public Td::ResultHandler { td->stickers_manager_->on_get_recent_stickers(is_repair_, is_attached_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for get recent " << (is_attached_ ? "attached " : "") << "stickers: " << status; } @@ -443,7 +443,7 @@ class SaveRecentStickerQuery : public Td::ResultHandler { telegram_api::messages_saveRecentSticker(flags, is_attached /*ignored*/, std::move(input_document), unsave))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -458,7 +458,7 @@ class SaveRecentStickerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { VLOG(file_references) << "Receive " << status << " for " << file_id_; td->file_manager_->delete_file_reference(file_id_, file_reference_); @@ -503,7 +503,7 @@ class ClearRecentStickersQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_clearRecentStickers(flags, is_attached /*ignored*/))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -518,7 +518,7 @@ class ClearRecentStickersQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for clear recent " << (is_attached_ ? "attached " : "") << "stickers: " << status; } @@ -537,7 +537,7 @@ class GetFavedStickersQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getFavedStickers(hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -547,7 +547,7 @@ class GetFavedStickersQuery : public Td::ResultHandler { td->stickers_manager_->on_get_favorite_stickers(is_repair_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for get favorite stickers: " << status; } @@ -576,7 +576,7 @@ class FaveStickerQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_faveSticker(std::move(input_document), unsave))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -591,7 +591,7 @@ class FaveStickerQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!td->auth_manager_->is_bot() && FileReferenceManager::is_file_reference_error(status)) { VLOG(file_references) << "Receive " << status << " for " << file_id_; td->file_manager_->delete_file_reference(file_id_, file_reference_); @@ -630,7 +630,7 @@ class ReorderStickerSetsQuery : public Td::ResultHandler { flags, is_masks /*ignored*/, StickersManager::convert_sticker_set_ids(sticker_set_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -642,7 +642,7 @@ class ReorderStickerSetsQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for ReorderStickerSetsQuery: " << status; } @@ -669,7 +669,7 @@ class GetStickerSetQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getStickerSet(std::move(input_sticker_set)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -692,7 +692,7 @@ class GetStickerSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(INFO) << "Receive error for GetStickerSetQuery: " << status; td->stickers_manager_->on_load_sticker_set_fail(sticker_set_id_, status); promise_.set_error(std::move(status)); @@ -708,7 +708,7 @@ class ReloadSpecialStickerSetQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getStickerSet(type_.get_input_sticker_set()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -723,7 +723,7 @@ class ReloadSpecialStickerSetQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { LOG(WARNING) << "Receive error for ReloadSpecialStickerSetQuery: " << status; td->stickers_manager_->on_load_special_sticker_set(type_, std::move(status)); } @@ -739,7 +739,7 @@ class SearchStickerSetsQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_searchStickerSets(0, false /*ignored*/, query_, 0))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -750,7 +750,7 @@ class SearchStickerSetsQuery : public Td::ResultHandler { td->stickers_manager_->on_find_sticker_sets_success(query_, std::move(ptr)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for search sticker sets: " << status; } @@ -774,7 +774,7 @@ class InstallStickerSetQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_installStickerSet(std::move(input_set), is_archived))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -785,7 +785,7 @@ class InstallStickerSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -804,7 +804,7 @@ class UninstallStickerSetQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_uninstallStickerSet(std::move(input_set)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -820,7 +820,7 @@ class UninstallStickerSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -834,7 +834,7 @@ class ReadFeaturedStickerSetsQuery : public Td::ResultHandler { telegram_api::messages_readFeaturedStickers(StickersManager::convert_sticker_set_ids(sticker_set_ids)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -844,7 +844,7 @@ class ReadFeaturedStickerSetsQuery : public Td::ResultHandler { (void)result; } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for ReadFeaturedStickerSetsQuery: " << status; } @@ -871,7 +871,7 @@ class UploadStickerFileQuery : public Td::ResultHandler { telegram_api::messages_uploadMedia(std::move(input_peer), std::move(input_media)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -880,7 +880,7 @@ class UploadStickerFileQuery : public Td::ResultHandler { td->stickers_manager_->on_uploaded_sticker_file(file_id_, result_ptr.move_as_ok(), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); if (was_uploaded_) { CHECK(file_id_.is_valid()); @@ -910,7 +910,7 @@ class SuggestStickerSetShortNameQuery : public Td::ResultHandler { void send(const string &title) { send_query(G()->net_query_creator().create(telegram_api::stickers_suggestShortName(title))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -920,7 +920,7 @@ class SuggestStickerSetShortNameQuery : public Td::ResultHandler { promise_.set_value(std::move(ptr->short_name_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.message() == "TITLE_INVALID") { return promise_.set_value(string()); } @@ -939,7 +939,7 @@ class CheckStickerSetShortNameQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::stickers_checkShortName(short_name))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -948,7 +948,7 @@ class CheckStickerSetShortNameQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -981,7 +981,7 @@ class CreateNewStickerSetQuery : public Td::ResultHandler { title, short_name, nullptr, std::move(input_stickers), software))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -993,7 +993,7 @@ class CreateNewStickerSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -1011,7 +1011,7 @@ class AddStickerToSetQuery : public Td::ResultHandler { make_tl_object(short_name), std::move(input_sticker)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1023,7 +1023,7 @@ class AddStickerToSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -1041,7 +1041,7 @@ class SetStickerSetThumbnailQuery : public Td::ResultHandler { make_tl_object(short_name), std::move(input_document)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1053,7 +1053,7 @@ class SetStickerSetThumbnailQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -1071,7 +1071,7 @@ class SetStickerPositionQuery : public Td::ResultHandler { telegram_api::stickers_changeStickerPosition(std::move(input_document), position))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1083,7 +1083,7 @@ class SetStickerPositionQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -1100,7 +1100,7 @@ class DeleteStickerFromSetQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::stickers_removeStickerFromSet(std::move(input_document)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -1112,7 +1112,7 @@ class DeleteStickerFromSetQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { CHECK(status.is_error()); promise_.set_error(std::move(status)); } @@ -1169,20 +1169,20 @@ class StickersManager::StickerSetListLogEvent { class StickersManager::UploadStickerFileCallback : public FileManager::UploadCallback { public: - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure_later(G()->stickers_manager(), &StickersManager::on_upload_sticker_file, file_id, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { UNREACHABLE(); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure_later(G()->stickers_manager(), &StickersManager::on_upload_sticker_file_error, file_id, std::move(error)); } diff --git a/td/telegram/StickersManager.h b/td/telegram/StickersManager.h index 5adb560b9..8697e7e2a 100644 --- a/td/telegram/StickersManager.h +++ b/td/telegram/StickersManager.h @@ -576,9 +576,9 @@ class StickersManager : public Actor { td_api::object_ptr get_update_dice_emojis_object() const; - void start_up() override; + void start_up() final; - void tear_down() override; + void tear_down() final; SpecialStickerSet &add_special_sticker_set(const string &type); diff --git a/td/telegram/StorageManager.h b/td/telegram/StorageManager.h index 70a57b4ae..b05dedf5b 100644 --- a/td/telegram/StorageManager.h +++ b/td/telegram/StorageManager.h @@ -77,9 +77,9 @@ class StorageManager : public Actor { int32 ref_cnt_{1}; bool is_closed_{false}; ActorShared<> create_reference(); - void start_up() override; - void hangup_shared() override; - void hangup() override; + void start_up() final; + void hangup_shared() final; + void hangup() final; // Gc ActorOwn gc_worker_; @@ -99,7 +99,7 @@ class StorageManager : public Actor { void save_last_gc_timestamp(); void schedule_next_gc(); - void timeout_expired() override; + void timeout_expired() final; }; } // namespace td diff --git a/td/telegram/Td.cpp b/td/telegram/Td.cpp index 92fe06750..9a8b66e39 100644 --- a/td/telegram/Td.cpp +++ b/td/telegram/Td.cpp @@ -183,7 +183,7 @@ class GetPromoDataQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_getPromoData())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -192,7 +192,7 @@ class GetPromoDataQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -208,7 +208,7 @@ class GetRecentMeUrlsQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_getRecentMeUrls(referrer))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -291,7 +291,7 @@ class GetRecentMeUrlsQuery : public Td::ResultHandler { promise_.set_value(std::move(results)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -309,7 +309,7 @@ class SendCustomRequestQuery : public Td::ResultHandler { telegram_api::bots_sendCustomRequest(method, make_tl_object(parameters)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -319,7 +319,7 @@ class SendCustomRequestQuery : public Td::ResultHandler { promise_.set_value(td_api::make_object(result->data_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -336,7 +336,7 @@ class AnswerCustomQueryQuery : public Td::ResultHandler { telegram_api::bots_answerWebhookJSONQuery(custom_query_id, make_tl_object(data)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -349,7 +349,7 @@ class AnswerCustomQueryQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -361,7 +361,7 @@ class SetBotUpdatesStatusQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::help_setBotUpdatesStatus(pending_update_count, error_message))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -371,7 +371,7 @@ class SetBotUpdatesStatusQuery : public Td::ResultHandler { LOG_IF(WARNING, !result) << "Set bot updates status has failed"; } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (!G()->is_expected_error(status)) { LOG(WARNING) << "Receive error for SetBotUpdatesStatusQuery: " << status; } @@ -391,7 +391,7 @@ class UpdateStatusQuery : public Td::ResultHandler { return result; } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -402,7 +402,7 @@ class UpdateStatusQuery : public Td::ResultHandler { td->on_update_status_success(!is_offline_); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { if (status.code() != NetQuery::Canceled && !G()->is_expected_error(status)) { LOG(ERROR) << "Receive error for UpdateStatusQuery: " << status; } @@ -421,7 +421,7 @@ class GetInviteTextQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_getInviteText())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -431,7 +431,7 @@ class GetInviteTextQuery : public Td::ResultHandler { promise_.set_value(std::move(result->message_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -460,7 +460,7 @@ class GetDeepLinkInfoQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create_unauth(telegram_api::help_getDeepLinkInfo(link.str()))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -492,7 +492,7 @@ class GetDeepLinkInfoQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -512,7 +512,7 @@ class SaveAppLogQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create_unauth(telegram_api::help_saveAppLog(std::move(input_app_events)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -523,7 +523,7 @@ class SaveAppLogQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -537,7 +537,7 @@ class TestQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create_unauth(telegram_api::help_getConfig())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, Status::Error(500, "Fetch failed")); @@ -547,7 +547,7 @@ class TestQuery : public Td::ResultHandler { send_closure(G()->td(), &Td::send_result, request_id_, make_tl_object()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { status.ignore(); LOG(ERROR) << "Test query failed: " << status; } @@ -567,7 +567,7 @@ class TestProxyRequest : public RequestOnceActor { return mtproto::TransportType{mtproto::TransportType::ObfuscatedTcp, dc_id_, proxy_.secret()}; } - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { set_timeout_in(timeout_); promise_ = std::move(promise); @@ -606,10 +606,10 @@ class TestProxyRequest : public RequestOnceActor { } class HandshakeContext : public mtproto::AuthKeyHandshakeContext { public: - DhCallback *get_dh_callback() override { + DhCallback *get_dh_callback() final { return nullptr; } - PublicRsaKeyInterface *get_public_rsa_key_interface() override { + PublicRsaKeyInterface *get_public_rsa_key_interface() final { return &public_rsa_key; } @@ -650,7 +650,7 @@ class TestProxyRequest : public RequestOnceActor { promise_.set_value(Unit()); } - void timeout_expired() override { + void timeout_expired() final { send_error(Status::Error(400, "Timeout expired")); stop(); } @@ -667,11 +667,11 @@ class TestProxyRequest : public RequestOnceActor { class GetMeRequest : public RequestActor<> { UserId user_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { user_id_ = td->contacts_manager_->get_me(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_user_object(user_id_)); } @@ -683,11 +683,11 @@ class GetMeRequest : public RequestActor<> { class GetUserRequest : public RequestActor<> { UserId user_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->get_user(user_id_, get_tries(), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_user_object(user_id_)); } @@ -701,11 +701,11 @@ class GetUserRequest : public RequestActor<> { class GetUserFullInfoRequest : public RequestActor<> { UserId user_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->load_user_full(user_id_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_user_full_info_object(user_id_)); } @@ -718,11 +718,11 @@ class GetUserFullInfoRequest : public RequestActor<> { class GetGroupRequest : public RequestActor<> { ChatId chat_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->get_chat(chat_id_, get_tries(), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_basic_group_object(chat_id_)); } @@ -736,11 +736,11 @@ class GetGroupRequest : public RequestActor<> { class GetGroupFullInfoRequest : public RequestActor<> { ChatId chat_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->load_chat_full(chat_id_, get_tries() < 2, std::move(promise), "getBasicGroupFullInfo"); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_basic_group_full_info_object(chat_id_)); } @@ -753,11 +753,11 @@ class GetGroupFullInfoRequest : public RequestActor<> { class GetSupergroupRequest : public RequestActor<> { ChannelId channel_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->get_channel(channel_id_, get_tries(), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_supergroup_object(channel_id_)); } @@ -771,11 +771,11 @@ class GetSupergroupRequest : public RequestActor<> { class GetSupergroupFullInfoRequest : public RequestActor<> { ChannelId channel_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->load_channel_full(channel_id_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_supergroup_full_info_object(channel_id_)); } @@ -788,11 +788,11 @@ class GetSupergroupFullInfoRequest : public RequestActor<> { class GetSecretChatRequest : public RequestActor<> { SecretChatId secret_chat_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->get_secret_chat(secret_chat_id_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_secret_chat_object(secret_chat_id_)); } @@ -807,11 +807,11 @@ class GetChatRequest : public RequestActor<> { bool dialog_found_ = false; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_found_ = td->messages_manager_->load_dialog(dialog_id_, get_tries(), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { if (!dialog_found_) { send_error(Status::Error(400, "Chat is not accessible")); } else { @@ -829,11 +829,11 @@ class GetChatRequest : public RequestActor<> { class GetChatFilterRequest : public RequestActor<> { DialogFilterId dialog_filter_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->load_dialog_filter(dialog_filter_id_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_chat_filter_object(dialog_filter_id_)); } @@ -851,12 +851,12 @@ class GetChatsRequest : public RequestActor<> { std::pair> dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->get_dialogs(dialog_list_id_, offset_, limit_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(dialog_ids_)); } @@ -877,11 +877,11 @@ class SearchPublicChatRequest : public RequestActor<> { DialogId dialog_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_id_ = td->messages_manager_->search_public_dialog(username_, get_tries() < 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_chat_object(dialog_id_)); } @@ -897,11 +897,11 @@ class SearchPublicChatsRequest : public RequestActor<> { vector dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->search_public_dialogs(query_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -917,11 +917,11 @@ class SearchChatsRequest : public RequestActor<> { std::pair> dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->search_dialogs(query_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(dialog_ids_)); } @@ -937,11 +937,11 @@ class SearchChatsOnServerRequest : public RequestActor<> { vector dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->search_dialogs_on_server(query_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -958,12 +958,12 @@ class GetGroupsInCommonRequest : public RequestActor<> { std::pair> dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->get_common_dialogs(user_id_, offset_dialog_id_, limit_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(dialog_ids_)); } @@ -977,11 +977,11 @@ class GetCreatedPublicChatsRequest : public RequestActor<> { vector dialog_ids_; PublicDialogType type_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->contacts_manager_->get_created_public_dialogs(type_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -994,11 +994,11 @@ class GetCreatedPublicChatsRequest : public RequestActor<> { class GetSuitableDiscussionChatsRequest : public RequestActor<> { vector dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->contacts_manager_->get_dialogs_for_discussion(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -1010,11 +1010,11 @@ class GetSuitableDiscussionChatsRequest : public RequestActor<> { class GetInactiveSupergroupChatsRequest : public RequestActor<> { vector dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->contacts_manager_->get_inactive_channels(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -1026,11 +1026,11 @@ class GetInactiveSupergroupChatsRequest : public RequestActor<> { class GetMessageRequest : public RequestOnceActor { FullMessageId full_message_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->get_message(full_message_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1046,12 +1046,12 @@ class GetRepliedMessageRequest : public RequestOnceActor { FullMessageId replied_message_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { replied_message_id_ = td->messages_manager_->get_replied_message(dialog_id_, message_id_, get_tries() < 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(replied_message_id_)); } @@ -1068,7 +1068,7 @@ class GetMessageThreadRequest : public RequestActor &&promise) override { + void do_run(Promise &&promise) final { if (get_tries() < 2) { promise.set_value(std::move(message_thread_info_)); return; @@ -1076,11 +1076,11 @@ class GetMessageThreadRequest : public RequestActormessages_manager_->get_message_thread(dialog_id_, message_id_, std::move(promise)); } - void do_set_result(MessagesManager::MessageThreadInfo &&result) override { + void do_set_result(MessagesManager::MessageThreadInfo &&result) final { message_thread_info_ = std::move(result); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_thread_info_object(message_thread_info_)); } @@ -1095,11 +1095,11 @@ class GetChatPinnedMessageRequest : public RequestOnceActor { MessageId pinned_message_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { pinned_message_id_ = td->messages_manager_->get_dialog_pinned_message(dialog_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object({dialog_id_, pinned_message_id_})); } @@ -1115,11 +1115,11 @@ class GetCallbackQueryMessageRequest : public RequestOnceActor { MessageId message_id_; int64 callback_query_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->get_callback_query_message(dialog_id_, message_id_, callback_query_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object({dialog_id_, message_id_})); } @@ -1137,11 +1137,11 @@ class GetMessagesRequest : public RequestOnceActor { DialogId dialog_id_; vector message_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->get_messages(dialog_id_, message_ids_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(-1, dialog_id_, message_ids_, false)); } @@ -1159,11 +1159,11 @@ class GetMessageEmbeddingCodeRequest : public RequestActor<> { string html_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { html_ = td->messages_manager_->get_message_embedding_code(full_message_id_, for_group_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(make_tl_object(html_)); } @@ -1181,7 +1181,7 @@ class GetMessageLinkInfoRequest : public RequestActor { MessageLinkInfo message_link_info_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { if (get_tries() < 2) { promise.set_value(std::move(message_link_info_)); return; @@ -1189,11 +1189,11 @@ class GetMessageLinkInfoRequest : public RequestActor { td->messages_manager_->get_message_link_info(url_, std::move(promise)); } - void do_set_result(MessageLinkInfo &&result) override { + void do_set_result(MessageLinkInfo &&result) final { message_link_info_ = std::move(result); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_link_info_object(message_link_info_)); } @@ -1208,12 +1208,12 @@ class EditMessageTextRequest : public RequestOnceActor { tl_object_ptr reply_markup_; tl_object_ptr input_message_content_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->edit_message_text(full_message_id_, std::move(reply_markup_), std::move(input_message_content_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1235,12 +1235,12 @@ class EditMessageLiveLocationRequest : public RequestOnceActor { int32 heading_; int32 proximity_alert_radius_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->edit_message_live_location(full_message_id_, std::move(reply_markup_), std::move(location_), heading_, proximity_alert_radius_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1262,12 +1262,12 @@ class EditMessageMediaRequest : public RequestOnceActor { tl_object_ptr reply_markup_; tl_object_ptr input_message_content_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->edit_message_media(full_message_id_, std::move(reply_markup_), std::move(input_message_content_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1287,12 +1287,12 @@ class EditMessageCaptionRequest : public RequestOnceActor { tl_object_ptr reply_markup_; tl_object_ptr caption_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->edit_message_caption(full_message_id_, std::move(reply_markup_), std::move(caption_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1311,11 +1311,11 @@ class EditMessageReplyMarkupRequest : public RequestOnceActor { FullMessageId full_message_id_; tl_object_ptr reply_markup_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->edit_message_reply_markup(full_message_id_, std::move(reply_markup_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1335,12 +1335,12 @@ class SetGameScoreRequest : public RequestOnceActor { int32 score_; bool force_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->set_game_score(full_message_id_, edit_message_, user_id_, score_, force_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_message_object(full_message_id_)); } @@ -1362,11 +1362,11 @@ class GetGameHighScoresRequest : public RequestOnceActor { int64 random_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { random_id_ = td->messages_manager_->get_game_high_scores(full_message_id_, user_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(random_id_ != 0); send_result(td->messages_manager_->get_game_high_scores_object(random_id_)); } @@ -1386,11 +1386,11 @@ class GetInlineGameHighScoresRequest : public RequestOnceActor { int64 random_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { random_id_ = td->messages_manager_->get_inline_game_high_scores(inline_message_id_, user_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(random_id_ != 0); send_result(td->messages_manager_->get_game_high_scores_object(random_id_)); } @@ -1413,12 +1413,12 @@ class GetChatHistoryRequest : public RequestActor<> { tl_object_ptr messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->get_dialog_history(dialog_id_, from_message_id_, offset_, limit_, get_tries() - 1, only_local_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(std::move(messages_)); } @@ -1447,12 +1447,12 @@ class GetMessageThreadHistoryRequest : public RequestActor<> { std::pair> messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->get_message_thread_history(dialog_id_, message_id_, from_message_id_, offset_, limit_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(-1, messages_.first, messages_.second, true)); } @@ -1483,17 +1483,17 @@ class SearchChatMessagesRequest : public RequestActor<> { std::pair> messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->search_dialog_messages(dialog_id_, query_, sender_, from_message_id_, offset_, limit_, filter_, top_thread_message_id_, random_id_, get_tries() == 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(messages_.first, dialog_id_, messages_.second, true)); } - void do_send_error(Status &&status) override { + void do_send_error(Status &&status) final { if (status.message() == "SEARCH_QUERY_EMPTY") { messages_.first = 0; messages_.second.clear(); @@ -1530,12 +1530,12 @@ class SearchSecretMessagesRequest : public RequestActor<> { MessagesManager::FoundMessages found_messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { found_messages_ = td->messages_manager_->offline_search_messages(dialog_id_, query_, offset_, limit_, filter_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_found_messages_object(found_messages_)); } @@ -1567,17 +1567,17 @@ class SearchMessagesRequest : public RequestActor<> { std::pair> messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->search_messages(folder_id_, ignore_folder_id_, query_, offset_date_, offset_dialog_id_, offset_message_id_, limit_, filter_, min_date_, max_date_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(messages_.first, messages_.second, true)); } - void do_send_error(Status &&status) override { + void do_send_error(Status &&status) final { if (status.message() == "SEARCH_QUERY_EMPTY") { messages_.first = 0; messages_.second.clear(); @@ -1613,12 +1613,12 @@ class SearchCallMessagesRequest : public RequestActor<> { std::pair> messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->search_call_messages(from_message_id_, limit_, only_missed_, random_id_, get_tries() == 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(messages_.first, messages_.second, true)); } @@ -1640,12 +1640,12 @@ class SearchChatRecentLocationMessagesRequest : public RequestActor<> { std::pair> messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->search_dialog_recent_location_messages(dialog_id_, limit_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(messages_.first, dialog_id_, messages_.second, true)); } @@ -1658,11 +1658,11 @@ class SearchChatRecentLocationMessagesRequest : public RequestActor<> { class GetActiveLiveLocationMessagesRequest : public RequestActor<> { vector full_message_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { full_message_ids_ = td->messages_manager_->get_active_live_location_messages(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(-1, full_message_ids_, true)); } @@ -1678,11 +1678,11 @@ class GetChatMessageByDateRequest : public RequestOnceActor { int64 random_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { random_id_ = td->messages_manager_->get_dialog_message_by_date(dialog_id_, date_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_dialog_message_by_date_object(random_id_)); } @@ -1700,12 +1700,12 @@ class GetChatMessageCountRequest : public RequestActor<> { int32 result_ = 0; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { result_ = td->messages_manager_->get_dialog_message_count(dialog_id_, filter_, return_local_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td_api::make_object(result_)); } @@ -1725,12 +1725,12 @@ class GetChatScheduledMessagesRequest : public RequestActor<> { vector message_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { message_ids_ = td->messages_manager_->get_dialog_scheduled_messages(dialog_id_, get_tries() < 2, false, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_messages_object(-1, dialog_id_, message_ids_, true)); } @@ -1749,12 +1749,12 @@ class GetMessagePublicForwardsRequest : public RequestActor<> { MessagesManager::FoundMessages messages_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { messages_ = td->messages_manager_->get_message_public_forwards(full_message_id_, offset_, limit_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_found_messages_object(messages_)); } @@ -1774,11 +1774,11 @@ class GetWebPagePreviewRequest : public RequestOnceActor { int64 request_id_ = 0; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { request_id_ = td->web_pages_manager_->get_web_page_preview(std::move(text_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->web_pages_manager_->get_web_page_preview_result(request_id_)); } @@ -1794,12 +1794,12 @@ class GetWebPageInstantViewRequest : public RequestActor<> { WebPageId web_page_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { web_page_id_ = td->web_pages_manager_->get_web_page_instant_view(url_, force_full_, get_tries() < 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->web_pages_manager_->get_web_page_instant_view_object(web_page_id_)); } @@ -1814,11 +1814,11 @@ class CreateChatRequest : public RequestActor<> { DialogId dialog_id_; bool force_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->messages_manager_->create_dialog(dialog_id_, force_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->messages_manager_->get_chat_object(dialog_id_)); } @@ -1835,11 +1835,11 @@ class CreateNewGroupChatRequest : public RequestActor<> { DialogId dialog_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_id_ = td->messages_manager_->create_new_group_chat(user_ids_, title_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(dialog_id_.is_valid()); send_result(td->messages_manager_->get_chat_object(dialog_id_)); } @@ -1857,7 +1857,7 @@ class CreateNewSecretChatRequest : public RequestActor { UserId user_id_; SecretChatId secret_chat_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { if (get_tries() < 2) { promise.set_value(std::move(secret_chat_id_)); return; @@ -1865,12 +1865,12 @@ class CreateNewSecretChatRequest : public RequestActor { td->messages_manager_->create_new_secret_chat(user_id_, std::move(promise)); } - void do_set_result(SecretChatId &&result) override { + void do_set_result(SecretChatId &&result) final { secret_chat_id_ = result; LOG(INFO) << "New " << secret_chat_id_ << " created"; } - void do_send_result() override { + void do_send_result() final { CHECK(secret_chat_id_.is_valid()); // SecretChatActor will send this update by itself // But since the update may still be on its way, we will update essential fields here. @@ -1898,12 +1898,12 @@ class CreateNewSupergroupChatRequest : public RequestActor<> { DialogId dialog_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_id_ = td->messages_manager_->create_new_channel_chat(title_, is_megagroup_, description_, location_, for_import_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(dialog_id_.is_valid()); send_result(td->messages_manager_->get_chat_object(dialog_id_)); } @@ -1928,11 +1928,11 @@ class UpgradeGroupChatToSupergroupChatRequest : public RequestActor<> { DialogId result_dialog_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { result_dialog_id_ = td->messages_manager_->migrate_dialog_to_megagroup(dialog_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(result_dialog_id_.is_valid()); send_result(td->messages_manager_->get_chat_object(result_dialog_id_)); } @@ -1950,12 +1950,12 @@ class GetChatMemberRequest : public RequestActor<> { DialogParticipant dialog_participant_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_participant_ = td->contacts_manager_->get_dialog_participant(dialog_id_, participant_dialog_id_, random_id_, get_tries() < 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { bool is_user = participant_dialog_id_.get_type() == DialogType::User; if ((is_user && !td->contacts_manager_->have_user(participant_dialog_id_.get_user_id())) || (!is_user && !td->messages_manager_->have_dialog(participant_dialog_id_))) { @@ -1979,11 +1979,11 @@ class GetChatAdministratorsRequest : public RequestActor<> { vector administrators_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { administrators_ = td->contacts_manager_->get_dialog_administrators(dialog_id_, get_tries(), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto administrator_objects = transform( administrators_, [contacts_manager = td->contacts_manager_.get()](const DialogAdministrator &administrator) { return administrator.get_chat_administrator_object(contacts_manager); @@ -2001,11 +2001,11 @@ class GetChatAdministratorsRequest : public RequestActor<> { class CheckChatInviteLinkRequest : public RequestActor<> { string invite_link_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->check_dialog_invite_link(invite_link_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto result = td->contacts_manager_->get_chat_invite_link_info_object(invite_link_); CHECK(result != nullptr); send_result(std::move(result)); @@ -2022,7 +2022,7 @@ class JoinChatByInviteLinkRequest : public RequestActor { DialogId dialog_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { if (get_tries() < 2) { promise.set_value(std::move(dialog_id_)); return; @@ -2030,11 +2030,11 @@ class JoinChatByInviteLinkRequest : public RequestActor { td->contacts_manager_->import_dialog_invite_link(invite_link_, std::move(promise)); } - void do_set_result(DialogId &&result) override { + void do_set_result(DialogId &&result) final { dialog_id_ = result; } - void do_send_result() override { + void do_send_result() final { CHECK(dialog_id_.is_valid()); td->messages_manager_->force_create_dialog(dialog_id_, "join chat by invite link"); send_result(td->messages_manager_->get_chat_object(dialog_id_)); @@ -2056,12 +2056,12 @@ class GetChatEventLogRequest : public RequestOnceActor { int64 random_id_ = 0; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { random_id_ = td->messages_manager_->get_dialog_event_log(dialog_id_, query_, from_event_id_, limit_, filters_, user_ids_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(random_id_ != 0); send_result(td->messages_manager_->get_chat_events_object(random_id_)); } @@ -2086,11 +2086,11 @@ class GetBlockedMessageSendersRequest : public RequestActor<> { std::pair> message_senders_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { message_senders_ = td->messages_manager_->get_blocked_dialogs(offset_, limit_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto senders = transform(message_senders_.second, [messages_manager = td->messages_manager_.get()](DialogId dialog_id) { return messages_manager->get_message_sender_object(dialog_id); @@ -2110,11 +2110,11 @@ class ImportContactsRequest : public RequestActor<> { std::pair, vector> imported_contacts_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { imported_contacts_ = td->contacts_manager_->import_contacts(contacts_, random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(imported_contacts_.first.size() == contacts_.size()); CHECK(imported_contacts_.second.size() == contacts_.size()); send_result(make_tl_object(transform(imported_contacts_.first, @@ -2138,11 +2138,11 @@ class SearchContactsRequest : public RequestActor<> { std::pair> user_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { user_ids_ = td->contacts_manager_->search_contacts(query_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_users_object(user_ids_.first, user_ids_.second)); } @@ -2155,7 +2155,7 @@ class SearchContactsRequest : public RequestActor<> { class RemoveContactsRequest : public RequestActor<> { vector user_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->contacts_manager_->remove_contacts(user_ids_, std::move(promise)); } @@ -2169,11 +2169,11 @@ class RemoveContactsRequest : public RequestActor<> { class GetImportedContactCountRequest : public RequestActor<> { int32 imported_contact_count_ = 0; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { imported_contact_count_ = td->contacts_manager_->get_imported_contact_count(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td_api::make_object(imported_contact_count_)); } @@ -2189,12 +2189,12 @@ class ChangeImportedContactsRequest : public RequestActor<> { std::pair, vector> imported_contacts_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { imported_contacts_ = td->contacts_manager_->change_imported_contacts(std::move(contacts_), random_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(imported_contacts_.first.size() == contacts_size_); CHECK(imported_contacts_.second.size() == contacts_size_); send_result(make_tl_object(transform(imported_contacts_.first, @@ -2219,11 +2219,11 @@ class ChangeImportedContactsRequest : public RequestActor<> { class GetRecentInlineBotsRequest : public RequestActor<> { vector user_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { user_ids_ = td->inline_queries_manager_->get_recent_inline_bots(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_users_object(-1, user_ids_)); } @@ -2238,11 +2238,11 @@ class GetUserProfilePhotosRequest : public RequestActor<> { int32 limit_; std::pair> photos; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { photos = td->contacts_manager_->get_user_profile_photos(user_id_, offset_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { // TODO create function get_user_profile_photos_object auto result = transform(photos.second, [file_manager = td->file_manager_.get()](const Photo *photo) { CHECK(photo != nullptr); @@ -2266,12 +2266,12 @@ class GetChatNotificationSettingsExceptionsRequest : public RequestActor<> { vector dialog_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { dialog_ids_ = td->messages_manager_->get_dialog_notification_settings_exceptions( scope_, filter_scope_, compare_sound_, get_tries() < 3, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(MessagesManager::get_chats_object(-1, dialog_ids_)); } @@ -2291,11 +2291,11 @@ class GetScopeNotificationSettingsRequest : public RequestActor<> { const ScopeNotificationSettings *notification_settings_ = nullptr; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { notification_settings_ = td->messages_manager_->get_scope_notification_settings(scope_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { CHECK(notification_settings_ != nullptr); send_result(get_scope_notification_settings_object(notification_settings_)); } @@ -2312,11 +2312,11 @@ class GetStickersRequest : public RequestActor<> { vector sticker_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_ids_ = td->stickers_manager_->get_stickers(emoji_, limit_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_stickers_object(sticker_ids_)); } @@ -2333,11 +2333,11 @@ class SearchStickersRequest : public RequestActor<> { vector sticker_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_ids_ = td->stickers_manager_->search_stickers(emoji_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_stickers_object(sticker_ids_)); } @@ -2352,11 +2352,11 @@ class GetInstalledStickerSetsRequest : public RequestActor<> { vector sticker_set_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_ids_ = td->stickers_manager_->get_installed_sticker_sets(is_masks_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(-1, sticker_set_ids_, 1)); } @@ -2374,12 +2374,12 @@ class GetArchivedStickerSetsRequest : public RequestActor<> { int32 total_count_; vector sticker_set_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { std::tie(total_count_, sticker_set_ids_) = td->stickers_manager_->get_archived_sticker_sets( is_masks_, offset_sticker_set_id_, limit_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(total_count_, sticker_set_ids_, 1)); } @@ -2398,11 +2398,11 @@ class GetTrendingStickerSetsRequest : public RequestActor<> { int32 offset_; int32 limit_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_ids_ = td->stickers_manager_->get_featured_sticker_sets(offset_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(sticker_set_ids_.first, sticker_set_ids_.second, 5)); } @@ -2418,11 +2418,11 @@ class GetAttachedStickerSetsRequest : public RequestActor<> { vector sticker_set_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_ids_ = td->stickers_manager_->get_attached_sticker_sets(file_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(-1, sticker_set_ids_, 5)); } @@ -2437,11 +2437,11 @@ class GetStickerSetRequest : public RequestActor<> { StickerSetId sticker_set_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_id_ = td->stickers_manager_->get_sticker_set(set_id_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_set_object(sticker_set_id_)); } @@ -2457,11 +2457,11 @@ class SearchStickerSetRequest : public RequestActor<> { StickerSetId sticker_set_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_id_ = td->stickers_manager_->search_sticker_set(name_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_set_object(sticker_set_id_)); } @@ -2479,12 +2479,12 @@ class SearchInstalledStickerSetsRequest : public RequestActor<> { std::pair> sticker_set_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_ids_ = td->stickers_manager_->search_installed_sticker_sets(is_masks_, query_, limit_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(sticker_set_ids_.first, sticker_set_ids_.second, 5)); } @@ -2499,11 +2499,11 @@ class SearchStickerSetsRequest : public RequestActor<> { vector sticker_set_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_set_ids_ = td->stickers_manager_->search_sticker_sets(query_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_sticker_sets_object(-1, sticker_set_ids_, 5)); } @@ -2518,7 +2518,7 @@ class ChangeStickerSetRequest : public RequestOnceActor { bool is_installed_; bool is_archived_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->change_sticker_set(set_id_, is_installed_, is_archived_, std::move(promise)); } @@ -2538,11 +2538,11 @@ class UploadStickerFileRequest : public RequestOnceActor { FileId file_id; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { file_id = td->stickers_manager_->upload_sticker_file(user_id_, std::move(sticker_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->file_manager_->get_file_object(file_id)); } @@ -2561,12 +2561,12 @@ class CreateNewStickerSetRequest : public RequestOnceActor { vector> stickers_; string software_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->create_new_sticker_set(user_id_, title_, name_, is_masks_, std::move(stickers_), std::move(software_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto set_id = td->stickers_manager_->search_sticker_set(name_, Auto()); if (!set_id.is_valid()) { return send_error(Status::Error(500, "Created sticker set not found")); @@ -2592,11 +2592,11 @@ class AddStickerToSetRequest : public RequestOnceActor { string name_; tl_object_ptr sticker_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->add_sticker_to_set(user_id_, name_, std::move(sticker_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto set_id = td->stickers_manager_->search_sticker_set(name_, Auto()); if (!set_id.is_valid()) { return send_error(Status::Error(500, "Sticker set not found")); @@ -2619,11 +2619,11 @@ class SetStickerSetThumbnailRequest : public RequestOnceActor { string name_; tl_object_ptr thumbnail_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->set_sticker_set_thumbnail(user_id_, name_, std::move(thumbnail_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { auto set_id = td->stickers_manager_->search_sticker_set(name_, Auto()); if (!set_id.is_valid()) { return send_error(Status::Error(500, "Sticker set not found")); @@ -2646,11 +2646,11 @@ class GetRecentStickersRequest : public RequestActor<> { vector sticker_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_ids_ = td->stickers_manager_->get_recent_stickers(is_attached_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_stickers_object(sticker_ids_)); } @@ -2664,7 +2664,7 @@ class AddRecentStickerRequest : public RequestActor<> { bool is_attached_; tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->add_recent_sticker(is_attached_, input_file_, std::move(promise)); } @@ -2680,7 +2680,7 @@ class RemoveRecentStickerRequest : public RequestActor<> { bool is_attached_; tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->remove_recent_sticker(is_attached_, input_file_, std::move(promise)); } @@ -2695,7 +2695,7 @@ class RemoveRecentStickerRequest : public RequestActor<> { class ClearRecentStickersRequest : public RequestActor<> { bool is_attached_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->clear_recent_stickers(is_attached_, std::move(promise)); } @@ -2709,11 +2709,11 @@ class ClearRecentStickersRequest : public RequestActor<> { class GetFavoriteStickersRequest : public RequestActor<> { vector sticker_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { sticker_ids_ = td->stickers_manager_->get_favorite_stickers(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_stickers_object(sticker_ids_)); } @@ -2725,7 +2725,7 @@ class GetFavoriteStickersRequest : public RequestActor<> { class AddFavoriteStickerRequest : public RequestOnceActor { tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->add_favorite_sticker(input_file_, std::move(promise)); } @@ -2739,7 +2739,7 @@ class AddFavoriteStickerRequest : public RequestOnceActor { class RemoveFavoriteStickerRequest : public RequestOnceActor { tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->stickers_manager_->remove_favorite_sticker(input_file_, std::move(promise)); } @@ -2755,11 +2755,11 @@ class GetStickerEmojisRequest : public RequestActor<> { vector emojis_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { emojis_ = td->stickers_manager_->get_sticker_emojis(input_file_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td_api::make_object(std::move(emojis_))); } @@ -2777,12 +2777,12 @@ class SearchEmojisRequest : public RequestActor<> { vector emojis_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { emojis_ = td->stickers_manager_->search_emojis(text_, exact_match_, input_language_codes_, get_tries() < 2, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td_api::make_object(std::move(emojis_))); } @@ -2802,11 +2802,11 @@ class GetEmojiSuggestionsUrlRequest : public RequestOnceActor { int64 random_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { random_id_ = td->stickers_manager_->get_emoji_suggestions_url(language_code_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->stickers_manager_->get_emoji_suggestions_url_result(random_id_)); } @@ -2819,11 +2819,11 @@ class GetEmojiSuggestionsUrlRequest : public RequestOnceActor { class GetSavedAnimationsRequest : public RequestActor<> { vector animation_ids_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { animation_ids_ = td->animations_manager_->get_saved_animations(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(make_tl_object(transform(std::move(animation_ids_), [td = td](FileId animation_id) { return td->animations_manager_->get_animation_object(animation_id, "GetSavedAnimationsRequest"); }))); @@ -2837,7 +2837,7 @@ class GetSavedAnimationsRequest : public RequestActor<> { class AddSavedAnimationRequest : public RequestOnceActor { tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->animations_manager_->add_saved_animation(input_file_, std::move(promise)); } @@ -2851,7 +2851,7 @@ class AddSavedAnimationRequest : public RequestOnceActor { class RemoveSavedAnimationRequest : public RequestOnceActor { tl_object_ptr input_file_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->animations_manager_->remove_saved_animation(input_file_, std::move(promise)); } @@ -2871,12 +2871,12 @@ class GetInlineQueryResultsRequest : public RequestOnceActor { uint64 query_hash_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { query_hash_ = td->inline_queries_manager_->send_inline_query(bot_user_id_, dialog_id_, user_location_, query_, offset_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->inline_queries_manager_->get_inline_query_results_object(query_hash_)); } @@ -2899,16 +2899,16 @@ class GetCallbackQueryAnswerRequest : public RequestOnceActor { int64 result_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { result_id_ = td->callback_queries_manager_->send_callback_query(full_message_id_, std::move(payload_), std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->callback_queries_manager_->get_callback_query_answer_object(result_id_)); } - void do_send_error(Status &&status) override { + void do_send_error(Status &&status) final { if (status.code() == 502 && td->messages_manager_->is_message_edited_recently(full_message_id_, 31)) { return send_result(make_tl_object()); } @@ -2928,11 +2928,11 @@ class GetCallbackQueryAnswerRequest : public RequestOnceActor { class GetSupportUserRequest : public RequestActor<> { UserId user_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { user_id_ = td->contacts_manager_->get_support_user(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->contacts_manager_->get_user_object(user_id_)); } @@ -2944,11 +2944,11 @@ class GetSupportUserRequest : public RequestActor<> { class GetBackgroundsRequest : public RequestOnceActor { bool for_dark_theme_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { td->background_manager_->get_backgrounds(std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->background_manager_->get_backgrounds_object(for_dark_theme_)); } @@ -2963,11 +2963,11 @@ class SearchBackgroundRequest : public RequestActor<> { std::pair background_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { background_ = td->background_manager_->search_background(name_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->background_manager_->get_background_object(background_.first, false, &background_.second)); } @@ -2985,12 +2985,12 @@ class SetBackgroundRequest : public RequestActor<> { BackgroundId background_id_; - void do_run(Promise &&promise) override { + void do_run(Promise &&promise) final { background_id_ = td->background_manager_->set_background(input_background_.get(), background_type_.get(), for_dark_theme_, std::move(promise)); } - void do_send_result() override { + void do_send_result() final { send_result(td->background_manager_->get_background_object(background_id_, for_dark_theme_)); } @@ -4058,39 +4058,39 @@ void Td::close_impl(bool destroy_flag) { class Td::DownloadFileCallback : public FileManager::DownloadCallback { public: - void on_progress(FileId file_id) override { + void on_progress(FileId file_id) final { } - void on_download_ok(FileId file_id) override { + void on_download_ok(FileId file_id) final { send_closure(G()->td(), &Td::on_file_download_finished, file_id); } - void on_download_error(FileId file_id, Status error) override { + void on_download_error(FileId file_id, Status error) final { send_closure(G()->td(), &Td::on_file_download_finished, file_id); } }; class Td::UploadFileCallback : public FileManager::UploadCallback { public: - void on_progress(FileId file_id) override { + void on_progress(FileId file_id) final { } - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { // cancel file upload of the file to allow next upload with the same file to succeed send_closure(G()->file_manager(), &FileManager::cancel_upload, file_id); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { // cancel file upload of the file to allow next upload with the same file to succeed send_closure(G()->file_manager(), &FileManager::cancel_upload, file_id); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { // cancel file upload of the file to allow next upload with the same file to succeed send_closure(G()->file_manager(), &FileManager::cancel_upload, file_id); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { } }; @@ -4250,7 +4250,7 @@ void Td::init_options_and_network() { public: explicit StateManagerCallback(ActorShared td) : td_(std::move(td)) { } - bool on_state(StateManager::State state) override { + bool on_state(StateManager::State state) final { send_closure(td_, &Td::on_connection_state_changed, state); return td_.is_alive(); } @@ -4300,10 +4300,10 @@ void Td::init_options_and_network() { VLOG(td_init) << "Set ConfigShared callback"; class ConfigSharedCallback : public ConfigShared::Callback { public: - void on_option_updated(const string &name, const string &value) const override { + void on_option_updated(const string &name, const string &value) const final { send_closure(G()->td(), &Td::on_config_option_updated, name); } - ~ConfigSharedCallback() override { + ~ConfigSharedCallback() final { LOG(INFO) << "Destroy ConfigSharedCallback"; } }; diff --git a/td/telegram/Td.h b/td/telegram/Td.h index 9628b363c..158568150 100644 --- a/td/telegram/Td.h +++ b/td/telegram/Td.h @@ -96,7 +96,7 @@ class Td final : public NetQueryCallback { Td(Td &&) = delete; Td &operator=(const Td &) = delete; Td &operator=(Td &&) = delete; - ~Td() override; + ~Td() final; struct Options { std::shared_ptr net_query_stats; @@ -112,7 +112,7 @@ class Td final : public NetQueryCallback { void schedule_get_promo_data(int32 expires_in); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; void on_update_server_time_difference(); @@ -1303,10 +1303,10 @@ class Td final : public NetQueryCallback { } // Actor - void start_up() override; - void tear_down() override; - void hangup_shared() override; - void hangup() override; + void start_up() final; + void tear_down() final; + void hangup_shared() final; + void hangup() final; }; } // namespace td diff --git a/td/telegram/TermsOfService.cpp b/td/telegram/TermsOfService.cpp index 3627b879e..1201ee9bd 100644 --- a/td/telegram/TermsOfService.cpp +++ b/td/telegram/TermsOfService.cpp @@ -30,7 +30,7 @@ class GetTermsOfServiceUpdateQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::help_getTermsOfServiceUpdate())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -53,7 +53,7 @@ class GetTermsOfServiceUpdateQuery : public Td::ResultHandler { } } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -70,7 +70,7 @@ class AcceptTermsOfServiceQuery : public Td::ResultHandler { telegram_api::make_object(std::move(terms_of_service_id))))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -83,7 +83,7 @@ class AcceptTermsOfServiceQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/TopDialogManager.h b/td/telegram/TopDialogManager.h index f645f5889..ad996abc3 100644 --- a/td/telegram/TopDialogManager.h +++ b/td/telegram/TopDialogManager.h @@ -106,12 +106,12 @@ class TopDialogManager : public NetQueryCallback { void on_first_sync(); - void on_result(NetQueryPtr net_query) override; + void on_result(NetQueryPtr net_query) final; void init(); - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; }; } // namespace td diff --git a/td/telegram/UpdatesManager.cpp b/td/telegram/UpdatesManager.cpp index c8b1796b1..9c8419811 100644 --- a/td/telegram/UpdatesManager.cpp +++ b/td/telegram/UpdatesManager.cpp @@ -98,7 +98,7 @@ class GetUpdatesStateQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::updates_getState())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -107,7 +107,7 @@ class GetUpdatesStateQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -124,7 +124,7 @@ class PingServerQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::updates_getState())); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -133,7 +133,7 @@ class PingServerQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; @@ -150,7 +150,7 @@ class GetDifferenceQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::updates_getDifference(0, pts, 0, date, qts))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { VLOG(get_difference) << "Receive getDifference result of size " << packet.size(); auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { @@ -160,7 +160,7 @@ class GetDifferenceQuery : public Td::ResultHandler { promise_.set_value(result_ptr.move_as_ok()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/UpdatesManager.h b/td/telegram/UpdatesManager.h index ead54755d..fee234470 100644 --- a/td/telegram/UpdatesManager.h +++ b/td/telegram/UpdatesManager.h @@ -36,19 +36,19 @@ class Td; class dummyUpdate : public telegram_api::Update { public: static constexpr int32 ID = 1234567891; - int32 get_id() const override { + int32 get_id() const final { return ID; } - void store(TlStorerUnsafe &s) const override { + void store(TlStorerUnsafe &s) const final { UNREACHABLE(); } - void store(TlStorerCalcLength &s) const override { + void store(TlStorerCalcLength &s) const final { UNREACHABLE(); } - void store(TlStorerToString &s, const char *field_name) const override { + void store(TlStorerToString &s, const char *field_name) const final { s.store_class_begin(field_name, "dummyUpdate"); s.store_class_end(); } @@ -66,19 +66,19 @@ class updateSentMessage : public telegram_api::Update { } static constexpr int32 ID = 1234567890; - int32 get_id() const override { + int32 get_id() const final { return ID; } - void store(TlStorerUnsafe &s) const override { + void store(TlStorerUnsafe &s) const final { UNREACHABLE(); } - void store(TlStorerCalcLength &s) const override { + void store(TlStorerCalcLength &s) const final { UNREACHABLE(); } - void store(TlStorerToString &s, const char *field_name) const override { + void store(TlStorerToString &s, const char *field_name) const final { s.store_class_begin(field_name, "updateSentMessage"); s.store_field("random_id", random_id_); s.store_field("message_id", message_id_.get()); @@ -200,7 +200,7 @@ class UpdatesManager : public Actor { int32 min_postponed_update_pts_ = 0; int32 min_postponed_update_qts_ = 0; - void tear_down() override; + void tear_down() final; int32 get_pts() const { return pts_manager_.mem_pts(); diff --git a/td/telegram/WebPageBlock.cpp b/td/telegram/WebPageBlock.cpp index 88f24b644..791157552 100644 --- a/td/telegram/WebPageBlock.cpp +++ b/td/telegram/WebPageBlock.cpp @@ -441,15 +441,15 @@ class WebPageBlockTitle : public WebPageBlock { explicit WebPageBlockTitle(RichText &&title) : title(std::move(title)) { } - Type get_type() const override { + Type get_type() const final { return Type::Title; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { title.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(title.get_rich_text_object(context)); } @@ -474,15 +474,15 @@ class WebPageBlockSubtitle : public WebPageBlock { explicit WebPageBlockSubtitle(RichText &&subtitle) : subtitle(std::move(subtitle)) { } - Type get_type() const override { + Type get_type() const final { return Type::Subtitle; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { subtitle.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(subtitle.get_rich_text_object(context)); } @@ -508,15 +508,15 @@ class WebPageBlockAuthorDate : public WebPageBlock { WebPageBlockAuthorDate(RichText &&author, int32 date) : author(std::move(author)), date(max(date, 0)) { } - Type get_type() const override { + Type get_type() const final { return Type::AuthorDate; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { author.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(author.get_rich_text_object(context), date); } @@ -543,15 +543,15 @@ class WebPageBlockHeader : public WebPageBlock { explicit WebPageBlockHeader(RichText &&header) : header(std::move(header)) { } - Type get_type() const override { + Type get_type() const final { return Type::Header; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { header.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(header.get_rich_text_object(context)); } @@ -576,15 +576,15 @@ class WebPageBlockSubheader : public WebPageBlock { explicit WebPageBlockSubheader(RichText &&subheader) : subheader(std::move(subheader)) { } - Type get_type() const override { + Type get_type() const final { return Type::Subheader; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { subheader.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(subheader.get_rich_text_object(context)); } @@ -609,15 +609,15 @@ class WebPageBlockKicker : public WebPageBlock { explicit WebPageBlockKicker(RichText &&kicker) : kicker(std::move(kicker)) { } - Type get_type() const override { + Type get_type() const final { return Type::Kicker; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { kicker.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(kicker.get_rich_text_object(context)); } @@ -642,15 +642,15 @@ class WebPageBlockParagraph : public WebPageBlock { explicit WebPageBlockParagraph(RichText &&text) : text(std::move(text)) { } - Type get_type() const override { + Type get_type() const final { return Type::Paragraph; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { text.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(text.get_rich_text_object(context)); } @@ -676,15 +676,15 @@ class WebPageBlockPreformatted : public WebPageBlock { WebPageBlockPreformatted(RichText &&text, string &&language) : text(std::move(text)), language(std::move(language)) { } - Type get_type() const override { + Type get_type() const final { return Type::Preformatted; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { text.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(text.get_rich_text_object(context), language); } @@ -711,15 +711,15 @@ class WebPageBlockFooter : public WebPageBlock { explicit WebPageBlockFooter(RichText &&footer) : footer(std::move(footer)) { } - Type get_type() const override { + Type get_type() const final { return Type::Footer; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { footer.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(footer.get_rich_text_object(context)); } @@ -738,14 +738,14 @@ class WebPageBlockFooter : public WebPageBlock { class WebPageBlockDivider : public WebPageBlock { public: - Type get_type() const override { + Type get_type() const final { return Type::Divider; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(); } @@ -766,14 +766,14 @@ class WebPageBlockAnchor : public WebPageBlock { explicit WebPageBlockAnchor(string &&name) : name(std::move(name)) { } - Type get_type() const override { + Type get_type() const final { return Type::Anchor; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { if (context->is_first_pass_) { context->anchors_.emplace(name, nullptr); } @@ -829,11 +829,11 @@ class WebPageBlockList : public WebPageBlock { explicit WebPageBlockList(vector &&items) : items(std::move(items)) { } - Type get_type() const override { + Type get_type() const final { return Type::List; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { for (auto &item : items) { for (auto &page_block : item.page_blocks) { page_block->append_file_ids(td, file_ids); @@ -841,7 +841,7 @@ class WebPageBlockList : public WebPageBlock { } } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return td_api::make_object( transform(items, [context](const Item &item) { return get_page_block_list_item_object(item, context); })); } @@ -892,16 +892,16 @@ class WebPageBlockBlockQuote : public WebPageBlock { WebPageBlockBlockQuote(RichText &&text, RichText &&credit) : text(std::move(text)), credit(std::move(credit)) { } - Type get_type() const override { + Type get_type() const final { return Type::BlockQuote; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { text.append_file_ids(td, file_ids); credit.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(text.get_rich_text_object(context), credit.get_rich_text_object(context)); } @@ -930,16 +930,16 @@ class WebPageBlockPullQuote : public WebPageBlock { WebPageBlockPullQuote(RichText &&text, RichText &&credit) : text(std::move(text)), credit(std::move(credit)) { } - Type get_type() const override { + Type get_type() const final { return Type::PullQuote; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { text.append_file_ids(td, file_ids); credit.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(text.get_rich_text_object(context), credit.get_rich_text_object(context)); } @@ -970,16 +970,16 @@ class WebPageBlockAnimation : public WebPageBlock { : animation_file_id(animation_file_id), caption(std::move(caption)), need_autoplay(need_autoplay) { } - Type get_type() const override { + Type get_type() const final { return Type::Animation; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { caption.append_file_ids(td, file_ids); Document(Document::Type::Animation, animation_file_id).append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object( context->td_->animations_manager_->get_animation_object(animation_file_id, "get_page_block_object"), caption.get_page_block_caption_object(context), need_autoplay); @@ -1037,16 +1037,16 @@ class WebPageBlockPhoto : public WebPageBlock { : photo(std::move(photo)), caption(std::move(caption)), url(std::move(url)), web_page_id(web_page_id) { } - Type get_type() const override { + Type get_type() const final { return Type::Photo; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { append(file_ids, photo_get_file_ids(photo)); caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(get_photo_object(context->td_->file_manager_.get(), photo), caption.get_page_block_caption_object(context), url); } @@ -1087,16 +1087,16 @@ class WebPageBlockVideo : public WebPageBlock { : video_file_id(video_file_id), caption(std::move(caption)), need_autoplay(need_autoplay), is_looped(is_looped) { } - Type get_type() const override { + Type get_type() const final { return Type::Video; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { caption.append_file_ids(td, file_ids); Document(Document::Type::Video, video_file_id).append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(context->td_->videos_manager_->get_video_object(video_file_id), caption.get_page_block_caption_object(context), need_autoplay, is_looped); @@ -1152,15 +1152,15 @@ class WebPageBlockCover : public WebPageBlock { explicit WebPageBlockCover(unique_ptr &&cover) : cover(std::move(cover)) { } - Type get_type() const override { + Type get_type() const final { return Type::Cover; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { cover->append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(cover->get_page_block_object(context)); } @@ -1199,16 +1199,16 @@ class WebPageBlockEmbedded : public WebPageBlock { , allow_scrolling(allow_scrolling) { } - Type get_type() const override { + Type get_type() const final { return Type::Embedded; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { append(file_ids, photo_get_file_ids(poster_photo)); caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object( url, html, get_photo_object(context->td_->file_manager_.get(), poster_photo), dimensions.width, dimensions.height, caption.get_page_block_caption_object(context), is_full_width, allow_scrolling); @@ -1265,11 +1265,11 @@ class WebPageBlockEmbeddedPost : public WebPageBlock { , caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::EmbeddedPost; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { append(file_ids, photo_get_file_ids(author_photo)); for (auto &page_block : page_blocks) { page_block->append_file_ids(td, file_ids); @@ -1277,7 +1277,7 @@ class WebPageBlockEmbeddedPost : public WebPageBlock { caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object( url, author, get_photo_object(context->td_->file_manager_.get(), author_photo), date, get_page_block_objects(page_blocks, context), caption.get_page_block_caption_object(context)); @@ -1316,18 +1316,18 @@ class WebPageBlockCollage : public WebPageBlock { : page_blocks(std::move(page_blocks)), caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::Collage; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { for (auto &page_block : page_blocks) { page_block->append_file_ids(td, file_ids); } caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(get_page_block_objects(page_blocks, context), caption.get_page_block_caption_object(context)); } @@ -1357,18 +1357,18 @@ class WebPageBlockSlideshow : public WebPageBlock { : page_blocks(std::move(page_blocks)), caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::Slideshow; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { for (auto &page_block : page_blocks) { page_block->append_file_ids(td, file_ids); } caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(get_page_block_objects(page_blocks, context), caption.get_page_block_caption_object(context)); } @@ -1399,15 +1399,15 @@ class WebPageBlockChatLink : public WebPageBlock { : title(std::move(title)), photo(std::move(photo)), username(std::move(username)) { } - Type get_type() const override { + Type get_type() const final { return Type::ChatLink; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { append(file_ids, dialog_photo_get_file_ids(photo)); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object( title, get_chat_photo_info_object(context->td_->file_manager_.get(), &photo), username); } @@ -1439,16 +1439,16 @@ class WebPageBlockAudio : public WebPageBlock { : audio_file_id(audio_file_id), caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::Audio; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { Document(Document::Type::Audio, audio_file_id).append_file_ids(td, file_ids); caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(context->td_->audios_manager_->get_audio_object(audio_file_id), caption.get_page_block_caption_object(context)); } @@ -1510,11 +1510,11 @@ class WebPageBlockTable : public WebPageBlock { : title(std::move(title)), cells(std::move(cells)), is_bordered(is_bordered), is_striped(is_striped) { } - Type get_type() const override { + Type get_type() const final { return Type::Table; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { title.append_file_ids(td, file_ids); for (auto &row : cells) { for (auto &cell : row) { @@ -1523,7 +1523,7 @@ class WebPageBlockTable : public WebPageBlock { } } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { auto cell_objects = transform(cells, [&](const vector &row) { return transform( row, [&](const WebPageBlockTableCell &cell) { return cell.get_page_block_table_cell_object(context); }); @@ -1567,18 +1567,18 @@ class WebPageBlockDetails : public WebPageBlock { : header(std::move(header)), page_blocks(std::move(page_blocks)), is_open(is_open) { } - Type get_type() const override { + Type get_type() const final { return Type::Details; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { header.append_file_ids(td, file_ids); for (auto &page_block : page_blocks) { page_block->append_file_ids(td, file_ids); } } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(header.get_rich_text_object(context), get_page_block_objects(page_blocks, context), is_open); } @@ -1614,11 +1614,11 @@ class WebPageBlockRelatedArticles : public WebPageBlock { : header(std::move(header)), related_articles(std::move(related_articles)) { } - Type get_type() const override { + Type get_type() const final { return Type::RelatedArticles; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { header.append_file_ids(td, file_ids); for (auto &article : related_articles) { if (!article.photo.is_empty()) { @@ -1627,7 +1627,7 @@ class WebPageBlockRelatedArticles : public WebPageBlock { } } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { auto related_article_objects = transform(related_articles, [context](const RelatedArticle &article) { return td_api::make_object( article.url, article.title, article.description, @@ -1664,15 +1664,15 @@ class WebPageBlockMap : public WebPageBlock { : location(std::move(location)), zoom(zoom), dimensions(dimensions), caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::Map; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object(location.get_location_object(), zoom, dimensions.width, dimensions.height, caption.get_page_block_caption_object(context)); } @@ -1706,16 +1706,16 @@ class WebPageBlockVoiceNote : public WebPageBlock { : voice_note_file_id(voice_note_file_id), caption(std::move(caption)) { } - Type get_type() const override { + Type get_type() const final { return Type::VoiceNote; } - void append_file_ids(const Td *td, vector &file_ids) const override { + void append_file_ids(const Td *td, vector &file_ids) const final { Document(Document::Type::VoiceNote, voice_note_file_id).append_file_ids(td, file_ids); caption.append_file_ids(td, file_ids); } - td_api::object_ptr get_page_block_object(Context *context) const override { + td_api::object_ptr get_page_block_object(Context *context) const final { return make_tl_object( context->td_->voice_notes_manager_->get_voice_note_object(voice_note_file_id), caption.get_page_block_caption_object(context)); diff --git a/td/telegram/WebPagesManager.cpp b/td/telegram/WebPagesManager.cpp index a0997addb..0bae16567 100644 --- a/td/telegram/WebPagesManager.cpp +++ b/td/telegram/WebPagesManager.cpp @@ -76,7 +76,7 @@ class GetWebPagePreviewQuery : public Td::ResultHandler { G()->net_query_creator().create(telegram_api::messages_getWebPagePreview(flags, text, std::move(entities)))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -87,7 +87,7 @@ class GetWebPagePreviewQuery : public Td::ResultHandler { td->web_pages_manager_->on_get_web_page_preview_success(request_id_, url_, std::move(ptr), std::move(promise_)); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { td->web_pages_manager_->on_get_web_page_preview_fail(request_id_, url_, std::move(status), std::move(promise_)); } }; @@ -107,7 +107,7 @@ class GetWebPageQuery : public Td::ResultHandler { send_query(G()->net_query_creator().create(telegram_api::messages_getWebPage(url, hash))); } - void on_result(uint64 id, BufferSlice packet) override { + void on_result(uint64 id, BufferSlice packet) final { auto result_ptr = fetch_result(packet); if (result_ptr.is_error()) { return on_error(id, result_ptr.move_as_error()); @@ -133,7 +133,7 @@ class GetWebPageQuery : public Td::ResultHandler { promise_.set_value(Unit()); } - void on_error(uint64 id, Status status) override { + void on_error(uint64 id, Status status) final { promise_.set_error(std::move(status)); } }; diff --git a/td/telegram/WebPagesManager.h b/td/telegram/WebPagesManager.h index e07d3c949..96f4b0b47 100644 --- a/td/telegram/WebPagesManager.h +++ b/td/telegram/WebPagesManager.h @@ -41,7 +41,7 @@ class WebPagesManager : public Actor { WebPagesManager &operator=(const WebPagesManager &) = delete; WebPagesManager(WebPagesManager &&) = delete; WebPagesManager &operator=(WebPagesManager &&) = delete; - ~WebPagesManager() override; + ~WebPagesManager() final; WebPageId on_get_web_page(tl_object_ptr &&web_page_ptr, DialogId owner_dialog_id); @@ -166,7 +166,7 @@ class WebPagesManager : public Actor { void on_load_web_page_by_url_from_database(WebPageId web_page_id, const string &url, Promise &&promise, Result<> result); - void tear_down() override; + void tear_down() final; FileSourceId get_web_page_file_source_id(WebPage *web_page); diff --git a/td/telegram/cli.cpp b/td/telegram/cli.cpp index be031075f..2da425263 100644 --- a/td/telegram/cli.cpp +++ b/td/telegram/cli.cpp @@ -236,7 +236,7 @@ class CliClient final : public Actor { } private: - void start_up() override { + void start_up() final { yield(); } @@ -919,17 +919,17 @@ class CliClient final : public Actor { public: TdCallbackImpl(CliClient *client, uint64 generation) : client_(client), generation_(generation) { } - void on_result(uint64 id, td_api::object_ptr result) override { + void on_result(uint64 id, td_api::object_ptr result) final { client_->on_result(generation_, id, std::move(result)); } - void on_error(uint64 id, td_api::object_ptr error) override { + void on_error(uint64 id, td_api::object_ptr error) final { client_->on_error(generation_, id, std::move(error)); } TdCallbackImpl(const TdCallbackImpl &) = delete; TdCallbackImpl &operator=(const TdCallbackImpl &) = delete; TdCallbackImpl(TdCallbackImpl &&) = delete; TdCallbackImpl &operator=(TdCallbackImpl &&) = delete; - ~TdCallbackImpl() override { + ~TdCallbackImpl() final { client_->on_closed(generation_); } @@ -4349,7 +4349,7 @@ class CliClient final : public Actor { } bool is_inited_ = false; - void loop() override { + void loop() final { if (!is_inited_) { is_inited_ = true; init(); @@ -4385,7 +4385,7 @@ class CliClient final : public Actor { } } - void timeout_expired() override { + void timeout_expired() final { if (close_flag_) { return; } @@ -4426,12 +4426,12 @@ class CliClient final : public Actor { } } - void notify() override { + void notify() final { auto guard = scheduler_->get_send_guard(); send_event_later(actor_id(), Event::yield()); } - void hangup_shared() override { + void hangup_shared() final { CHECK(get_link_token() == 1); LOG(INFO) << "StdinReader stopped"; is_stdin_reader_stopped_ = true; @@ -4607,7 +4607,7 @@ void main(int argc, char **argv) { } private: - void start_up() override { + void start_up() final { create_actor("CliClient", scheduler_, use_test_dc_, get_chat_list_, disable_network_, api_id_, api_hash_) .release(); diff --git a/td/telegram/files/FileDb.cpp b/td/telegram/files/FileDb.cpp index 7a29e22d6..99ae0ee07 100644 --- a/td/telegram/files/FileDb.cpp +++ b/td/telegram/files/FileDb.cpp @@ -176,24 +176,24 @@ class FileDb : public FileDbInterface { create_actor_on_scheduler("FileDbActor", scheduler_id, current_pmc_id_, file_kv_safe_); } - FileDbId create_pmc_id() override { + FileDbId create_pmc_id() final { current_pmc_id_ = FileDbId(current_pmc_id_.get() + 1); return current_pmc_id_; } - void close(Promise<> promise) override { + void close(Promise<> promise) final { send_closure(std::move(file_db_actor_), &FileDbActor::close, std::move(promise)); } - void get_file_data_impl(string key, Promise promise) override { + void get_file_data_impl(string key, Promise promise) final { send_closure(file_db_actor_, &FileDbActor::load_file_data, std::move(key), std::move(promise)); } - Result get_file_data_sync_impl(string key) override { + Result get_file_data_sync_impl(string key) final { return load_file_data_impl(file_db_actor_.get(), file_kv_safe_->get(), key, current_pmc_id_); } - void clear_file_data(FileDbId id, const FileData &file_data) override { + void clear_file_data(FileDbId id, const FileData &file_data) final { string remote_key; if (file_data.remote_.type() == RemoteFileLocation::Type::Full) { remote_key = as_key(file_data.remote_.full()); @@ -208,8 +208,7 @@ class FileDb : public FileDbInterface { } send_closure(file_db_actor_, &FileDbActor::clear_file_data, id, remote_key, local_key, generate_key); } - void set_file_data(FileDbId id, const FileData &file_data, bool new_remote, bool new_local, - bool new_generate) override { + void set_file_data(FileDbId id, const FileData &file_data, bool new_remote, bool new_local, bool new_generate) final { string remote_key; if (file_data.remote_.type() == RemoteFileLocation::Type::Full && new_remote) { remote_key = as_key(file_data.remote_.full()); @@ -230,10 +229,10 @@ class FileDb : public FileDbInterface { generate_key); } - void set_file_data_ref(FileDbId id, FileDbId new_id) override { + void set_file_data_ref(FileDbId id, FileDbId new_id) final { send_closure(file_db_actor_, &FileDbActor::store_file_data_ref, id, new_id); } - SqliteKeyValue &pmc() override { + SqliteKeyValue &pmc() final { return file_kv_safe_->get(); } diff --git a/td/telegram/files/FileDownloader.h b/td/telegram/files/FileDownloader.h index ac6d7ebaf..c78e33ccc 100644 --- a/td/telegram/files/FileDownloader.h +++ b/td/telegram/files/FileDownloader.h @@ -81,21 +81,21 @@ class FileDownloader : public FileLoader { std::set hash_info_; bool has_hash_query_ = false; - Result init() override TD_WARN_UNUSED_RESULT; - Status on_ok(int64 size) override TD_WARN_UNUSED_RESULT; - void on_error(Status status) override; - Result should_restart_part(Part part, NetQueryPtr &net_query) override TD_WARN_UNUSED_RESULT; + Result init() final TD_WARN_UNUSED_RESULT; + Status on_ok(int64 size) final TD_WARN_UNUSED_RESULT; + void on_error(Status status) final; + Result should_restart_part(Part part, NetQueryPtr &net_query) final TD_WARN_UNUSED_RESULT; Result> start_part(Part part, int32 part_count, - int64 streaming_offset) override TD_WARN_UNUSED_RESULT; - Result process_part(Part part, NetQueryPtr net_query) override TD_WARN_UNUSED_RESULT; - void on_progress(Progress progress) override; - FileLoader::Callback *get_callback() override; - Status process_check_query(NetQueryPtr net_query) override; - Result check_loop(int64 checked_prefix_size, int64 ready_prefix_size, bool is_ready) override; + int64 streaming_offset) final TD_WARN_UNUSED_RESULT; + Result process_part(Part part, NetQueryPtr net_query) final TD_WARN_UNUSED_RESULT; + void on_progress(Progress progress) final; + FileLoader::Callback *get_callback() final; + Status process_check_query(NetQueryPtr net_query) final; + Result check_loop(int64 checked_prefix_size, int64 ready_prefix_size, bool is_ready) final; void add_hash_info(const std::vector> &hashes); bool keep_fd_ = false; - void keep_fd_flag(bool keep_fd) override; + void keep_fd_flag(bool keep_fd) final; void try_release_fd(); Status acquire_fd() TD_WARN_UNUSED_RESULT; diff --git a/td/telegram/files/FileFromBytes.h b/td/telegram/files/FileFromBytes.h index 61c5cced8..7d9125447 100644 --- a/td/telegram/files/FileFromBytes.h +++ b/td/telegram/files/FileFromBytes.h @@ -44,12 +44,12 @@ class FileFromBytes : public FileLoaderActor { FileFd fd_; string path_; - void wakeup() override; - void set_resource_manager(ActorShared) override { + void wakeup() final; + void set_resource_manager(ActorShared) final { } - void update_priority(int8 priority) override { + void update_priority(int8 priority) final { } - void update_resources(const ResourceState &other) override { + void update_resources(const ResourceState &other) final { } }; } // namespace td diff --git a/td/telegram/files/FileGenerateManager.cpp b/td/telegram/files/FileGenerateManager.cpp index ec6003449..886bcea99 100644 --- a/td/telegram/files/FileGenerateManager.cpp +++ b/td/telegram/files/FileGenerateManager.cpp @@ -37,12 +37,6 @@ namespace td { class FileGenerateActor : public Actor { public: - FileGenerateActor() = default; - FileGenerateActor(const FileGenerateActor &) = delete; - FileGenerateActor &operator=(const FileGenerateActor &) = delete; - FileGenerateActor(FileGenerateActor &&) = delete; - FileGenerateActor &operator=(FileGenerateActor &&) = delete; - ~FileGenerateActor() override = default; virtual void file_generate_write_part(int32 offset, string data, Promise<> promise) { LOG(ERROR) << "Receive unexpected file_generate_write_part"; } @@ -56,10 +50,10 @@ class FileDownloadGenerateActor : public FileGenerateActor { ActorShared<> parent) : file_type_(file_type), file_id_(file_id), callback_(std::move(callback)), parent_(std::move(parent)) { } - void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) override { + void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) final { UNREACHABLE(); } - void file_generate_finish(Status status, Promise<> promise) override { + void file_generate_finish(Status status, Promise<> promise) final { UNREACHABLE(); } @@ -69,7 +63,7 @@ class FileDownloadGenerateActor : public FileGenerateActor { unique_ptr callback_; ActorShared<> parent_; - void start_up() override { + void start_up() final { LOG(INFO) << "Generate by downloading " << file_id_; class Callback : public FileManager::DownloadCallback { public: @@ -78,10 +72,10 @@ class FileDownloadGenerateActor : public FileGenerateActor { // TODO: upload during download - void on_download_ok(FileId file_id) override { + void on_download_ok(FileId file_id) final { send_closure(parent_, &FileDownloadGenerateActor::on_download_ok); } - void on_download_error(FileId file_id, Status error) override { + void on_download_error(FileId file_id, Status error) final { send_closure(parent_, &FileDownloadGenerateActor::on_download_error, std::move(error)); } @@ -92,7 +86,7 @@ class FileDownloadGenerateActor : public FileGenerateActor { send_closure(G()->file_manager(), &FileManager::download, file_id_, std::make_shared(actor_id(this)), 1, -1, -1); } - void hangup() override { + void hangup() final { send_closure(G()->file_manager(), &FileManager::download, file_id_, nullptr, 0, -1, -1); stop(); } @@ -123,10 +117,10 @@ class MapDownloadGenerateActor : public FileGenerateActor { MapDownloadGenerateActor(string conversion, unique_ptr callback, ActorShared<> parent) : conversion_(std::move(conversion)), callback_(std::move(callback)), parent_(std::move(parent)) { } - void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) override { + void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) final { UNREACHABLE(); } - void file_generate_finish(Status status, Promise<> promise) override { + void file_generate_finish(Status status, Promise<> promise) final { UNREACHABLE(); } @@ -143,11 +137,11 @@ class MapDownloadGenerateActor : public FileGenerateActor { explicit Callback(ActorId parent) : parent_(parent) { } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { send_closure(parent_, &MapDownloadGenerateActor::on_result, std::move(query)); } - void hangup_shared() override { + void hangup_shared() final { send_closure(parent_, &MapDownloadGenerateActor::hangup_shared); } }; @@ -195,7 +189,7 @@ class MapDownloadGenerateActor : public FileGenerateActor { scale); } - void start_up() override { + void start_up() final { auto r_input_web_file = parse_conversion(); if (r_input_web_file.is_error()) { LOG(ERROR) << "Can't parse " << conversion_ << ": " << r_input_web_file.error(); @@ -237,7 +231,7 @@ class MapDownloadGenerateActor : public FileGenerateActor { stop(); } - void hangup_shared() override { + void hangup_shared() final { on_error(Status::Error(1, "Canceled")); } }; @@ -255,15 +249,15 @@ class FileExternalGenerateActor : public FileGenerateActor { , parent_(std::move(parent)) { } - void file_generate_write_part(int32 offset, string data, Promise<> promise) override { + void file_generate_write_part(int32 offset, string data, Promise<> promise) final { check_status(do_file_generate_write_part(offset, data), std::move(promise)); } - void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) override { + void file_generate_progress(int32 expected_size, int32 local_prefix_size, Promise<> promise) final { check_status(do_file_generate_progress(expected_size, local_prefix_size), std::move(promise)); } - void file_generate_finish(Status status, Promise<> promise) override { + void file_generate_finish(Status status, Promise<> promise) final { if (status.is_error()) { check_status(std::move(status)); return promise.set_value(Unit()); @@ -281,7 +275,7 @@ class FileExternalGenerateActor : public FileGenerateActor { unique_ptr callback_; ActorShared<> parent_; - void start_up() override { + void start_up() final { if (local_.type() == LocalFileLocation::Type::Full) { callback_->on_ok(local_.full()); callback_.reset(); @@ -307,7 +301,7 @@ class FileExternalGenerateActor : public FileGenerateActor { make_tl_object( static_cast(query_id_), generate_location_.original_path_, path_, generate_location_.conversion_)); } - void hangup() override { + void hangup() final { check_status(Status::Error(1, "Canceled")); } @@ -363,7 +357,7 @@ class FileExternalGenerateActor : public FileGenerateActor { } } - void tear_down() override { + void tear_down() final { send_closure(G()->td(), &Td::send_update, make_tl_object(static_cast(query_id_))); } diff --git a/td/telegram/files/FileGenerateManager.h b/td/telegram/files/FileGenerateManager.h index ebab37288..7088aaecf 100644 --- a/td/telegram/files/FileGenerateManager.h +++ b/td/telegram/files/FileGenerateManager.h @@ -62,9 +62,9 @@ class FileGenerateManager : public Actor { std::map query_id_to_query_; bool close_flag_ = false; - void hangup() override; - void hangup_shared() override; - void loop() override; + void hangup() final; + void hangup_shared() final; + void loop() final; void do_cancel(uint64 query_id); }; diff --git a/td/telegram/files/FileHashUploader.h b/td/telegram/files/FileHashUploader.h index 166a290d7..516169f0d 100644 --- a/td/telegram/files/FileHashUploader.h +++ b/td/telegram/files/FileHashUploader.h @@ -35,15 +35,15 @@ class FileHashUploader : public FileLoaderActor { : local_(local), size_(size), size_left_(size), callback_(std::move(callback)) { } - void set_resource_manager(ActorShared resource_manager) override { + void set_resource_manager(ActorShared resource_manager) final { resource_manager_ = std::move(resource_manager); send_closure(resource_manager_, &ResourceManager::update_resources, resource_state_); } - void update_priority(int8 priority) override { + void update_priority(int8 priority) final { send_closure(resource_manager_, &ResourceManager::update_priority, priority); } - void update_resources(const ResourceState &other) override { + void update_resources(const ResourceState &other) final { if (stop_flag_) { return; } @@ -66,16 +66,16 @@ class FileHashUploader : public FileLoaderActor { bool stop_flag_ = false; Sha256State sha256_state_; - void start_up() override; + void start_up() final; Status init(); - void loop() override; + void loop() final; Status loop_impl(); Status loop_sha(); - void on_result(NetQueryPtr net_query) override; + void on_result(NetQueryPtr net_query) final; Status on_result_impl(NetQueryPtr net_query); }; diff --git a/td/telegram/files/FileLoadManager.h b/td/telegram/files/FileLoadManager.h index 391495519..6fa82357e 100644 --- a/td/telegram/files/FileLoadManager.h +++ b/td/telegram/files/FileLoadManager.h @@ -32,10 +32,6 @@ class FileLoadManager final : public Actor { using QueryId = uint64; class Callback : public Actor { public: - Callback() = default; - Callback(const Callback &) = delete; - Callback &operator=(const Callback &) = delete; - ~Callback() override = default; virtual void on_start_download(QueryId id) = 0; virtual void on_partial_download(QueryId id, const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size) = 0; @@ -79,10 +75,10 @@ class FileLoadManager final : public Actor { std::map query_id_to_node_id_; bool stop_flag_ = false; - void start_up() override; - void loop() override; - void hangup() override; - void hangup_shared() override; + void start_up() final; + void loop() final; + void hangup() final; + void hangup_shared() final; void close_node(NodeId node_id); ActorOwn &get_download_resource_manager(bool is_small, DcId dc_id); @@ -105,16 +101,16 @@ class FileLoadManager final : public Actor { private: ActorShared actor_id_; - void on_start_download() override { + void on_start_download() final { send_closure(actor_id_, &FileLoadManager::on_start_download); } - void on_partial_download(const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size) override { + void on_partial_download(const PartialLocalFileLocation &partial_local, int64 ready_size, int64 size) final { send_closure(actor_id_, &FileLoadManager::on_partial_download, partial_local, ready_size, size); } - void on_ok(const FullLocalFileLocation &full_local, int64 size, bool is_new) override { + void on_ok(const FullLocalFileLocation &full_local, int64 size, bool is_new) final { send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size, is_new); } - void on_error(Status status) override { + void on_error(Status status) final { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); } }; @@ -127,16 +123,16 @@ class FileLoadManager final : public Actor { private: ActorShared actor_id_; - void on_hash(string hash) override { + void on_hash(string hash) final { send_closure(actor_id_, &FileLoadManager::on_hash, std::move(hash)); } - void on_partial_upload(const PartialRemoteFileLocation &partial_remote, int64 ready_size) override { + void on_partial_upload(const PartialRemoteFileLocation &partial_remote, int64 ready_size) final { send_closure(actor_id_, &FileLoadManager::on_partial_upload, partial_remote, ready_size); } - void on_ok(FileType file_type, const PartialRemoteFileLocation &partial_remote, int64 size) override { + void on_ok(FileType file_type, const PartialRemoteFileLocation &partial_remote, int64 size) final { send_closure(std::move(actor_id_), &FileLoadManager::on_ok_upload, file_type, partial_remote, size); } - void on_error(Status status) override { + void on_error(Status status) final { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); } }; @@ -148,10 +144,10 @@ class FileLoadManager final : public Actor { private: ActorShared actor_id_; - void on_ok(const FullRemoteFileLocation &remote) override { + void on_ok(const FullRemoteFileLocation &remote) final { send_closure(std::move(actor_id_), &FileLoadManager::on_ok_upload_full, remote); } - void on_error(Status status) override { + void on_error(Status status) final { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); } }; @@ -164,10 +160,10 @@ class FileLoadManager final : public Actor { private: ActorShared actor_id_; - void on_ok(const FullLocalFileLocation &full_local, int64 size) override { + void on_ok(const FullLocalFileLocation &full_local, int64 size) final { send_closure(std::move(actor_id_), &FileLoadManager::on_ok_download, full_local, size, true); } - void on_error(Status status) override { + void on_error(Status status) final { send_closure(std::move(actor_id_), &FileLoadManager::on_error, std::move(status)); } }; diff --git a/td/telegram/files/FileLoader.h b/td/telegram/files/FileLoader.h index 266a8e613..d529d818d 100644 --- a/td/telegram/files/FileLoader.h +++ b/td/telegram/files/FileLoader.h @@ -33,12 +33,12 @@ class FileLoader : public FileLoaderActor { Callback &operator=(const Callback &) = delete; virtual ~Callback() = default; }; - void set_resource_manager(ActorShared resource_manager) override; - void update_priority(int8 priority) override; - void update_resources(const ResourceState &other) override; + void set_resource_manager(ActorShared resource_manager) final; + void update_priority(int8 priority) final; + void update_resources(const ResourceState &other) final; - void update_local_file_location(const LocalFileLocation &local) override; - void update_downloaded_part(int64 offset, int64 limit) override; + void update_local_file_location(const LocalFileLocation &local) final; + void update_downloaded_part(int64 offset, int64 limit) final; protected: void set_ordered_flag(bool flag); @@ -124,17 +124,17 @@ class FileLoader : public FileLoaderActor { uint32 debug_bad_part_order_ = 0; std::vector debug_bad_parts_; - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; Status do_loop(); - void hangup() override; - void hangup_shared() override; - void tear_down() override; + void hangup() final; + void hangup_shared() final; + void tear_down() final; void update_estimated_limit(); void on_progress_impl(); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; void on_part_query(Part part, NetQueryPtr query); void on_common_query(NetQueryPtr query); Status try_on_part_query(Part part, NetQueryPtr query); diff --git a/td/telegram/files/FileManager.cpp b/td/telegram/files/FileManager.cpp index ae7930d43..e7660c591 100644 --- a/td/telegram/files/FileManager.cpp +++ b/td/telegram/files/FileManager.cpp @@ -2355,19 +2355,19 @@ class FileManager::ForceUploadActor : public Actor { public: explicit UploadCallback(ActorId callback) : callback_(std::move(callback)) { } - void on_upload_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_ok(FileId file_id, tl_object_ptr input_file) final { send_closure(std::move(callback_), &ForceUploadActor::on_upload_ok, std::move(input_file)); } - void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_encrypted_ok(FileId file_id, tl_object_ptr input_file) final { send_closure(std::move(callback_), &ForceUploadActor::on_upload_encrypted_ok, std::move(input_file)); } - void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) override { + void on_upload_secure_ok(FileId file_id, tl_object_ptr input_file) final { send_closure(std::move(callback_), &ForceUploadActor::on_upload_secure_ok, std::move(input_file)); } - void on_upload_error(FileId file_id, Status error) override { + void on_upload_error(FileId file_id, Status error) final { send_closure(std::move(callback_), &ForceUploadActor::on_upload_error, std::move(error)); } ~UploadCallback() { @@ -2436,7 +2436,7 @@ class FileManager::ForceUploadActor : public Actor { return std::make_shared(actor_id(this)); } - void loop() override { + void loop() final { if (is_active_) { return; } @@ -2450,7 +2450,7 @@ class FileManager::ForceUploadActor : public Actor { new_priority_, upload_order_, attempt_ == 2, prefer_small_); } - void tear_down() override { + void tear_down() final { if (callback_) { callback_->on_upload_error(file_id_, Status::Error("Canceled")); } @@ -2685,14 +2685,13 @@ void FileManager::run_generate(FileNodePtr node) { public: Callback(ActorId actor, QueryId id) : actor_(std::move(actor)), query_id_(id) { } - void on_partial_generate(const PartialLocalFileLocation &partial_local, - int32 expected_size) override { + void on_partial_generate(const PartialLocalFileLocation &partial_local, int32 expected_size) final { send_closure(actor_, &FileManager::on_partial_generate, query_id_, partial_local, expected_size); } - void on_ok(const FullLocalFileLocation &local) override { + void on_ok(const FullLocalFileLocation &local) final { send_closure(actor_, &FileManager::on_generate_ok, query_id_, local); } - void on_error(Status error) override { + void on_error(Status error) final { send_closure(actor_, &FileManager::on_error, query_id_, std::move(error)); } }; diff --git a/td/telegram/files/FileManager.h b/td/telegram/files/FileManager.h index d13bb5692..857c56442 100644 --- a/td/telegram/files/FileManager.h +++ b/td/telegram/files/FileManager.h @@ -406,7 +406,7 @@ class FileManager : public FileLoadManager::Callback { FileManager &operator=(const FileManager &other) = delete; FileManager(FileManager &&other) = delete; FileManager &operator=(FileManager &&other) = delete; - ~FileManager() override; + ~FileManager() final; static bool are_modification_times_equal(int64 old_mtime, int64 new_mtime); @@ -636,16 +636,16 @@ class FileManager : public FileLoadManager::Callback { void run_download(FileNodePtr node, bool force_update_priority); void run_generate(FileNodePtr node); - void on_start_download(QueryId query_id) override; + void on_start_download(QueryId query_id) final; void on_partial_download(QueryId query_id, const PartialLocalFileLocation &partial_local, int64 ready_size, - int64 size) override; - void on_hash(QueryId query_id, string hash) override; - void on_partial_upload(QueryId query_id, const PartialRemoteFileLocation &partial_remote, int64 ready_size) override; - void on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size, bool is_new) override; + int64 size) final; + void on_hash(QueryId query_id, string hash) final; + void on_partial_upload(QueryId query_id, const PartialRemoteFileLocation &partial_remote, int64 ready_size) final; + void on_download_ok(QueryId query_id, const FullLocalFileLocation &local, int64 size, bool is_new) final; void on_upload_ok(QueryId query_id, FileType file_type, const PartialRemoteFileLocation &partial_remote, - int64 size) override; - void on_upload_full_ok(QueryId query_id, const FullRemoteFileLocation &remote) override; - void on_error(QueryId query_id, Status status) override; + int64 size) final; + void on_upload_full_ok(QueryId query_id, const FullRemoteFileLocation &remote) final; + void on_error(QueryId query_id, Status status) final; void on_error_impl(FileNodePtr node, Query::Type type, bool was_active, Status status); @@ -658,8 +658,8 @@ class FileManager : public FileLoadManager::Callback { std::unordered_set get_main_file_ids(const vector &file_ids); - void hangup() override; - void tear_down() override; + void hangup() final; + void tear_down() final; friend class FileNodePtr; }; diff --git a/td/telegram/files/FileUploader.h b/td/telegram/files/FileUploader.h index d0ccf6599..1eea72476 100644 --- a/td/telegram/files/FileUploader.h +++ b/td/telegram/files/FileUploader.h @@ -58,23 +58,23 @@ class FileUploader : public FileLoader { int64 file_id_; bool big_flag_; - Result init() override TD_WARN_UNUSED_RESULT; - Status on_ok(int64 size) override TD_WARN_UNUSED_RESULT; - void on_error(Status status) override; - Status before_start_parts() override; - void after_start_parts() override; + Result init() final TD_WARN_UNUSED_RESULT; + Status on_ok(int64 size) final TD_WARN_UNUSED_RESULT; + void on_error(Status status) final; + Status before_start_parts() final; + void after_start_parts() final; Result> start_part(Part part, int32 part_count, - int64 streaming_offset) override TD_WARN_UNUSED_RESULT; - Result process_part(Part part, NetQueryPtr net_query) override TD_WARN_UNUSED_RESULT; - void on_progress(Progress progress) override; - FileLoader::Callback *get_callback() override; + int64 streaming_offset) final TD_WARN_UNUSED_RESULT; + Result process_part(Part part, NetQueryPtr net_query) final TD_WARN_UNUSED_RESULT; + void on_progress(Progress progress) final; + FileLoader::Callback *get_callback() final; Result on_update_local_location(const LocalFileLocation &location, - int64 file_size) override TD_WARN_UNUSED_RESULT; + int64 file_size) final TD_WARN_UNUSED_RESULT; Status generate_iv_map(); bool keep_fd_ = false; - void keep_fd_flag(bool keep_fd) override; + void keep_fd_flag(bool keep_fd) final; void try_release_fd(); Status acquire_fd() TD_WARN_UNUSED_RESULT; }; diff --git a/td/telegram/files/ResourceManager.h b/td/telegram/files/ResourceManager.h index 365a7b103..3a2b4a9bc 100644 --- a/td/telegram/files/ResourceManager.h +++ b/td/telegram/files/ResourceManager.h @@ -56,9 +56,9 @@ class ResourceManager : public Actor { ActorShared<> parent_; bool stop_flag_ = false; - void hangup_shared() override; + void hangup_shared() final; - void loop() override; + void loop() final; void add_to_heap(Node *node); bool satisfy_node(NodeId file_node_id); diff --git a/td/telegram/logevent/LogEvent.h b/td/telegram/logevent/LogEvent.h index bfda0f33e..1c17dec3e 100644 --- a/td/telegram/logevent/LogEvent.h +++ b/td/telegram/logevent/LogEvent.h @@ -174,7 +174,7 @@ class StorerImpl : public Storer { explicit StorerImpl(const T &event) : event_(event) { } - size_t size() const override { + size_t size() const final { WithContext storer; storer.set_context(G()); @@ -183,7 +183,7 @@ class StorerImpl : public Storer { td::store(event_, storer); return storer.get_length(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { WithContext storer(ptr); storer.set_context(G()); @@ -242,12 +242,12 @@ class LogEventStorerImpl : public Storer { explicit LogEventStorerImpl(const T &event) : event_(event) { } - size_t size() const override { + size_t size() const final { LogEventStorerCalcLength storer; td::store(event_, storer); return storer.get_length(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { LogEventStorerUnsafe storer(ptr); td::store(event_, storer); #ifdef TD_DEBUG diff --git a/td/telegram/logevent/SecretChatEvent.h b/td/telegram/logevent/SecretChatEvent.h index 66178d469..3b6872b8d 100644 --- a/td/telegram/logevent/SecretChatEvent.h +++ b/td/telegram/logevent/SecretChatEvent.h @@ -46,7 +46,7 @@ class SecretChatEvent : public LogEventBase { template class SecretChatLogEventBase : public SecretChatEvent { public: - typename SecretChatEvent::Type get_type() const override { + typename SecretChatEvent::Type get_type() const final { return ChildT::type; } @@ -292,7 +292,7 @@ class InboundSecretMessage : public SecretChatLogEventBase is_checked = true; } - StringBuilder &print(StringBuilder &sb) const override { + StringBuilder &print(StringBuilder &sb) const final { return sb << "[Logevent InboundSecretMessage " << tag("id", log_event_id()) << tag("chat_id", chat_id) << tag("date", date) << tag("auth_key_id", format::as_hex(auth_key_id)) << tag("message_id", message_id) << tag("my_in_seq_no", my_in_seq_no) << tag("my_out_seq_no", my_out_seq_no) @@ -398,7 +398,7 @@ class OutboundSecretMessage : public SecretChatLogEventBase { parse(chat_id, parser); } - StringBuilder &print(StringBuilder &sb) const override { + StringBuilder &print(StringBuilder &sb) const final { return sb << "[Logevent CloseSecretChat " << tag("id", log_event_id()) << tag("chat_id", chat_id) << tag("delete_history", delete_history) << tag("is_already_discarded", is_already_discarded) << "]"; } @@ -467,7 +467,7 @@ class CreateSecretChat : public SecretChatLogEventBase { parse(user_access_hash, parser); } - StringBuilder &print(StringBuilder &sb) const override { + StringBuilder &print(StringBuilder &sb) const final { return sb << "[Logevent CreateSecretChat " << tag("id", log_event_id()) << tag("chat_id", random_id) << user_id << "]"; } diff --git a/td/telegram/net/AuthDataShared.cpp b/td/telegram/net/AuthDataShared.cpp index 4114cbe81..a17fee056 100644 --- a/td/telegram/net/AuthDataShared.cpp +++ b/td/telegram/net/AuthDataShared.cpp @@ -25,15 +25,15 @@ class AuthDataSharedImpl : public AuthDataShared { log_auth_key(get_auth_key()); } - DcId dc_id() const override { + DcId dc_id() const final { return dc_id_; } - const std::shared_ptr &public_rsa_key() override { + const std::shared_ptr &public_rsa_key() final { return public_rsa_key_; } - mtproto::AuthKey get_auth_key() override { + mtproto::AuthKey get_auth_key() final { string dc_key = G()->td_db()->get_binlog_pmc()->get(auth_key_key()); mtproto::AuthKey res; @@ -43,11 +43,11 @@ class AuthDataSharedImpl : public AuthDataShared { return res; } - AuthKeyState get_auth_key_state() override { + AuthKeyState get_auth_key_state() final { return AuthDataShared::get_auth_key_state(get_auth_key()); } - void set_auth_key(const mtproto::AuthKey &auth_key) override { + void set_auth_key(const mtproto::AuthKey &auth_key) final { G()->td_db()->get_binlog_pmc()->set(auth_key_key(), serialize(auth_key)); log_auth_key(auth_key); @@ -55,26 +55,26 @@ class AuthDataSharedImpl : public AuthDataShared { } // TODO: extract it from G() - void update_server_time_difference(double diff) override { + void update_server_time_difference(double diff) final { G()->update_server_time_difference(diff); } - double get_server_time_difference() override { + double get_server_time_difference() final { return G()->get_server_time_difference(); } - void add_auth_key_listener(unique_ptr listener) override { + void add_auth_key_listener(unique_ptr listener) final { if (listener->notify()) { auto lock = rw_mutex_.lock_write(); auth_key_listeners_.push_back(std::move(listener)); } } - void set_future_salts(const std::vector &future_salts) override { + void set_future_salts(const std::vector &future_salts) final { G()->td_db()->get_binlog_pmc()->set(future_salts_key(), serialize(future_salts)); } - std::vector get_future_salts() override { + std::vector get_future_salts() final { string future_salts = G()->td_db()->get_binlog_pmc()->get(future_salts_key()); std::vector res; if (!future_salts.empty()) { diff --git a/td/telegram/net/ConnectionCreator.cpp b/td/telegram/net/ConnectionCreator.cpp index 2bbe03672..8c466800c 100644 --- a/td/telegram/net/ConnectionCreator.cpp +++ b/td/telegram/net/ConnectionCreator.cpp @@ -758,7 +758,7 @@ ActorOwn<> ConnectionCreator::prepare_connection(IPAddress ip_address, SocketFd , use_connection_token_(use_connection_token) , was_connected_(was_connected) { } - void set_result(Result result) override { + void set_result(Result result) final { if (result.is_error()) { if (use_connection_token_) { connection_token_ = StateManager::ConnectionToken(); @@ -776,7 +776,7 @@ ActorOwn<> ConnectionCreator::prepare_connection(IPAddress ip_address, SocketFd promise_.set_value(std::move(data)); } } - void on_connected() override { + void on_connected() final { if (use_connection_token_) { connection_token_ = StateManager::connection_proxy(G()->state_manager()); } @@ -1091,15 +1091,15 @@ void ConnectionCreator::start_up() { explicit StateCallback(ActorId connection_creator) : connection_creator_(std::move(connection_creator)) { } - bool on_network(NetType network_type, uint32 generation) override { + bool on_network(NetType network_type, uint32 generation) final { send_closure(connection_creator_, &ConnectionCreator::on_network, network_type != NetType::None, generation); return connection_creator_.is_alive(); } - bool on_online(bool online_flag) override { + bool on_online(bool online_flag) final { send_closure(connection_creator_, &ConnectionCreator::on_online, online_flag); return connection_creator_.is_alive(); } - bool on_logging_out(bool is_logging_out) override { + bool on_logging_out(bool is_logging_out) final { send_closure(connection_creator_, &ConnectionCreator::on_logging_out, is_logging_out); return connection_creator_.is_alive(); } diff --git a/td/telegram/net/ConnectionCreator.h b/td/telegram/net/ConnectionCreator.h index 633f31a68..a831f5f99 100644 --- a/td/telegram/net/ConnectionCreator.h +++ b/td/telegram/net/ConnectionCreator.h @@ -59,7 +59,7 @@ class ConnectionCreator : public NetQueryCallback { explicit ConnectionCreator(ActorShared<> parent); ConnectionCreator(ConnectionCreator &&other); ConnectionCreator &operator=(ConnectionCreator &&other); - ~ConnectionCreator() override; + ~ConnectionCreator() final; void on_dc_options(DcOptions new_dc_options); void on_dc_update(DcId dc_id, string ip_port, Promise<> promise); @@ -202,10 +202,10 @@ class ConnectionCreator : public NetQueryCallback { void save_proxy_last_used_date(int32 delay); td_api::object_ptr get_proxy_object(int32 proxy_id) const; - void start_up() override; - void hangup_shared() override; - void hangup() override; - void loop() override; + void start_up() final; + void hangup_shared() final; + void hangup() final; + void loop() final; void save_dc_options(); Result do_request_connection(DcId dc_id, bool allow_media_only); diff --git a/td/telegram/net/DcAuthManager.cpp b/td/telegram/net/DcAuthManager.cpp index 4cdb0d9ac..9866ab3e6 100644 --- a/td/telegram/net/DcAuthManager.cpp +++ b/td/telegram/net/DcAuthManager.cpp @@ -47,7 +47,7 @@ void DcAuthManager::add_dc(std::shared_ptr auth_data) { public: explicit Listener(ActorShared dc_manager) : dc_manager_(std::move(dc_manager)) { } - bool notify() override { + bool notify() final { if (!dc_manager_.is_alive()) { return false; } diff --git a/td/telegram/net/DcAuthManager.h b/td/telegram/net/DcAuthManager.h index 9d420dd55..310e0eca7 100644 --- a/td/telegram/net/DcAuthManager.h +++ b/td/telegram/net/DcAuthManager.h @@ -56,11 +56,11 @@ class DcAuthManager : public NetQueryCallback { void update_auth_key_state(); - void on_result(NetQueryPtr result) override; + void on_result(NetQueryPtr result) final; void dc_loop(DcInfo &dc); void destroy_loop(); - void loop() override; + void loop() final; }; } // namespace td diff --git a/td/telegram/net/NetQueryDelayer.h b/td/telegram/net/NetQueryDelayer.h index 59d5bf6cb..2e5e056af 100644 --- a/td/telegram/net/NetQueryDelayer.h +++ b/td/telegram/net/NetQueryDelayer.h @@ -28,11 +28,11 @@ class NetQueryDelayer : public Actor { }; Container container_; ActorShared<> parent_; - void wakeup() override; + void wakeup() final; void on_slot_event(uint64 id); - void tear_down() override; + void tear_down() final; }; } // namespace td diff --git a/td/telegram/net/NetStatsManager.cpp b/td/telegram/net/NetStatsManager.cpp index 04f6a869a..d032deac3 100644 --- a/td/telegram/net/NetStatsManager.cpp +++ b/td/telegram/net/NetStatsManager.cpp @@ -56,7 +56,7 @@ void NetStatsManager::init() { private: ActorId parent_; size_t id_; - void on_stats_updated() override { + void on_stats_updated() final { send_closure(parent_, &NetStatsManager::on_stats_updated, id_); } }; @@ -237,7 +237,7 @@ void NetStatsManager::start_up() { explicit NetCallback(ActorId net_stats_manager) : net_stats_manager_(std::move(net_stats_manager)) { } - bool on_network(NetType network_type, uint32 network_generation) override { + bool on_network(NetType network_type, uint32 network_generation) final { send_closure(net_stats_manager_, &NetStatsManager::on_net_type_updated, network_type); return net_stats_manager_.is_alive(); } diff --git a/td/telegram/net/NetStatsManager.h b/td/telegram/net/NetStatsManager.h index a8fd666f7..b1e3891be 100644 --- a/td/telegram/net/NetStatsManager.h +++ b/td/telegram/net/NetStatsManager.h @@ -135,7 +135,7 @@ class NetStatsManager : public Actor { void add_network_stats_impl(NetStatsInfo &info, const NetworkStatsEntry &entry); - void start_up() override; + void start_up() final; void update(NetStatsInfo &info, bool force_save); void save_stats(NetStatsInfo &info, NetType net_type); void info_loop(NetStatsInfo &info); diff --git a/td/telegram/net/PublicRsaKeyShared.h b/td/telegram/net/PublicRsaKeyShared.h index 6f3a09cc5..406272aa5 100644 --- a/td/telegram/net/PublicRsaKeyShared.h +++ b/td/telegram/net/PublicRsaKeyShared.h @@ -34,8 +34,8 @@ class PublicRsaKeyShared : public PublicRsaKeyInterface { }; void add_rsa(RSA rsa); - Result> get_rsa(const vector &fingerprints) override; - void drop_keys() override; + Result> get_rsa(const vector &fingerprints) final; + void drop_keys() final; bool has_keys(); void add_listener(unique_ptr listener); diff --git a/td/telegram/net/PublicRsaKeyWatchdog.cpp b/td/telegram/net/PublicRsaKeyWatchdog.cpp index eccd1257b..5954be555 100644 --- a/td/telegram/net/PublicRsaKeyWatchdog.cpp +++ b/td/telegram/net/PublicRsaKeyWatchdog.cpp @@ -27,7 +27,7 @@ void PublicRsaKeyWatchdog::add_public_rsa_key(std::shared_ptr parent) : parent_(std::move(parent)) { } - bool notify() override { + bool notify() final { send_event(parent_, Event::yield()); return parent_.is_alive(); } diff --git a/td/telegram/net/PublicRsaKeyWatchdog.h b/td/telegram/net/PublicRsaKeyWatchdog.h index 4a40aac50..202dd366a 100644 --- a/td/telegram/net/PublicRsaKeyWatchdog.h +++ b/td/telegram/net/PublicRsaKeyWatchdog.h @@ -37,10 +37,10 @@ class PublicRsaKeyWatchdog : public NetActor { FloodControlStrict flood_control_; bool has_query_{false}; - void start_up() override; - void loop() override; + void start_up() final; + void loop() final; - void on_result(NetQueryPtr net_query) override; + void on_result(NetQueryPtr net_query) final; void sync(BufferSlice cdn_config_serialized); void sync_key(std::shared_ptr &key); }; diff --git a/td/telegram/net/Session.cpp b/td/telegram/net/Session.cpp index 2b53e3af1..aac29d2ea 100644 --- a/td/telegram/net/Session.cpp +++ b/td/telegram/net/Session.cpp @@ -80,7 +80,7 @@ class GenAuthKeyActor : public Actor { ActorOwn child_; - void start_up() override { + void start_up() final { // Bug in Android clang and MSVC // std::tuple> b(std::forward_as_tuple(Result())); @@ -92,7 +92,7 @@ class GenAuthKeyActor : public Actor { })); } - void hangup() override { + void hangup() final { if (connection_promise_) { connection_promise_.set_error(Status::Error(1, "Canceled")); } @@ -194,11 +194,11 @@ void Session::start_up() { public: explicit StateCallback(ActorId session) : session_(std::move(session)) { } - bool on_network(NetType network_type, uint32 network_generation) override { + bool on_network(NetType network_type, uint32 network_generation) final { send_closure(session_, &Session::on_network, network_type != NetType::None, network_generation); return session_.is_alive(); } - bool on_online(bool online_flag) override { + bool on_online(bool online_flag) final { send_closure(session_, &Session::on_online, online_flag); return session_.is_alive(); } @@ -1259,10 +1259,10 @@ void Session::create_gen_auth_key_actor(HandshakeId handshake_id) { AuthKeyHandshakeContext(DhCallback *dh_callback, std::shared_ptr public_rsa_key) : dh_callback_(dh_callback), public_rsa_key_(std::move(public_rsa_key)) { } - DhCallback *get_dh_callback() override { + DhCallback *get_dh_callback() final { return dh_callback_; } - PublicRsaKeyInterface *get_public_rsa_key_interface() override { + PublicRsaKeyInterface *get_public_rsa_key_interface() final { return public_rsa_key_.get(); } diff --git a/td/telegram/net/Session.h b/td/telegram/net/Session.h index f8dc31a7c..f072fe0f5 100644 --- a/td/telegram/net/Session.h +++ b/td/telegram/net/Session.h @@ -191,29 +191,29 @@ class Session final void auth_loop(); // mtproto::Connection::Callback - void on_connected() override; - void on_closed(Status status) override; + void on_connected() final; + void on_closed(Status status) final; - Status on_pong() override; + Status on_pong() final; - void on_auth_key_updated() override; - void on_tmp_auth_key_updated() override; - void on_server_salt_updated() override; - void on_server_time_difference_updated() override; + void on_auth_key_updated() final; + void on_tmp_auth_key_updated() final; + void on_server_salt_updated() final; + void on_server_time_difference_updated() final; - void on_session_created(uint64 unique_id, uint64 first_id) override; - void on_session_failed(Status status) override; + void on_session_created(uint64 unique_id, uint64 first_id) final; + void on_session_failed(Status status) final; - void on_container_sent(uint64 container_id, vector msg_ids) override; + void on_container_sent(uint64 container_id, vector msg_ids) final; - void on_message_ack(uint64 id) override; - Status on_message_result_ok(uint64 id, BufferSlice packet, size_t original_size) override; - void on_message_result_error(uint64 id, int error_code, BufferSlice message) override; - void on_message_failed(uint64 id, Status status) override; + void on_message_ack(uint64 id) final; + Status on_message_result_ok(uint64 id, BufferSlice packet, size_t original_size) final; + void on_message_result_error(uint64 id, int error_code, BufferSlice message) final; + void on_message_failed(uint64 id, Status status) final; - void on_message_info(uint64 id, int32 state, uint64 answer_id, int32 answer_size) override; + void on_message_info(uint64 id, int32 state, uint64 answer_id, int32 answer_size) final; - Status on_destroy_auth_key() override; + Status on_destroy_auth_key() final; void flush_pending_invoke_after_queries(); bool has_queries() const; @@ -248,15 +248,15 @@ class Session final bool need_send_check_main_key() const; bool connection_send_check_main_key(ConnectionInfo *info); - void on_result(NetQueryPtr query) override; + void on_result(NetQueryPtr query) final; void on_bind_result(NetQueryPtr query); void on_check_key_result(NetQueryPtr query); - void start_up() override; - void loop() override; - void hangup() override; - void raw_event(const Event::Raw &event) override; + void start_up() final; + void loop() final; + void hangup() final; + void raw_event(const Event::Raw &event) final; friend StringBuilder &operator<<(StringBuilder &sb, Mode mode) { return sb << (mode == Mode::Http ? "Http" : "Tcp"); diff --git a/td/telegram/net/SessionMultiProxy.cpp b/td/telegram/net/SessionMultiProxy.cpp index 26bb6c782..b6141a923 100644 --- a/td/telegram/net/SessionMultiProxy.cpp +++ b/td/telegram/net/SessionMultiProxy.cpp @@ -131,7 +131,7 @@ void SessionMultiProxy::init() { Callback(ActorId parent, uint32 generation, int32 session_id) : parent_(parent), generation_(generation), session_id_(session_id) { } - void on_query_finished() override { + void on_query_finished() final { send_closure(parent_, &SessionMultiProxy::on_query_finished, generation_, session_id_); } diff --git a/td/telegram/net/SessionMultiProxy.h b/td/telegram/net/SessionMultiProxy.h index 8d512b5fa..bd63220f0 100644 --- a/td/telegram/net/SessionMultiProxy.h +++ b/td/telegram/net/SessionMultiProxy.h @@ -22,7 +22,7 @@ class SessionMultiProxy : public Actor { SessionMultiProxy(); SessionMultiProxy(const SessionMultiProxy &other) = delete; SessionMultiProxy &operator=(const SessionMultiProxy &other) = delete; - ~SessionMultiProxy() override; + ~SessionMultiProxy() final; SessionMultiProxy(int32 session_count, std::shared_ptr shared_auth_data, bool is_main, bool use_pfs, bool allow_media_only, bool is_media, bool is_cdn, bool need_destroy_auth_key); @@ -52,7 +52,7 @@ class SessionMultiProxy : public Actor { uint32 sessions_generation_{0}; std::vector sessions_; - void start_up() override; + void start_up() final; void init(); bool get_pfs_flag() const; diff --git a/td/telegram/net/SessionProxy.cpp b/td/telegram/net/SessionProxy.cpp index f387f259f..7c1a0e1bb 100644 --- a/td/telegram/net/SessionProxy.cpp +++ b/td/telegram/net/SessionProxy.cpp @@ -38,27 +38,27 @@ class SessionCallback : public Session::Callback { , hash_(hash) { } - void on_failed() override { + void on_failed() final { send_closure(parent_, &SessionProxy::on_failed); } - void on_closed() override { + void on_closed() final { send_closure(parent_, &SessionProxy::on_closed); } void request_raw_connection(unique_ptr auth_data, - Promise> promise) override { + Promise> promise) final { send_closure(G()->connection_creator(), &ConnectionCreator::request_raw_connection, dc_id_, allow_media_only_, is_media_, std::move(promise), hash_, std::move(auth_data)); } - void on_tmp_auth_key_updated(mtproto::AuthKey auth_key) override { + void on_tmp_auth_key_updated(mtproto::AuthKey auth_key) final { send_closure(parent_, &SessionProxy::on_tmp_auth_key_updated, std::move(auth_key)); } - void on_server_salt_updated(std::vector server_salts) override { + void on_server_salt_updated(std::vector server_salts) final { send_closure(parent_, &SessionProxy::on_server_salt_updated, std::move(server_salts)); } - void on_result(NetQueryPtr query) override { + void on_result(NetQueryPtr query) final { if (UniqueId::extract_type(query->id()) != UniqueId::BindKey && query->id() != 0) { // not bind key query and not an update send_closure(parent_, &SessionProxy::on_query_finished); @@ -92,7 +92,7 @@ void SessionProxy::start_up() { public: explicit Listener(ActorShared session_proxy) : session_proxy_(std::move(session_proxy)) { } - bool notify() override { + bool notify() final { if (!session_proxy_.is_alive()) { return false; } diff --git a/td/telegram/net/SessionProxy.h b/td/telegram/net/SessionProxy.h index 68213f79d..f2db0ba7a 100644 --- a/td/telegram/net/SessionProxy.h +++ b/td/telegram/net/SessionProxy.h @@ -64,8 +64,8 @@ class SessionProxy : public Actor { void on_query_finished(); - void start_up() override; - void tear_down() override; + void start_up() final; + void tear_down() final; }; } // namespace td diff --git a/td/telegram/net/TempAuthKeyWatchdog.h b/td/telegram/net/TempAuthKeyWatchdog.h index 776bde99a..b9384cb5b 100644 --- a/td/telegram/net/TempAuthKeyWatchdog.h +++ b/td/telegram/net/TempAuthKeyWatchdog.h @@ -96,7 +96,7 @@ class TempAuthKeyWatchdog : public NetQueryCallback { set_timeout_at(min(sync_at_, now + SYNC_WAIT)); } - void timeout_expired() override { + void timeout_expired() final { LOG(DEBUG) << "Sync timeout expired"; CHECK(!run_sync_); if (!need_sync_) { diff --git a/td/tl/tl_json.h b/td/tl/tl_json.h index 47c877c86..4aa7daefc 100644 --- a/td/tl/tl_json.h +++ b/td/tl/tl_json.h @@ -154,10 +154,10 @@ class DowncastHelper : public T { public: explicit DowncastHelper(int32 constructor) : constructor_(constructor) { } - int32 get_id() const override { + int32 get_id() const final { return constructor_; } - void store(TlStorerToString &s, const char *field_name) const override { + void store(TlStorerToString &s, const char *field_name) const final { } private: diff --git a/tdactor/example/example.cpp b/tdactor/example/example.cpp index 58ddce34c..a58ad96ab 100644 --- a/tdactor/example/example.cpp +++ b/tdactor/example/example.cpp @@ -19,14 +19,14 @@ class Worker : public td::Actor { class MainActor : public td::Actor { public: - void start_up() override { + void start_up() final { LOG(ERROR) << "Start up"; set_timeout_in(10); worker_ = td::create_actor_on_scheduler("Worker", 1); send_closure(worker_, &Worker::ping, 123); } - void timeout_expired() override { + void timeout_expired() final { LOG(ERROR) << "Timeout expired"; td::Scheduler::instance()->finish(); } diff --git a/tdactor/td/actor/ConcurrentScheduler.h b/tdactor/td/actor/ConcurrentScheduler.h index 0177ea138..a6ce6a916 100644 --- a/tdactor/td/actor/ConcurrentScheduler.h +++ b/tdactor/td/actor/ConcurrentScheduler.h @@ -97,9 +97,9 @@ class ConcurrentScheduler : private Scheduler::Callback { #endif int32 extra_scheduler_; - void on_finish() override; + void on_finish() final; - void register_at_finish(std::function f) override; + void register_at_finish(std::function f) final; }; } // namespace td diff --git a/tdactor/td/actor/MultiPromise.h b/tdactor/td/actor/MultiPromise.h index cd6a945fc..8c69996ec 100644 --- a/tdactor/td/actor/MultiPromise.h +++ b/tdactor/td/actor/MultiPromise.h @@ -32,17 +32,17 @@ class MultiPromiseInterface { class MultiPromise : public MultiPromiseInterface { public: - void add_promise(Promise<> &&promise) override { + void add_promise(Promise<> &&promise) final { impl_->add_promise(std::move(promise)); } - Promise<> get_promise() override { + Promise<> get_promise() final { return impl_->get_promise(); } - size_t promise_count() const override { + size_t promise_count() const final { return impl_->promise_count(); } - void set_ignore_errors(bool ignore_errors) override { + void set_ignore_errors(bool ignore_errors) final { impl_->set_ignore_errors(ignore_errors); } @@ -61,13 +61,13 @@ class MultiPromiseActor final explicit MultiPromiseActor(string name) : name_(std::move(name)) { } - void add_promise(Promise &&promise) override; + void add_promise(Promise &&promise) final; - Promise get_promise() override; + Promise get_promise() final; - void set_ignore_errors(bool ignore_errors) override; + void set_ignore_errors(bool ignore_errors) final; - size_t promise_count() const override; + size_t promise_count() const final; private: void set_result(Result &&result); @@ -79,31 +79,31 @@ class MultiPromiseActor final bool ignore_errors_ = false; Result result_; - void raw_event(const Event::Raw &event) override; + void raw_event(const Event::Raw &event) final; - void tear_down() override; + void tear_down() final; - void on_start_migrate(int32) override { + void on_start_migrate(int32) final { UNREACHABLE(); } - void on_finish_migrate() override { + void on_finish_migrate() final { UNREACHABLE(); } }; class MultiPromiseActorSafe : public MultiPromiseInterface { public: - void add_promise(Promise &&promise) override; - Promise get_promise() override; - void set_ignore_errors(bool ignore_errors) override; - size_t promise_count() const override; + void add_promise(Promise &&promise) final; + Promise get_promise() final; + void set_ignore_errors(bool ignore_errors) final; + size_t promise_count() const final; explicit MultiPromiseActorSafe(string name) : multi_promise_(td::make_unique(std::move(name))) { } MultiPromiseActorSafe(const MultiPromiseActorSafe &other) = delete; MultiPromiseActorSafe &operator=(const MultiPromiseActorSafe &other) = delete; MultiPromiseActorSafe(MultiPromiseActorSafe &&other) = delete; MultiPromiseActorSafe &operator=(MultiPromiseActorSafe &&other) = delete; - ~MultiPromiseActorSafe() override; + ~MultiPromiseActorSafe() final; private: unique_ptr multi_promise_; diff --git a/tdactor/td/actor/PromiseFuture.h b/tdactor/td/actor/PromiseFuture.h index 77dafdc46..cdd968130 100644 --- a/tdactor/td/actor/PromiseFuture.h +++ b/tdactor/td/actor/PromiseFuture.h @@ -370,11 +370,11 @@ namespace detail { class EventPromise : public PromiseInterface { public: - void set_value(Unit &&) override { + void set_value(Unit &&) final { ok_.try_emit(); fail_.clear(); } - void set_error(Status &&) override { + void set_error(Status &&) final { do_set_error(); } @@ -382,7 +382,7 @@ class EventPromise : public PromiseInterface { EventPromise &operator=(const EventPromise &other) = delete; EventPromise(EventPromise &&other) = delete; EventPromise &operator=(EventPromise &&other) = delete; - ~EventPromise() override { + ~EventPromise() final { do_set_error(); } @@ -429,10 +429,10 @@ class JoinPromise : public PromiseInterface { public: explicit JoinPromise(ArgsT &&... arg) : promises_(std::forward(arg)...) { } - void set_value(Unit &&) override { + void set_value(Unit &&) final { tuple_for_each(promises_, [](auto &promise) { promise.set_value(Unit()); }); } - void set_error(Status &&error) override { + void set_error(Status &&error) final { tuple_for_each(promises_, [&error](auto &promise) { promise.set_error(error.clone()); }); } @@ -489,12 +489,12 @@ class PromiseActor final : public PromiseInterface { PromiseActor &operator=(const PromiseActor &other) = delete; PromiseActor(PromiseActor &&) = default; PromiseActor &operator=(PromiseActor &&) = default; - ~PromiseActor() override { + ~PromiseActor() final { close(); } - void set_value(T &&value) override; - void set_error(Status &&error) override; + void set_value(T &&value) final; + void set_error(Status &&error) final; void close() { future_id_.reset(); @@ -552,7 +552,7 @@ class FutureActor final : public Actor { FutureActor(FutureActor &&other) = default; FutureActor &operator=(FutureActor &&other) = default; - ~FutureActor() override = default; + ~FutureActor() final = default; bool is_ok() const { return is_ready() && result_.is_ok(); @@ -620,11 +620,11 @@ class FutureActor final : public Actor { event_.try_emit_later(); } - void hangup() override { + void hangup() final { set_error(Status::Error()); } - void start_up() override { + void start_up() final { // empty } diff --git a/tdactor/td/actor/SignalSlot.h b/tdactor/td/actor/SignalSlot.h index 5249b36ce..17f8aa84f 100644 --- a/tdactor/td/actor/SignalSlot.h +++ b/tdactor/td/actor/SignalSlot.h @@ -30,7 +30,7 @@ class Slot final : public Actor { Slot &operator=(const Slot &other) = delete; Slot(Slot &&) = default; Slot &operator=(Slot &&) = default; - ~Slot() override { + ~Slot() final { close(); } void set_event(EventFull &&event) { @@ -79,11 +79,11 @@ class Slot final : public Actor { bool was_signal_ = false; EventFull event_; - void timeout_expired() override { + void timeout_expired() final { signal(); } - void start_up() override { + void start_up() final { empty(); } @@ -100,7 +100,7 @@ class Slot final : public Actor { event_.try_emit_later(); } } - void hangup_shared() override { + void hangup_shared() final { signal(); } }; diff --git a/tdactor/td/actor/SleepActor.h b/tdactor/td/actor/SleepActor.h index 73be70ea2..9eab389e7 100644 --- a/tdactor/td/actor/SleepActor.h +++ b/tdactor/td/actor/SleepActor.h @@ -22,10 +22,10 @@ class SleepActor : public Actor { double timeout_; Promise<> promise_; - void start_up() override { + void start_up() final { set_timeout_in(timeout_); } - void timeout_expired() override { + void timeout_expired() final { promise_.set_value(Unit()); stop(); } diff --git a/tdactor/td/actor/Timeout.h b/tdactor/td/actor/Timeout.h index ae78466b7..f1407edf2 100644 --- a/tdactor/td/actor/Timeout.h +++ b/tdactor/td/actor/Timeout.h @@ -55,7 +55,7 @@ class Timeout final : public Actor { Callback callback_{}; Data data_{}; - void timeout_expired() override { + void timeout_expired() final { CHECK(!has_timeout()); CHECK(callback_ != Callback()); Callback callback = callback_; @@ -123,7 +123,7 @@ class MultiTimeout final : public Actor { void update_timeout(); - void timeout_expired() override; + void timeout_expired() final; vector get_expired_keys(double now); }; diff --git a/tdactor/td/actor/impl/Event.h b/tdactor/td/actor/impl/Event.h index d0b8d27ad..293d9933d 100644 --- a/tdactor/td/actor/impl/Event.h +++ b/tdactor/td/actor/impl/Event.h @@ -59,24 +59,24 @@ class CustomEvent { template class ClosureEvent : public CustomEvent { public: - void run(Actor *actor) override { + void run(Actor *actor) final { closure_.run(static_cast(actor)); } - CustomEvent *clone() const override { + CustomEvent *clone() const final { return new ClosureEvent(closure_.clone()); } template explicit ClosureEvent(ArgsT &&... args) : closure_(std::forward(args)...) { } - void start_migrate(int32 sched_id) override { + void start_migrate(int32 sched_id) final { closure_.for_each([sched_id](auto &obj) { using ::td::start_migrate; start_migrate(obj, sched_id); }); } - void finish_migrate() override { + void finish_migrate() final { closure_.for_each([](auto &obj) { using ::td::finish_migrate; finish_migrate(obj); @@ -90,10 +90,10 @@ class ClosureEvent : public CustomEvent { template class LambdaEvent : public CustomEvent { public: - void run(Actor *actor) override { + void run(Actor *actor) final { f_(); } - CustomEvent *clone() const override { + CustomEvent *clone() const final { LOG(FATAL) << "Not supported"; return nullptr; } diff --git a/tdactor/td/actor/impl/Scheduler-decl.h b/tdactor/td/actor/impl/Scheduler-decl.h index 459577bb7..add1d702d 100644 --- a/tdactor/td/actor/impl/Scheduler-decl.h +++ b/tdactor/td/actor/impl/Scheduler-decl.h @@ -148,17 +148,17 @@ class Scheduler { private: static void set_scheduler(Scheduler *scheduler); - /*** ServiceActor ***/ + class ServiceActor final : public Actor { public: void set_queue(std::shared_ptr> queues); - void start_up() override; + void start_up() final; private: std::shared_ptr> inbound_; bool subscribed_{false}; - void loop() override; - void tear_down() override; + void loop() final; + void tear_down() final; }; friend class ServiceActor; diff --git a/tdactor/test/actors_bugs.cpp b/tdactor/test/actors_bugs.cpp index f83cb2423..dca054a60 100644 --- a/tdactor/test/actors_bugs.cpp +++ b/tdactor/test/actors_bugs.cpp @@ -65,7 +65,7 @@ class TimeoutManager : public Actor { TimeoutManager &operator=(const TimeoutManager &) = delete; TimeoutManager(TimeoutManager &&) = delete; TimeoutManager &operator=(TimeoutManager &&) = delete; - ~TimeoutManager() override { + ~TimeoutManager() final { count--; LOG(INFO) << "Destroy TimeoutManager"; } diff --git a/tdactor/test/actors_main.cpp b/tdactor/test/actors_main.cpp index a6acfaccd..edf2ee0df 100644 --- a/tdactor/test/actors_main.cpp +++ b/tdactor/test/actors_main.cpp @@ -147,7 +147,7 @@ class QueryActor final : public Actor { } } - void raw_event(const Event::Raw &event) override { + void raw_event(const Event::Raw &event) final { uint32 id = event.u32; auto it = pending_.find(id); auto future = std::move(it->second.first); @@ -163,12 +163,12 @@ class QueryActor final : public Actor { stop(); } - void on_start_migrate(int32 sched_id) override { + void on_start_migrate(int32 sched_id) final { for (auto &it : pending_) { start_migrate(it.second.first, sched_id); } } - void on_finish_migrate() override { + void on_finish_migrate() final { for (auto &it : pending_) { finish_migrate(it.second.first); } @@ -184,14 +184,14 @@ class QueryActor final : public Actor { class MainQueryActor final : public Actor { class QueryActorCallback : public QueryActor::Callback { public: - void on_result(Query &&query) override { + void on_result(Query &&query) final { if (query.ready()) { send_closure(parent_id_, &MainQueryActor::on_result, std::move(query)); } else { send_closure(next_solver_, &QueryActor::query, std::move(query)); } } - void on_closed() override { + void on_closed() final { send_closure(parent_id_, &MainQueryActor::on_closed); } QueryActorCallback(ActorId parent_id, ActorId next_solver) @@ -210,7 +210,7 @@ class MainQueryActor final : public Actor { explicit MainQueryActor(int threads_n) : threads_n_(threads_n) { } - void start_up() override { + void start_up() final { actors_.resize(ACTORS_CNT); for (auto &actor : actors_) { auto actor_ptr = make_unique(threads_n_); @@ -257,7 +257,7 @@ class MainQueryActor final : public Actor { } } - void wakeup() override { + void wakeup() final { int cnt = 100000; while (out_cnt_ < in_cnt_ + 100 && out_cnt_ < cnt) { if (Random::fast_bool()) { @@ -291,14 +291,14 @@ class SimpleActor final : public Actor { public: explicit SimpleActor(int32 threads_n) : threads_n_(threads_n) { } - void start_up() override { + void start_up() final { auto actor_ptr = make_unique(threads_n_); worker_ = register_actor("Worker", std::move(actor_ptr), threads_n_ > 1 ? Random::fast(2, threads_n_) : 0).release(); yield(); } - void wakeup() override { + void wakeup() final { if (q_ == 100000) { Scheduler::instance()->finish(); stop(); @@ -320,16 +320,16 @@ class SimpleActor final : public Actor { // migrate(Random::fast(1, threads_n)); //} } - void raw_event(const Event::Raw &event) override { + void raw_event(const Event::Raw &event) final { auto result = future_.move_as_ok(); CHECK(result == fast_pow_mod_uint32(q_, p_)); yield(); } - void on_start_migrate(int32 sched_id) override { + void on_start_migrate(int32 sched_id) final { start_migrate(future_, sched_id); } - void on_finish_migrate() override { + void on_finish_migrate() final { finish_migrate(future_); } @@ -348,14 +348,14 @@ class SendToDead : public Actor { public: explicit Parent(ActorShared<> parent, int ttl = 3) : parent_(std::move(parent)), ttl_(ttl) { } - void start_up() override { + void start_up() final { set_timeout_in(Random::fast_uint32() % 3 * 0.001); if (ttl_ != 0) { child_ = create_actor_on_scheduler( "Child", Random::fast_uint32() % Scheduler::instance()->sched_count(), actor_shared(this), ttl_ - 1); } } - void timeout_expired() override { + void timeout_expired() final { stop(); } @@ -365,7 +365,7 @@ class SendToDead : public Actor { int ttl_; }; - void start_up() override { + void start_up() final { for (int i = 0; i < 2000; i++) { create_actor_on_scheduler("Parent", Random::fast_uint32() % Scheduler::instance()->sched_count(), create_reference(), 4) @@ -377,7 +377,7 @@ class SendToDead : public Actor { ref_cnt_++; return actor_shared(this); } - void hangup_shared() override { + void hangup_shared() final { ref_cnt_--; if (ref_cnt_ == 0) { ttl_--; @@ -441,7 +441,7 @@ TEST(Actors, main) { class DoAfterStop : public Actor { public: - void loop() override { + void loop() final { ptr = make_unique(10); stop(); CHECK(*ptr == 10); @@ -469,7 +469,7 @@ TEST(Actors, do_after_stop) { class XContext : public ActorContext { public: - int32 get_id() const override { + int32 get_id() const final { return 123456789; } @@ -484,7 +484,7 @@ class XContext : public ActorContext { class WithXContext : public Actor { public: - void start_up() override { + void start_up() final { auto old_context = set_context(std::make_shared()); } void f(unique_ptr guard) { diff --git a/tdactor/test/actors_simple.cpp b/tdactor/test/actors_simple.cpp index 5c5f4c9ab..247b87beb 100644 --- a/tdactor/test/actors_simple.cpp +++ b/tdactor/test/actors_simple.cpp @@ -186,10 +186,10 @@ class PrintChar final : public Actor { public: PrintChar(char c, int cnt) : char_(c), cnt_(cnt) { } - void start_up() override { + void start_up() final { yield(); } - void wakeup() override { + void wakeup() final { if (cnt_ == 0) { stop(); } else { @@ -249,7 +249,7 @@ class Ping final : public Actor { public: explicit Ping(ActorId pong) : pong_(pong) { } - void start_up() override { + void start_up() final { send_closure(pong_, &Pong::pong, Ball()); } @@ -282,10 +282,10 @@ class OpenClose final : public Actor { public: explicit OpenClose(int cnt) : cnt_(cnt) { } - void start_up() override { + void start_up() final { yield(); } - void wakeup() override { + void wakeup() final { ObserverBase *observer = reinterpret_cast(123); if (cnt_ > 0) { auto r_file_fd = FileFd::open("server", FileFd::Read | FileFd::Create); @@ -332,14 +332,14 @@ class Slave : public Actor { ActorId msg; explicit Slave(ActorId msg) : msg(msg) { } - void hangup() override { + void hangup() final { send_closure(msg, &MsgActor::msg); } }; class MasterActor : public MsgActor { public: - void loop() override { + void loop() final { alive_ = true; slave = create_actor("slave", static_cast>(actor_id(this))); stop(); @@ -351,10 +351,10 @@ class MasterActor : public MsgActor { MasterActor &operator=(const MasterActor &) = delete; MasterActor(MasterActor &&) = delete; MasterActor &operator=(MasterActor &&) = delete; - ~MasterActor() override { + ~MasterActor() final { alive_ = 987654321; } - void msg() override { + void msg() final { CHECK(alive_ == 123456789); } uint64 alive_ = 123456789; @@ -391,11 +391,11 @@ class LinkTokenMasterActor : public Actor { public: explicit LinkTokenMasterActor(int cnt) : cnt_(cnt) { } - void start_up() override { + void start_up() final { child_ = create_actor("Slave", actor_shared(this, 123)).release(); yield(); } - void loop() override { + void loop() final { for (int i = 0; i < 100 && cnt_ > 0; cnt_--, i++) { auto token = static_cast(cnt_) + 1; switch (i % 4) { @@ -425,7 +425,7 @@ class LinkTokenMasterActor : public Actor { } } - void hangup_shared() override { + void hangup_shared() final { CHECK(get_link_token() == 123); Scheduler::instance()->finish(); stop(); @@ -466,7 +466,7 @@ class LaterSlave : public Actor { private: ActorShared<> parent_; - void hangup() override { + void hangup() final { sb << "A"; send_closure(actor_id(this), &LaterSlave::finish); } @@ -479,16 +479,16 @@ class LaterSlave : public Actor { class LaterMasterActor : public Actor { int cnt_ = 3; std::vector> children_; - void start_up() override { + void start_up() final { for (int i = 0; i < cnt_; i++) { children_.push_back(create_actor("B", actor_shared(this))); } yield(); } - void loop() override { + void loop() final { children_.clear(); } - void hangup_shared() override { + void hangup_shared() final { if (!--cnt_) { Scheduler::instance()->finish(); stop(); @@ -511,7 +511,7 @@ TEST(Actors, later) { class MultiPromise2 : public Actor { public: - void start_up() override { + void start_up() final { auto promise = PromiseCreator::lambda([](Result result) { result.ensure(); Scheduler::instance()->finish(); @@ -527,7 +527,7 @@ class MultiPromise2 : public Actor { class MultiPromise1 : public Actor { public: - void start_up() override { + void start_up() final { auto promise = PromiseCreator::lambda([](Result result) { CHECK(result.is_error()); create_actor("B").release(); @@ -551,7 +551,7 @@ TEST(Actors, MultiPromise) { class FastPromise : public Actor { public: - void start_up() override { + void start_up() final { PromiseFuture pf; auto promise = pf.move_promise(); auto future = pf.move_future(); @@ -574,10 +574,10 @@ TEST(Actors, FastPromise) { } class StopInTeardown : public Actor { - void loop() override { + void loop() final { stop(); } - void tear_down() override { + void tear_down() final { stop(); Scheduler::instance()->finish(); } @@ -597,7 +597,7 @@ TEST(Actors, stop_in_teardown) { class AlwaysWaitForMailbox : public Actor { public: - void start_up() override { + void start_up() final { always_wait_for_mailbox(); create_actor("Sleep", 0.1, PromiseCreator::lambda([actor_id = actor_id(this), ptr = this](Unit) { send_closure(actor_id, &AlwaysWaitForMailbox::g); diff --git a/tdactor/test/actors_workers.cpp b/tdactor/test/actors_workers.cpp index 139b10202..43a44aad5 100644 --- a/tdactor/test/actors_workers.cpp +++ b/tdactor/test/actors_workers.cpp @@ -60,10 +60,10 @@ class Manager final : public Actor { public: Callback(ActorId actor_id, int worker_id) : actor_id_(actor_id), worker_id_(worker_id) { } - void on_ready(int query, int result) override { + void on_ready(int query, int result) final { send_closure(actor_id_, &Manager::on_ready, worker_id_, query, result); } - void on_closed() override { + void on_closed() final { send_closure_later(actor_id_, &Manager::on_closed, worker_id_); } @@ -72,7 +72,7 @@ class Manager final : public Actor { int worker_id_; }; - void start_up() override { + void start_up() final { int i = 0; for (auto &worker : workers_) { ref_cnt_++; diff --git a/tddb/td/db/BinlogKeyValue.h b/tddb/td/db/BinlogKeyValue.h index 698747975..b74aadef6 100644 --- a/tddb/td/db/BinlogKeyValue.h +++ b/tddb/td/db/BinlogKeyValue.h @@ -53,12 +53,12 @@ class BinlogKeyValue : public KeyValueSyncInterface { value = parser.template fetch_string(); } - size_t size() const override { + size_t size() const final { TlStorerCalcLength storer; store(storer); return storer.get_length(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { TlStorerUnsafe storer(ptr); store(storer); return static_cast(storer.get_buf() - ptr); @@ -113,11 +113,11 @@ class BinlogKeyValue : public KeyValueSyncInterface { void close() { *this = BinlogKeyValue(); } - void close(Promise<> promise) override { + void close(Promise<> promise) final { binlog_->close(std::move(promise)); } - SeqNo set(string key, string value) override { + SeqNo set(string key, string value) final { auto lock = rw_mutex_.lock_write().move_as_ok(); uint64 old_id = 0; auto it_ok = map_.insert({key, {value, 0}}); @@ -149,7 +149,7 @@ class BinlogKeyValue : public KeyValueSyncInterface { return seq_no; } - SeqNo erase(const string &key) override { + SeqNo erase(const string &key) final { auto lock = rw_mutex_.lock_write().move_as_ok(); auto it = map_.find(key); if (it == map_.end()) { @@ -169,12 +169,12 @@ class BinlogKeyValue : public KeyValueSyncInterface { binlog_->add_raw_event(BinlogDebugInfo{__FILE__, __LINE__}, seq_no, std::move(event)); } - bool isset(const string &key) override { + bool isset(const string &key) final { auto lock = rw_mutex_.lock_read().move_as_ok(); return map_.count(key) > 0; } - string get(const string &key) override { + string get(const string &key) final { auto lock = rw_mutex_.lock_read().move_as_ok(); auto it = map_.find(key); if (it == map_.end()) { @@ -184,7 +184,7 @@ class BinlogKeyValue : public KeyValueSyncInterface { return it->second.first; } - void force_sync(Promise<> &&promise) override { + void force_sync(Promise<> &&promise) final { binlog_->force_sync(std::move(promise)); } @@ -192,7 +192,7 @@ class BinlogKeyValue : public KeyValueSyncInterface { binlog_->lazy_sync(std::move(promise)); } - std::unordered_map prefix_get(Slice prefix) override { + std::unordered_map prefix_get(Slice prefix) final { auto lock = rw_mutex_.lock_write().move_as_ok(); std::unordered_map res; for (const auto &kv : map_) { @@ -203,7 +203,7 @@ class BinlogKeyValue : public KeyValueSyncInterface { return res; } - std::unordered_map get_all() override { + std::unordered_map get_all() final { auto lock = rw_mutex_.lock_write().move_as_ok(); std::unordered_map res; for (const auto &kv : map_) { @@ -212,7 +212,7 @@ class BinlogKeyValue : public KeyValueSyncInterface { return res; } - void erase_by_prefix(Slice prefix) override { + void erase_by_prefix(Slice prefix) final { auto lock = rw_mutex_.lock_write().move_as_ok(); std::vector ids; for (auto it = map_.begin(); it != map_.end();) { diff --git a/tddb/td/db/SqliteKeyValueAsync.cpp b/tddb/td/db/SqliteKeyValueAsync.cpp index 716ab7dee..08a3056ce 100644 --- a/tddb/td/db/SqliteKeyValueAsync.cpp +++ b/tddb/td/db/SqliteKeyValueAsync.cpp @@ -23,19 +23,19 @@ class SqliteKeyValueAsync : public SqliteKeyValueAsyncInterface { explicit SqliteKeyValueAsync(std::shared_ptr kv_safe, int32 scheduler_id = -1) { impl_ = create_actor_on_scheduler("KV", scheduler_id, std::move(kv_safe)); } - void set(string key, string value, Promise<> promise) override { + void set(string key, string value, Promise<> promise) final { send_closure_later(impl_, &Impl::set, std::move(key), std::move(value), std::move(promise)); } - void erase(string key, Promise<> promise) override { + void erase(string key, Promise<> promise) final { send_closure_later(impl_, &Impl::erase, std::move(key), std::move(promise)); } - void erase_by_prefix(string key_prefix, Promise<> promise) override { + void erase_by_prefix(string key_prefix, Promise<> promise) final { send_closure_later(impl_, &Impl::erase_by_prefix, std::move(key_prefix), std::move(promise)); } - void get(string key, Promise promise) override { + void get(string key, Promise promise) final { send_closure_later(impl_, &Impl::get, std::move(key), std::move(promise)); } - void close(Promise<> promise) override { + void close(Promise<> promise) final { send_closure_later(impl_, &Impl::close, std::move(promise)); } @@ -137,11 +137,11 @@ class SqliteKeyValueAsync : public SqliteKeyValueAsyncInterface { buffer_promises_.clear(); } - void timeout_expired() override { + void timeout_expired() final { do_flush(false /*force*/); } - void start_up() override { + void start_up() final { kv_ = &kv_safe_->get(); } }; diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index b5a435553..0534c29af 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -86,14 +86,14 @@ class TQueueImpl : public TQueue { static constexpr size_t MAX_TOTAL_EVENT_LENGTH = 1 << 30; public: - void set_callback(unique_ptr callback) override { + void set_callback(unique_ptr callback) final { callback_ = std::move(callback); } - unique_ptr extract_callback() override { + unique_ptr extract_callback() final { return std::move(callback_); } - bool do_push(QueueId queue_id, RawEvent &&raw_event) override { + bool do_push(QueueId queue_id, RawEvent &&raw_event) final { CHECK(raw_event.event_id.is_valid()); // raw_event.data can be empty when replaying binlog if (raw_event.data.size() > MAX_EVENT_LENGTH) { @@ -132,7 +132,7 @@ class TQueueImpl : public TQueue { return true; } - Result push(QueueId queue_id, string data, int32 expires_at, int64 extra, EventId hint_new_id) override { + Result push(QueueId queue_id, string data, int32 expires_at, int64 extra, EventId hint_new_id) final { if (data.empty()) { return Status::Error("Data is empty"); } @@ -181,7 +181,7 @@ class TQueueImpl : public TQueue { return event_id; } - EventId get_head(QueueId queue_id) const override { + EventId get_head(QueueId queue_id) const final { auto it = queues_.find(queue_id); if (it == queues_.end()) { return EventId(); @@ -189,7 +189,7 @@ class TQueueImpl : public TQueue { return get_queue_head(it->second); } - EventId get_tail(QueueId queue_id) const override { + EventId get_tail(QueueId queue_id) const final { auto it = queues_.find(queue_id); if (it == queues_.end()) { return EventId(); @@ -198,7 +198,7 @@ class TQueueImpl : public TQueue { return q.tail_id; } - void forget(QueueId queue_id, EventId event_id) override { + void forget(QueueId queue_id, EventId event_id) final { auto q_it = queues_.find(queue_id); if (q_it == queues_.end()) { return; @@ -212,7 +212,7 @@ class TQueueImpl : public TQueue { } Result get(QueueId queue_id, EventId from_id, bool forget_previous, int32 unix_time_now, - MutableSpan &result_events) override { + MutableSpan &result_events) final { auto it = queues_.find(queue_id); if (it == queues_.end()) { result_events.truncate(0); @@ -231,7 +231,7 @@ class TQueueImpl : public TQueue { return get_size(q); } - int64 run_gc(int32 unix_time_now) override { + int64 run_gc(int32 unix_time_now) final { int64 deleted_events = 0; while (!queue_gc_at_.empty()) { auto it = queue_gc_at_.begin(); @@ -263,7 +263,7 @@ class TQueueImpl : public TQueue { return deleted_events; } - size_t get_size(QueueId queue_id) const override { + size_t get_size(QueueId queue_id) const final { auto it = queues_.find(queue_id); if (it == queues_.end()) { return 0; @@ -271,7 +271,7 @@ class TQueueImpl : public TQueue { return get_size(it->second); } - void close(Promise<> promise) override { + void close(Promise<> promise) final { if (callback_ != nullptr) { callback_->close(std::move(promise)); callback_ = nullptr; @@ -416,13 +416,13 @@ struct TQueueLogEvent : public Storer { } } - size_t size() const override { + size_t size() const final { TlStorerCalcLength storer; store(storer); return storer.get_length(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { TlStorerUnsafe storer(ptr); store(storer); return static_cast(storer.get_buf() - ptr); diff --git a/tddb/td/db/TQueue.h b/tddb/td/db/TQueue.h index 9fea1fa31..76284af63 100644 --- a/tddb/td/db/TQueue.h +++ b/tddb/td/db/TQueue.h @@ -124,14 +124,14 @@ struct BinlogEvent; template class TQueueBinlog : public TQueue::StorageCallback { public: - uint64 push(QueueId queue_id, const RawEvent &event) override; - void pop(uint64 log_event_id) override; + uint64 push(QueueId queue_id, const RawEvent &event) final; + void pop(uint64 log_event_id) final; Status replay(const BinlogEvent &binlog_event, TQueue &q) const TD_WARN_UNUSED_RESULT; void set_binlog(std::shared_ptr binlog) { binlog_ = std::move(binlog); } - virtual void close(Promise<> promise) override; + virtual void close(Promise<> promise) final; private: std::shared_ptr binlog_; @@ -140,10 +140,10 @@ class TQueueBinlog : public TQueue::StorageCallback { class TQueueMemoryStorage : public TQueue::StorageCallback { public: - uint64 push(QueueId queue_id, const RawEvent &event) override; - void pop(uint64 log_event_id) override; + uint64 push(QueueId queue_id, const RawEvent &event) final; + void pop(uint64 log_event_id) final; void replay(TQueue &q) const; - virtual void close(Promise<> promise) override; + virtual void close(Promise<> promise) final; private: uint64 next_log_event_id_{1}; diff --git a/tddb/td/db/binlog/ConcurrentBinlog.cpp b/tddb/td/db/binlog/ConcurrentBinlog.cpp index 40814c4f2..7c3513172 100644 --- a/tddb/td/db/binlog/ConcurrentBinlog.cpp +++ b/tddb/td/db/binlog/ConcurrentBinlog.cpp @@ -142,7 +142,7 @@ class BinlogActor : public Actor { } } - void timeout_expired() override { + void timeout_expired() final { bool need_sync = lazy_sync_flag_ || force_sync_flag_; lazy_sync_flag_ = false; force_sync_flag_ = false; diff --git a/tddb/td/db/binlog/ConcurrentBinlog.h b/tddb/td/db/binlog/ConcurrentBinlog.h index 4ea8828a2..961a83b98 100644 --- a/tddb/td/db/binlog/ConcurrentBinlog.h +++ b/tddb/td/db/binlog/ConcurrentBinlog.h @@ -39,16 +39,16 @@ class ConcurrentBinlog : public BinlogInterface { ConcurrentBinlog &operator=(const ConcurrentBinlog &other) = delete; ConcurrentBinlog(ConcurrentBinlog &&other) = delete; ConcurrentBinlog &operator=(ConcurrentBinlog &&other) = delete; - ~ConcurrentBinlog() override; + ~ConcurrentBinlog() final; - void force_sync(Promise<> promise) override; - void force_flush() override; - void change_key(DbKey db_key, Promise<> promise) override; + void force_sync(Promise<> promise) final; + void force_flush() final; + void change_key(DbKey db_key, Promise<> promise) final; - uint64 next_id() override { + uint64 next_id() final { return last_id_.fetch_add(1, std::memory_order_relaxed); } - uint64 next_id(int32 shift) override { + uint64 next_id(int32 shift) final { return last_id_.fetch_add(shift, std::memory_order_relaxed); } @@ -58,9 +58,9 @@ class ConcurrentBinlog : public BinlogInterface { private: void init_impl(unique_ptr binlog, int scheduler_id); - void close_impl(Promise<> promise) override; - void close_and_destroy_impl(Promise<> promise) override; - void add_raw_event_impl(uint64 id, BufferSlice &&raw_event, Promise<> promise, BinlogDebugInfo info) override; + void close_impl(Promise<> promise) final; + void close_and_destroy_impl(Promise<> promise) final; + void add_raw_event_impl(uint64 id, BufferSlice &&raw_event, Promise<> promise, BinlogDebugInfo info) final; ActorOwn binlog_actor_; string path_; diff --git a/tdnet/td/net/GetHostByNameActor.cpp b/tdnet/td/net/GetHostByNameActor.cpp index 371aaefc5..c1f944c31 100644 --- a/tdnet/td/net/GetHostByNameActor.cpp +++ b/tdnet/td/net/GetHostByNameActor.cpp @@ -34,7 +34,7 @@ class GoogleDnsResolver : public Actor { ActorOwn wget_; double begin_time_ = 0; - void start_up() override { + void start_up() final { auto r_address = IPAddress::get_ip_address(host_); if (r_address.is_ok()) { promise_.set_value(r_address.move_as_ok()); @@ -97,7 +97,7 @@ class NativeDnsResolver : public Actor { bool prefer_ipv6_; Promise promise_; - void start_up() override { + void start_up() final { IPAddress ip; auto begin_time = Time::now(); auto status = ip.init_host_port(host_, 0, prefer_ipv6_); diff --git a/tdnet/td/net/HttpChunkedByteFlow.h b/tdnet/td/net/HttpChunkedByteFlow.h index 748a9da5b..af3d208e4 100644 --- a/tdnet/td/net/HttpChunkedByteFlow.h +++ b/tdnet/td/net/HttpChunkedByteFlow.h @@ -14,7 +14,7 @@ namespace td { class HttpChunkedByteFlow final : public ByteFlowBase { public: - bool loop() override; + bool loop() final; private: static constexpr int MAX_CHUNK_SIZE = 15 << 20; // some reasonable limit diff --git a/tdnet/td/net/HttpConnectionBase.h b/tdnet/td/net/HttpConnectionBase.h index 57e8ab1c0..43e7ec676 100644 --- a/tdnet/td/net/HttpConnectionBase.h +++ b/tdnet/td/net/HttpConnectionBase.h @@ -61,13 +61,13 @@ class HttpConnectionBase : public Actor { void live_event(); - void start_up() override; - void tear_down() override; - void timeout_expired() override; - void loop() override; + void start_up() final; + void tear_down() final; + void timeout_expired() final; + void loop() final; - void on_start_migrate(int32 sched_id) override; - void on_finish_migrate() override; + void on_start_migrate(int32 sched_id) final; + void on_finish_migrate() final; virtual void on_query(unique_ptr query) = 0; virtual void on_error(Status error) = 0; diff --git a/tdnet/td/net/HttpContentLengthByteFlow.h b/tdnet/td/net/HttpContentLengthByteFlow.h index 409b083ea..272374f08 100644 --- a/tdnet/td/net/HttpContentLengthByteFlow.h +++ b/tdnet/td/net/HttpContentLengthByteFlow.h @@ -15,7 +15,7 @@ class HttpContentLengthByteFlow final : public ByteFlowBase { HttpContentLengthByteFlow() = default; explicit HttpContentLengthByteFlow(size_t len) : len_(len) { } - bool loop() override; + bool loop() final; private: static constexpr size_t MIN_UPDATE_SIZE = 1 << 14; diff --git a/tdnet/td/net/HttpInboundConnection.h b/tdnet/td/net/HttpInboundConnection.h index ca885e01e..4d5a387b3 100644 --- a/tdnet/td/net/HttpInboundConnection.h +++ b/tdnet/td/net/HttpInboundConnection.h @@ -31,9 +31,9 @@ class HttpInboundConnection final : public detail::HttpConnectionBase { ActorShared callback, int32 slow_scheduler_id = -1); private: - void on_query(unique_ptr query) override; - void on_error(Status error) override; - void hangup() override { + void on_query(unique_ptr query) final; + void on_error(Status error) final; + void hangup() final { callback_.release(); stop(); } diff --git a/tdnet/td/net/HttpOutboundConnection.h b/tdnet/td/net/HttpOutboundConnection.h index e2a958dc4..cfefc12bb 100644 --- a/tdnet/td/net/HttpOutboundConnection.h +++ b/tdnet/td/net/HttpOutboundConnection.h @@ -36,9 +36,9 @@ class HttpOutboundConnection final : public detail::HttpConnectionBase { // void write_error(Status error); private: - void on_query(unique_ptr query) override; - void on_error(Status error) override; - void hangup() override { + void on_query(unique_ptr query) final; + void on_error(Status error) final; + void hangup() final { callback_.release(); HttpConnectionBase::hangup(); } diff --git a/tdnet/td/net/HttpProxy.h b/tdnet/td/net/HttpProxy.h index 89f64c784..613dfc513 100644 --- a/tdnet/td/net/HttpProxy.h +++ b/tdnet/td/net/HttpProxy.h @@ -22,7 +22,7 @@ class HttpProxy : public TransparentProxy { void send_connect(); Status wait_connect_response(); - Status loop_impl() override; + Status loop_impl() final; }; } // namespace td diff --git a/tdnet/td/net/Socks5.h b/tdnet/td/net/Socks5.h index 9f79deaea..97531011f 100644 --- a/tdnet/td/net/Socks5.h +++ b/tdnet/td/net/Socks5.h @@ -33,7 +33,7 @@ class Socks5 : public TransparentProxy { void send_ip_address(); Status wait_ip_address_response(); - Status loop_impl() override; + Status loop_impl() final; }; } // namespace td diff --git a/tdnet/td/net/SslStream.cpp b/tdnet/td/net/SslStream.cpp index 94eb90858..8d43c43a0 100644 --- a/tdnet/td/net/SslStream.cpp +++ b/tdnet/td/net/SslStream.cpp @@ -388,7 +388,7 @@ class SslStreamImpl { public: explicit SslReadByteFlow(SslStreamImpl *stream) : stream_(stream) { } - bool loop() override { + bool loop() final { auto to_read = output_.prepare_append(); auto r_size = stream_->read(to_read); if (r_size.is_error()) { @@ -415,7 +415,7 @@ class SslStreamImpl { public: explicit SslWriteByteFlow(SslStreamImpl *stream) : stream_(stream) { } - bool loop() override { + bool loop() final { auto to_write = input_->prepare_read(); auto r_size = stream_->write(to_write); if (r_size.is_error()) { diff --git a/tdnet/td/net/TcpListener.h b/tdnet/td/net/TcpListener.h index ee46c500b..eee2a74d8 100644 --- a/tdnet/td/net/TcpListener.h +++ b/tdnet/td/net/TcpListener.h @@ -22,16 +22,16 @@ class TcpListener final : public Actor { }; TcpListener(int port, ActorShared callback, Slice server_address = Slice("0.0.0.0")); - void hangup() override; + void hangup() final; private: int port_; ServerSocketFd server_fd_; ActorShared callback_; const string server_address_; - void start_up() override; - void tear_down() override; - void loop() override; + void start_up() final; + void tear_down() final; + void loop() final; }; } // namespace td diff --git a/tdnet/td/net/Wget.h b/tdnet/td/net/Wget.h index 8ffe77d23..4f22a085e 100644 --- a/tdnet/td/net/Wget.h +++ b/tdnet/td/net/Wget.h @@ -29,15 +29,15 @@ class Wget : public HttpOutboundConnection::Callback { private: Status try_init(); - void loop() override; - void handle(unique_ptr result) override; - void on_connection_error(Status error) override; + void loop() final; + void handle(unique_ptr result) final; + void on_connection_error(Status error) final; void on_ok(unique_ptr http_query_ptr); void on_error(Status error); - void tear_down() override; - void start_up() override; - void timeout_expired() override; + void tear_down() final; + void start_up() final; + void timeout_expired() final; Promise> promise_; ActorOwn connection_; diff --git a/tdutils/td/utils/AesCtrByteFlow.h b/tdutils/td/utils/AesCtrByteFlow.h index e40c6d5a9..f8143e10f 100644 --- a/tdutils/td/utils/AesCtrByteFlow.h +++ b/tdutils/td/utils/AesCtrByteFlow.h @@ -27,7 +27,7 @@ class AesCtrByteFlow : public ByteFlowInplaceBase { AesCtrState move_aes_ctr_state() { return std::move(state_); } - bool loop() override { + bool loop() final { bool result = false; auto ready = input_->prepare_read(); if (!ready.empty()) { diff --git a/tdutils/td/utils/Destructor.h b/tdutils/td/utils/Destructor.h index 5d017e8d3..81df89adf 100644 --- a/tdutils/td/utils/Destructor.h +++ b/tdutils/td/utils/Destructor.h @@ -32,7 +32,7 @@ class LambdaDestructor : public Destructor { LambdaDestructor &operator=(const LambdaDestructor &other) = delete; LambdaDestructor(LambdaDestructor &&other) = default; LambdaDestructor &operator=(LambdaDestructor &&other) = default; - ~LambdaDestructor() override { + ~LambdaDestructor() final { f_(); } diff --git a/tdutils/td/utils/GzipByteFlow.h b/tdutils/td/utils/GzipByteFlow.h index dfcc0e9fa..91e979ff2 100644 --- a/tdutils/td/utils/GzipByteFlow.h +++ b/tdutils/td/utils/GzipByteFlow.h @@ -34,7 +34,7 @@ class GzipByteFlow final : public ByteFlowBase { max_output_size_ = max_output_size; } - bool loop() override; + bool loop() final; private: Gzip gzip_; diff --git a/tdutils/td/utils/JsonBuilder.h b/tdutils/td/utils/JsonBuilder.h index 5899ba005..efd30c7f9 100644 --- a/tdutils/td/utils/JsonBuilder.h +++ b/tdutils/td/utils/JsonBuilder.h @@ -700,7 +700,7 @@ class VirtuallyJsonableInt : public VirtuallyJsonable { public: explicit VirtuallyJsonableInt(int32 value) : value_(value) { } - void store(JsonValueScope *scope) const override { + void store(JsonValueScope *scope) const final { *scope << JsonInt(value_); } @@ -712,7 +712,7 @@ class VirtuallyJsonableLong : public VirtuallyJsonable { public: explicit VirtuallyJsonableLong(int64 value) : value_(value) { } - void store(JsonValueScope *scope) const override { + void store(JsonValueScope *scope) const final { *scope << JsonLong(value_); } @@ -724,7 +724,7 @@ class VirtuallyJsonableString : public VirtuallyJsonable { public: explicit VirtuallyJsonableString(Slice value) : value_(value) { } - void store(JsonValueScope *scope) const override { + void store(JsonValueScope *scope) const final { *scope << JsonString(value_); } diff --git a/tdutils/td/utils/Observer.h b/tdutils/td/utils/Observer.h index c2e33d4a8..9366d9a80 100644 --- a/tdutils/td/utils/Observer.h +++ b/tdutils/td/utils/Observer.h @@ -28,7 +28,7 @@ class Observer : ObserverBase { explicit Observer(unique_ptr &&ptr) : observer_ptr_(std::move(ptr)) { } - void notify() override { + void notify() final { if (observer_ptr_) { observer_ptr_->notify(); } diff --git a/tdutils/td/utils/Storer.h b/tdutils/td/utils/Storer.h index 9a16f7c94..47c53d15b 100644 --- a/tdutils/td/utils/Storer.h +++ b/tdutils/td/utils/Storer.h @@ -23,10 +23,10 @@ class SliceStorer : public Storer { public: explicit SliceStorer(Slice slice) : slice(slice) { } - size_t size() const override { + size_t size() const final { return slice.size(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { std::memcpy(ptr, slice.ubegin(), slice.size()); return slice.size(); } @@ -44,11 +44,11 @@ class ConcatStorer : public Storer { ConcatStorer(const Storer &a, const Storer &b) : a_(a), b_(b) { } - size_t size() const override { + size_t size() const final { return a_.size() + b_.size(); } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { uint8 *ptr_save = ptr; ptr += a_.store(ptr); ptr += b_.store(ptr); @@ -65,13 +65,13 @@ class DefaultStorer : public Storer { public: explicit DefaultStorer(const T &object) : object_(object) { } - size_t size() const override { + size_t size() const final { if (size_ == std::numeric_limits::max()) { size_ = tl_calc_length(object_); } return size_; } - size_t store(uint8 *ptr) const override { + size_t store(uint8 *ptr) const final { return tl_store_unsafe(object_, ptr); } diff --git a/tdutils/td/utils/benchmark.h b/tdutils/td/utils/benchmark.h index b713b79ce..1daf0ab48 100644 --- a/tdutils/td/utils/benchmark.h +++ b/tdutils/td/utils/benchmark.h @@ -15,14 +15,14 @@ #include #include -#define BENCH(name, desc) \ - class name##Bench : public ::td::Benchmark { \ - public: \ - std::string get_description() const override { \ - return (desc); \ - } \ - void run(int n) override; \ - }; \ +#define BENCH(name, desc) \ + class name##Bench : public ::td::Benchmark { \ + public: \ + std::string get_description() const final { \ + return (desc); \ + } \ + void run(int n) final; \ + }; \ void name##Bench::run(int n) namespace td { diff --git a/tdutils/td/utils/port/ServerSocketFd.cpp b/tdutils/td/utils/port/ServerSocketFd.cpp index dc546a7d4..ff908a8e9 100644 --- a/tdutils/td/utils/port/ServerSocketFd.cpp +++ b/tdutils/td/utils/port/ServerSocketFd.cpp @@ -172,7 +172,7 @@ class ServerSocketFdImpl : private Iocp::Callback { get_poll_info().add_flags_from_poll(PollFlags::Error()); } - void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) override { + void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) final { // called from other thread if (dec_refcnt() || close_flag_) { VLOG(fd) << "Ignore IOCP (server socket is closing)"; diff --git a/tdutils/td/utils/port/SocketFd.cpp b/tdutils/td/utils/port/SocketFd.cpp index 39e63be7e..ed00c1f4f 100644 --- a/tdutils/td/utils/port/SocketFd.cpp +++ b/tdutils/td/utils/port/SocketFd.cpp @@ -254,7 +254,7 @@ class SocketFdImpl : private Iocp::Callback { } } - void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) override { + void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) final { // called from other thread if (dec_refcnt() || close_flag_) { VLOG(fd) << "Ignore IOCP (socket is closing)"; diff --git a/tdutils/td/utils/port/StdStreams.cpp b/tdutils/td/utils/port/StdStreams.cpp index 681d4b564..09396fffa 100644 --- a/tdutils/td/utils/port/StdStreams.cpp +++ b/tdutils/td/utils/port/StdStreams.cpp @@ -138,7 +138,7 @@ class BufferedStdinImpl : public Iocp::Callback { dec_refcnt(); } } - void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) override { + void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) final { info_.add_flags_from_poll(PollFlags::Read()); dec_refcnt(); } diff --git a/tdutils/td/utils/port/UdpSocketFd.cpp b/tdutils/td/utils/port/UdpSocketFd.cpp index 32a4b57c8..aac3d504c 100644 --- a/tdutils/td/utils/port/UdpSocketFd.cpp +++ b/tdutils/td/utils/port/UdpSocketFd.cpp @@ -240,7 +240,7 @@ class UdpSocketFdImpl : private Iocp::Callback { } } - void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) override { + void on_iocp(Result r_size, WSAOVERLAPPED *overlapped) final { // called from other thread if (dec_refcnt() || close_flag_) { VLOG(fd) << "Ignore IOCP (UDP socket is closing)"; diff --git a/tdutils/td/utils/port/detail/Epoll.h b/tdutils/td/utils/port/detail/Epoll.h index db66f437d..50aa16761 100644 --- a/tdutils/td/utils/port/detail/Epoll.h +++ b/tdutils/td/utils/port/detail/Epoll.h @@ -29,19 +29,19 @@ class Epoll final : public PollBase { Epoll &operator=(const Epoll &) = delete; Epoll(Epoll &&) = delete; Epoll &operator=(Epoll &&) = delete; - ~Epoll() override = default; + ~Epoll() final = default; - void init() override; + void init() final; - void clear() override; + void clear() final; - void subscribe(PollableFd fd, PollFlags flags) override; + void subscribe(PollableFd fd, PollFlags flags) final; - void unsubscribe(PollableFdRef fd) override; + void unsubscribe(PollableFdRef fd) final; - void unsubscribe_before_close(PollableFdRef fd) override; + void unsubscribe_before_close(PollableFdRef fd) final; - void run(int timeout_ms) override; + void run(int timeout_ms) final; static bool is_edge_triggered() { return true; diff --git a/tdutils/td/utils/port/detail/EventFdBsd.h b/tdutils/td/utils/port/detail/EventFdBsd.h index 3e4cdd5d5..5d03f6c27 100644 --- a/tdutils/td/utils/port/detail/EventFdBsd.h +++ b/tdutils/td/utils/port/detail/EventFdBsd.h @@ -26,21 +26,21 @@ class EventFdBsd final : public EventFdBase { public: EventFdBsd() = default; - void init() override; + void init() final; - bool empty() override; + bool empty() final; - void close() override; + void close() final; - Status get_pending_error() override TD_WARN_UNUSED_RESULT; + Status get_pending_error() final TD_WARN_UNUSED_RESULT; - PollableFdInfo &get_poll_info() override; + PollableFdInfo &get_poll_info() final; - void release() override; + void release() final; - void acquire() override; + void acquire() final; - void wait(int timeout_ms) override; + void wait(int timeout_ms) final; }; } // namespace detail diff --git a/tdutils/td/utils/port/detail/EventFdLinux.h b/tdutils/td/utils/port/detail/EventFdLinux.h index 7775f67c7..7e482caa3 100644 --- a/tdutils/td/utils/port/detail/EventFdLinux.h +++ b/tdutils/td/utils/port/detail/EventFdLinux.h @@ -28,21 +28,21 @@ class EventFdLinux final : public EventFdBase { EventFdLinux &operator=(EventFdLinux &&); ~EventFdLinux(); - void init() override; + void init() final; - bool empty() override; + bool empty() final; - void close() override; + void close() final; - Status get_pending_error() override TD_WARN_UNUSED_RESULT; + Status get_pending_error() final TD_WARN_UNUSED_RESULT; - PollableFdInfo &get_poll_info() override; + PollableFdInfo &get_poll_info() final; - void release() override; + void release() final; - void acquire() override; + void acquire() final; - void wait(int timeout_ms) override; + void wait(int timeout_ms) final; }; } // namespace detail diff --git a/tdutils/td/utils/port/detail/EventFdWindows.h b/tdutils/td/utils/port/detail/EventFdWindows.h index c174edd1d..59b273da8 100644 --- a/tdutils/td/utils/port/detail/EventFdWindows.h +++ b/tdutils/td/utils/port/detail/EventFdWindows.h @@ -25,21 +25,21 @@ class EventFdWindows final : public EventFdBase { public: EventFdWindows() = default; - void init() override; + void init() final; - bool empty() override; + bool empty() final; - void close() override; + void close() final; - Status get_pending_error() override TD_WARN_UNUSED_RESULT; + Status get_pending_error() final TD_WARN_UNUSED_RESULT; - PollableFdInfo &get_poll_info() override; + PollableFdInfo &get_poll_info() final; - void release() override; + void release() final; - void acquire() override; + void acquire() final; - void wait(int timeout_ms) override; + void wait(int timeout_ms) final; }; } // namespace detail diff --git a/tdutils/td/utils/port/detail/KQueue.h b/tdutils/td/utils/port/detail/KQueue.h index c4b23ed97..5a6f74a1a 100644 --- a/tdutils/td/utils/port/detail/KQueue.h +++ b/tdutils/td/utils/port/detail/KQueue.h @@ -33,19 +33,19 @@ class KQueue final : public PollBase { KQueue &operator=(const KQueue &) = delete; KQueue(KQueue &&) = delete; KQueue &operator=(KQueue &&) = delete; - ~KQueue() override; + ~KQueue() final; - void init() override; + void init() final; - void clear() override; + void clear() final; - void subscribe(PollableFd fd, PollFlags flags) override; + void subscribe(PollableFd fd, PollFlags flags) final; - void unsubscribe(PollableFdRef fd) override; + void unsubscribe(PollableFdRef fd) final; - void unsubscribe_before_close(PollableFdRef fd) override; + void unsubscribe_before_close(PollableFdRef fd) final; - void run(int timeout_ms) override; + void run(int timeout_ms) final; static bool is_edge_triggered() { return true; diff --git a/tdutils/td/utils/port/detail/Poll.h b/tdutils/td/utils/port/detail/Poll.h index b6c28e1eb..7f1bc1dbb 100644 --- a/tdutils/td/utils/port/detail/Poll.h +++ b/tdutils/td/utils/port/detail/Poll.h @@ -27,19 +27,19 @@ class Poll final : public PollBase { Poll &operator=(const Poll &) = delete; Poll(Poll &&) = delete; Poll &operator=(Poll &&) = delete; - ~Poll() override = default; + ~Poll() final = default; - void init() override; + void init() final; - void clear() override; + void clear() final; - void subscribe(PollableFd fd, PollFlags flags) override; + void subscribe(PollableFd fd, PollFlags flags) final; - void unsubscribe(PollableFdRef fd) override; + void unsubscribe(PollableFdRef fd) final; - void unsubscribe_before_close(PollableFdRef fd) override; + void unsubscribe_before_close(PollableFdRef fd) final; - void run(int timeout_ms) override; + void run(int timeout_ms) final; static bool is_edge_triggered() { return false; diff --git a/tdutils/td/utils/port/detail/Select.h b/tdutils/td/utils/port/detail/Select.h index 48734cbf8..b9d79b6b4 100644 --- a/tdutils/td/utils/port/detail/Select.h +++ b/tdutils/td/utils/port/detail/Select.h @@ -27,19 +27,19 @@ class Select final : public PollBase { Select &operator=(const Select &) = delete; Select(Select &&) = delete; Select &operator=(Select &&) = delete; - ~Select() override = default; + ~Select() final = default; - void init() override; + void init() final; - void clear() override; + void clear() final; - void subscribe(PollableFd fd, PollFlags flags) override; + void subscribe(PollableFd fd, PollFlags flags) final; - void unsubscribe(PollableFdRef fd) override; + void unsubscribe(PollableFdRef fd) final; - void unsubscribe_before_close(PollableFdRef fd) override; + void unsubscribe_before_close(PollableFdRef fd) final; - void run(int timeout_ms) override; + void run(int timeout_ms) final; static bool is_edge_triggered() { return false; diff --git a/tdutils/td/utils/port/detail/WineventPoll.h b/tdutils/td/utils/port/detail/WineventPoll.h index 580996a66..e8b28ddeb 100644 --- a/tdutils/td/utils/port/detail/WineventPoll.h +++ b/tdutils/td/utils/port/detail/WineventPoll.h @@ -25,19 +25,19 @@ class WineventPoll final : public PollBase { WineventPoll &operator=(const WineventPoll &) = delete; WineventPoll(WineventPoll &&) = delete; WineventPoll &operator=(WineventPoll &&) = delete; - ~WineventPoll() override = default; + ~WineventPoll() final = default; - void init() override; + void init() final; - void clear() override; + void clear() final; - void subscribe(PollableFd fd, PollFlags flags) override; + void subscribe(PollableFd fd, PollFlags flags) final; - void unsubscribe(PollableFdRef fd) override; + void unsubscribe(PollableFdRef fd) final; - void unsubscribe_before_close(PollableFdRef fd) override; + void unsubscribe_before_close(PollableFdRef fd) final; - void run(int timeout_ms) override; + void run(int timeout_ms) final; static bool is_edge_triggered() { return true; diff --git a/tdutils/td/utils/tests.cpp b/tdutils/td/utils/tests.cpp index 0e79b2629..380e6d464 100644 --- a/tdutils/td/utils/tests.cpp +++ b/tdutils/td/utils/tests.cpp @@ -72,7 +72,7 @@ class RegressionTesterImpl : public RegressionTester { mkdir(db_cache_dir_).ensure(); } - Status verify_test(Slice name, Slice result) override { + Status verify_test(Slice name, Slice result) final { #if TD_HAVE_OPENSSL auto hash = PSTRING() << format::as_hex_dump<0>(Slice(sha256(result))); #else @@ -99,7 +99,7 @@ class RegressionTesterImpl : public RegressionTester { return Status::OK(); } - void save_db() override { + void save_db() final { if (!is_dirty_) { return; } diff --git a/tdutils/td/utils/tests.h b/tdutils/td/utils/tests.h index dd9082259..00137d4b6 100644 --- a/tdutils/td/utils/tests.h +++ b/tdutils/td/utils/tests.h @@ -114,8 +114,8 @@ class TestsRunner : public TestContext { State state_; unique_ptr regression_tester_; - Slice name() override; - Status verify(Slice data) override; + Slice name() final; + Status verify(Slice data) final; }; template diff --git a/tdutils/test/ConcurrentHashMap.cpp b/tdutils/test/ConcurrentHashMap.cpp index b7fa18358..aa9351d53 100644 --- a/tdutils/test/ConcurrentHashMap.cpp +++ b/tdutils/test/ConcurrentHashMap.cpp @@ -193,16 +193,16 @@ class HashMapBenchmark : public td::Benchmark { public: explicit HashMapBenchmark(size_t threads_n) : threads_n(threads_n) { } - std::string get_description() const override { + std::string get_description() const final { return HashMap::get_name(); } - void start_up_n(int n) override { + void start_up_n(int n) final { n *= static_cast(threads_n); n_ = n; hash_map = td::make_unique(n * 2); } - void run(int n) override { + void run(int n) final { n = n_; std::vector threads; @@ -222,7 +222,7 @@ class HashMapBenchmark : public td::Benchmark { } } - void tear_down() override { + void tear_down() final { for (int i = 0; i < n_; i++) { auto x = td::narrow_cast((i + 1) * MUL % n_) + 3; auto y = td::narrow_cast(i + 2); diff --git a/tdutils/test/crypto.cpp b/tdutils/test/crypto.cpp index 0c8681639..cab285f4f 100644 --- a/tdutils/test/crypto.cpp +++ b/tdutils/test/crypto.cpp @@ -366,10 +366,10 @@ TEST(Crypto, crc32c_benchmark) { public: explicit Crc32cExtendBenchmark(size_t chunk_size) : chunk_size_(chunk_size) { } - td::string get_description() const override { + td::string get_description() const final { return PSTRING() << "Crc32c with chunk_size=" << chunk_size_; } - void start_up_n(int n) override { + void start_up_n(int n) final { if (n > (1 << 20)) { cnt_ = n / (1 << 20); n = (1 << 20); @@ -378,7 +378,7 @@ TEST(Crypto, crc32c_benchmark) { } data_ = td::string(n, 'a'); } - void run(int n) override { + void run(int n) final { td::uint32 res = 0; for (int i = 0; i < cnt_; i++) { td::Slice data(data_); diff --git a/tdutils/test/log.cpp b/tdutils/test/log.cpp index de15185f3..349f63db7 100644 --- a/tdutils/test/log.cpp +++ b/tdutils/test/log.cpp @@ -34,21 +34,21 @@ class LogBenchmark : public td::Benchmark { , test_full_logging_(test_full_logging) , creator_(std::move(creator)) { } - std::string get_description() const override { + std::string get_description() const final { return PSTRING() << name_ << " " << (test_full_logging_ ? "ERROR" : "PLAIN") << " " << td::tag("threads_n", threads_n_); } - void start_up() override { + void start_up() final { log_ = creator_(); threads_.resize(threads_n_); } - void tear_down() override { + void tear_down() final { for (auto path : log_->get_file_paths()) { td::unlink(path).ignore(); } log_.reset(); } - void run(int n) override { + void run(int n) final { auto old_log_interface = td::log_interface; td::log_interface = log_.get(); diff --git a/test/db.cpp b/test/db.cpp index 0f813dfc6..063c8c7b7 100644 --- a/test/db.cpp +++ b/test/db.cpp @@ -560,7 +560,7 @@ TEST(DB, persistent_key_value) { std::vector *res) : parent_(std::move(parent)), kv_(std::move(kv)), queries_(queries), res_(res) { } - void loop() override { + void loop() final { for (auto q : *queries_) { kv_->do_query(q); res_->push_back(q); @@ -580,7 +580,7 @@ TEST(DB, persistent_key_value) { : threads_n_(threads_n), queries_(queries), res_(res), ref_cnt_(threads_n) { } - void start_up() override { + void start_up() final { LOG(INFO) << "Start up"; kv_->impl().init("test_pmc").ensure(); for (int i = 0; i < threads_n_; i++) { @@ -589,11 +589,11 @@ TEST(DB, persistent_key_value) { } } - void tear_down() override { + void tear_down() final { LOG(INFO) << "Tear down"; // kv_->impl().close(); } - void hangup_shared() override { + void hangup_shared() final { LOG(INFO) << "Hang up"; ref_cnt_--; if (ref_cnt_ == 0) { @@ -602,7 +602,7 @@ TEST(DB, persistent_key_value) { stop(); } } - void hangup() override { + void hangup() final { LOG(ERROR) << "BAD HANGUP"; } diff --git a/test/mtproto.cpp b/test/mtproto.cpp index 94e2f5331..5c10e760e 100644 --- a/test/mtproto.cpp +++ b/test/mtproto.cpp @@ -207,7 +207,7 @@ class TestPingActor : public Actor { Status *result_; bool is_inited_ = false; - void start_up() override { + void start_up() final { auto r_socket = SocketFd::open(ip_address_); if (r_socket.is_error()) { LOG(ERROR) << "Failed to open socket: " << r_socket.error(); @@ -225,14 +225,14 @@ class TestPingActor : public Actor { set_timeout_in(10); yield(); } - void tear_down() override { + void tear_down() final { if (is_inited_) { Scheduler::unsubscribe_before_close(ping_connection_->get_poll_info().get_pollable_fd_ref()); } Scheduler::instance()->finish(); } - void loop() override { + void loop() final { auto status = ping_connection_->flush(); if (status.is_error()) { *result_ = std::move(status); @@ -244,7 +244,7 @@ class TestPingActor : public Actor { } } - void timeout_expired() override { + void timeout_expired() final { *result_ = Status::Error("Timeout expired"); stop(); } @@ -295,10 +295,10 @@ RegisterTest mtproto_ping("Mtproto_ping"); class HandshakeContext : public mtproto::AuthKeyHandshakeContext { public: - DhCallback *get_dh_callback() override { + DhCallback *get_dh_callback() final { return nullptr; } - PublicRsaKeyInterface *get_public_rsa_key_interface() override { + PublicRsaKeyInterface *get_public_rsa_key_interface() final { return &public_rsa_key; } @@ -321,13 +321,13 @@ class HandshakeTestActor : public Actor { Status status_; bool wait_for_result_ = false; - void tear_down() override { + void tear_down() final { if (raw_connection_) { raw_connection_->close(); } finish(Status::Error("Interrupted")); } - void loop() override { + void loop() final { if (!wait_for_raw_connection_ && !raw_connection_) { auto ip_address = get_default_ip_address(); auto r_socket = SocketFd::open(ip_address); @@ -435,7 +435,7 @@ RegisterTest mtproto_handshake("Mtproto_handshake"); class Socks5TestActor : public Actor { public: - void start_up() override { + void start_up() final { auto promise = PromiseCreator::lambda([actor_id = actor_id(this)](Result res) { send_closure(actor_id, &Socks5TestActor::on_result, std::move(res), false); }); @@ -444,10 +444,10 @@ class Socks5TestActor : public Actor { public: explicit Callback(Promise promise) : promise_(std::move(promise)) { } - void set_result(Result result) override { + void set_result(Result result) final { promise_.set_result(std::move(result)); } - void on_connected() override { + void on_connected() final { } private: @@ -533,7 +533,7 @@ class FastPingTestActor : public Actor { ActorOwn<> fast_ping_; int iteration_{0}; - void start_up() override { + void start_up() final { // Run handshake to create key and salt auto ip_address = get_default_ip_address(); auto r_socket = SocketFd::open(ip_address); @@ -588,7 +588,7 @@ class FastPingTestActor : public Actor { loop(); } - void loop() override { + void loop() final { if (handshake_ && connection_) { LOG(INFO) << "Iteration " << iteration_; if (iteration_ == 6) { @@ -618,7 +618,7 @@ class FastPingTestActor : public Actor { } } - void tear_down() override { + void tear_down() final { Scheduler::instance()->finish(); } }; @@ -671,10 +671,10 @@ TEST(Mtproto, TlsTransport) { { auto guard = sched.get_main_guard(); class RunTest : public Actor { - void start_up() override { + void start_up() final { class Callback : public TransparentProxy::Callback { public: - void set_result(Result result) override { + void set_result(Result result) final { if (result.is_ok()) { LOG(ERROR) << "Unexpectedly succeeded to connect to MTProto proxy"; } else if (result.error().message() != "Response hash mismatch") { @@ -682,7 +682,7 @@ TEST(Mtproto, TlsTransport) { } Scheduler::instance()->finish(); } - void on_connected() override { + void on_connected() final { } }; diff --git a/test/secret.cpp b/test/secret.cpp index 2a71aadf4..24f07ed2c 100644 --- a/test/secret.cpp +++ b/test/secret.cpp @@ -336,17 +336,17 @@ static string prime_base64 = class FakeDhCallback : public DhCallback { public: - int is_good_prime(Slice prime_str) const override { + int is_good_prime(Slice prime_str) const final { auto it = cache.find(prime_str.str()); if (it == cache.end()) { return -1; } return it->second; } - void add_good_prime(Slice prime_str) const override { + void add_good_prime(Slice prime_str) const final { cache[prime_str.str()] = 1; } - void add_bad_prime(Slice prime_str) const override { + void add_bad_prime(Slice prime_str) const final { cache[prime_str.str()] = 0; } mutable std::map cache; @@ -359,7 +359,7 @@ class FakeBinlog FakeBinlog() { register_actor("FakeBinlog", this).release(); } - void force_sync(Promise<> promise) override { + void force_sync(Promise<> promise) final { if (pending_events_.empty()) { pending_events_.emplace_back(); } @@ -377,15 +377,15 @@ class FakeBinlog } } } - void force_flush() override { + void force_flush() final { } - uint64 next_id() override { + uint64 next_id() final { auto res = last_id_; last_id_++; return res; } - uint64 next_id(int32 shift) override { + uint64 next_id(int32 shift) final { auto res = last_id_; last_id_ += shift; return res; @@ -410,15 +410,15 @@ class FakeBinlog pending_events_.clear(); } - void change_key(DbKey key, Promise<> promise) override { + void change_key(DbKey key, Promise<> promise) final { } protected: - void close_impl(Promise<> promise) override { + void close_impl(Promise<> promise) final { } - void close_and_destroy_impl(Promise<> promise) override { + void close_and_destroy_impl(Promise<> promise) final { } - void add_raw_event_impl(uint64 id, BufferSlice &&raw_event, Promise<> promise, BinlogDebugInfo info) override { + void add_raw_event_impl(uint64 id, BufferSlice &&raw_event, Promise<> promise, BinlogDebugInfo info) final { auto event = BinlogEvent(std::move(raw_event), info); LOG(INFO) << "ADD EVENT: " << event.id_ << " " << event; pending_events_.emplace_back(); @@ -455,10 +455,10 @@ class FakeBinlog } } } - void timeout_expired() override { + void timeout_expired() final { do_force_sync(); } - void wakeup() override { + void wakeup() final { if (has_request_sync) { do_force_sync(); } @@ -490,25 +490,25 @@ class FakeSecretChatContext : public SecretChatActor::Context { secret_chat_db_ = std::make_shared(key_value_, 1); net_query_creator_.stop_check(); // :( } - DhCallback *dh_callback() override { + DhCallback *dh_callback() final { return &fake_dh_callback_; } - NetQueryCreator &net_query_creator() override { + NetQueryCreator &net_query_creator() final { return net_query_creator_; } - int32 unix_time() override { + int32 unix_time() final { return static_cast(std::time(nullptr)); } - bool close_flag() override { + bool close_flag() final { return *close_flag_; } - BinlogInterface *binlog() override { + BinlogInterface *binlog() final { return binlog_.get(); } - SecretChatDb *secret_chat_db() override { + SecretChatDb *secret_chat_db() final { return secret_chat_db_.get(); } - std::shared_ptr dh_config() override { + std::shared_ptr dh_config() final { static auto config = [] { DhConfig dh_config; dh_config.version = 12; @@ -519,39 +519,38 @@ class FakeSecretChatContext : public SecretChatActor::Context { return config; } - void set_dh_config(std::shared_ptr dh_config) override { + void set_dh_config(std::shared_ptr dh_config) final { // empty } - bool get_config_option_boolean(const string &name) const override { + bool get_config_option_boolean(const string &name) const final { return false; } // We don't want to expose the whole NetQueryDispatcher, MessagesManager and ContactsManager. // So it is more clear which parts of MessagesManager is really used. And it is much easier to create tests. - void send_net_query(NetQueryPtr query, ActorShared callback, bool ordered) override; + void send_net_query(NetQueryPtr query, ActorShared callback, bool ordered) final; void on_update_secret_chat(int64 access_hash, UserId user_id, SecretChatState state, bool is_outbound, int32 ttl, - int32 date, string key_hash, int32 layer, FolderId initial_folder_id) override { + int32 date, string key_hash, int32 layer, FolderId initial_folder_id) final { } void on_inbound_message(UserId user_id, MessageId message_id, int32 date, tl_object_ptr file, - tl_object_ptr message, Promise<>) override; + tl_object_ptr message, Promise<>) final; - void on_send_message_error(int64 random_id, Status error, Promise<>) override; - void on_send_message_ack(int64 random_id) override; + void on_send_message_error(int64 random_id, Status error, Promise<>) final; + void on_send_message_ack(int64 random_id) final; void on_send_message_ok(int64 random_id, MessageId message_id, int32 date, - tl_object_ptr file, Promise<>) override; - void on_delete_messages(std::vector random_id, Promise<>) override; - void on_flush_history(bool, MessageId, Promise<>) override; - void on_read_message(int64, Promise<>) override; + tl_object_ptr file, Promise<>) final; + void on_delete_messages(std::vector random_id, Promise<>) final; + void on_flush_history(bool, MessageId, Promise<>) final; + void on_read_message(int64, Promise<>) final; - void on_screenshot_taken(UserId user_id, MessageId message_id, int32 date, int64 random_id, - Promise<> promise) override { + void on_screenshot_taken(UserId user_id, MessageId message_id, int32 date, int64 random_id, Promise<> promise) final { } void on_set_ttl(UserId user_id, MessageId message_id, int32 date, int32 ttl, int64 random_id, - Promise<> promise) override { + Promise<> promise) final { } private: @@ -734,7 +733,7 @@ class Master : public Actor { } int32 bad_cnt_ = 0; - void timeout_expired() override { + void timeout_expired() final { LOG(INFO) << "TIMEOUT EXPIRED"; if (events_cnt_ < 4) { bad_cnt_++; @@ -760,7 +759,7 @@ class Master : public Actor { auto &to() { return get_by_id(3 - get_link_token()); } - void start_up() override { + void start_up() final { auto old_context = set_context(std::make_shared()); alice_ = create_actor("SecretChatProxy alice", "alice", actor_shared(this, 1)); bob_ = create_actor("SecretChatProxy bob", "bob", actor_shared(this, 2)); @@ -865,7 +864,7 @@ class Master : public Actor { send_ping(1, 5000); set_timeout_in(1); } - void timeout_expired() override { + void timeout_expired() final { send_message(1, "oppa"); send_message(2, "appo"); set_timeout_in(1); @@ -965,7 +964,7 @@ class Master : public Actor { }; std::map sent_messages_; - void hangup_shared() override { + void hangup_shared() final { LOG(INFO) << "GOT HANGUP: " << get_link_token(); send_closure(from(), &SecretChatProxy::on_closed); } diff --git a/test/tdclient.cpp b/test/tdclient.cpp index a9bba4de7..dffe30c8c 100644 --- a/test/tdclient.cpp +++ b/test/tdclient.cpp @@ -80,17 +80,17 @@ class TestClient : public td::Actor { public: explicit TdCallbackImpl(td::ActorId client) : client_(client) { } - void on_result(td::uint64 id, td::tl_object_ptr result) override { + void on_result(td::uint64 id, td::tl_object_ptr result) final { send_closure(client_, &TestClient::on_result, id, std::move(result)); } - void on_error(td::uint64 id, td::tl_object_ptr error) override { + void on_error(td::uint64 id, td::tl_object_ptr error) final { send_closure(client_, &TestClient::on_error, id, std::move(error)); } TdCallbackImpl(const TdCallbackImpl &) = delete; TdCallbackImpl &operator=(const TdCallbackImpl &) = delete; TdCallbackImpl(TdCallbackImpl &&) = delete; TdCallbackImpl &operator=(TdCallbackImpl &&) = delete; - ~TdCallbackImpl() override { + ~TdCallbackImpl() final { send_closure(client_, &TestClient::on_closed); } @@ -141,7 +141,7 @@ class TestClient : public td::Actor { stop(); } - void start_up() override { + void start_up() final { td::rmrf(name_).ignore(); auto old_context = set_context(std::make_shared()); set_tag(name_); @@ -163,7 +163,7 @@ class TestClient : public td::Actor { class TestClinetTask : public TestClient::Listener { public: - void on_update(std::shared_ptr update) override { + void on_update(std::shared_ptr update) final { auto it = sent_queries_.find(update->id); if (it != sent_queries_.end()) { it->second(std::move(update->object)); @@ -171,7 +171,7 @@ class TestClinetTask : public TestClient::Listener { } process_update(update); } - void start_listen(TestClient *client) override { + void start_listen(TestClient *client) final { client_ = client; start_up(); } @@ -202,7 +202,7 @@ class DoAuthentication : public TestClinetTask { DoAuthentication(td::string name, td::string phone, td::string code, td::Promise<> promise) : name_(std::move(name)), phone_(std::move(phone)), code_(std::move(code)), promise_(std::move(promise)) { } - void start_up() override { + void start_up() final { send_query(td::make_tl_object(), [this](auto res) { this->process_authorization_state(std::move(res)); }); } @@ -259,7 +259,7 @@ class DoAuthentication : public TestClinetTask { td::Promise<> promise_; bool start_flag_{false}; - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (!start_flag_) { return; } @@ -285,7 +285,7 @@ class SetUsername : public TestClinetTask { td::int32 self_id_ = 0; td::string tag_; - void start_up() override { + void start_up() final { send_query(td::make_tl_object(), [this](auto res) { this->process_me_user(std::move(res)); }); } @@ -319,7 +319,7 @@ class SetUsername : public TestClinetTask { }); } - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (!update->object) { return; } @@ -349,7 +349,7 @@ class CheckTestA : public TestClinetTask { td::string previous_text_; int cnt_ = 20; - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (update->object->get_id() == td::td_api::updateNewMessage::ID) { auto updateNewMessage = td::move_tl_object_as(update->object); auto &message = updateNewMessage->message_; @@ -375,7 +375,7 @@ class TestA : public TestClinetTask { TestA(td::string tag, td::string username) : tag_(std::move(tag)), username_(std::move(username)) { } - void start_up() override { + void start_up() final { send_query(td::make_tl_object(username_), [this](auto res) { CHECK(res->get_id() == td::td_api::chat::ID); auto chat = td::move_tl_object_as(res); @@ -401,7 +401,7 @@ class TestSecretChat : public TestClinetTask { TestSecretChat(td::string tag, td::string username) : tag_(std::move(tag)), username_(std::move(username)) { } - void start_up() override { + void start_up() final { auto f = [this](auto res) { CHECK(res->get_id() == td::td_api::chat::ID); auto chat = td::move_tl_object_as(res); @@ -417,7 +417,7 @@ class TestSecretChat : public TestClinetTask { }); } - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (!update->object) { return; } @@ -452,10 +452,10 @@ class TestFileGenerated : public TestClinetTask { TestFileGenerated(td::string tag, td::string username) : tag_(std::move(tag)), username_(std::move(username)) { } - void start_up() override { + void start_up() final { } - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (!update->object) { return; } @@ -532,7 +532,7 @@ class TestFileGenerated : public TestClinetTask { FILE *from = nullptr; FILE *to = nullptr; - void start_up() override { + void start_up() final { from = std::fopen(original_path_.c_str(), "rb"); CHECK(from); to = std::fopen(destination_path_.c_str(), "wb"); @@ -540,7 +540,7 @@ class TestFileGenerated : public TestClinetTask { yield(); } - void loop() override { + void loop() final { int cnt = 0; while (true) { td::uint32 x; @@ -560,7 +560,7 @@ class TestFileGenerated : public TestClinetTask { [](auto result) { check_td_error(result); }); set_timeout_in(0.02); } - void tear_down() override { + void tear_down() final { std::fclose(from); std::fclose(to); parent_->send_query(td::make_tl_object(id_, nullptr), @@ -594,7 +594,7 @@ class CheckTestC : public TestClinetTask { : username_(std::move(username)), tag_(std::move(tag)), promise_(std::move(promise)) { } - void start_up() override { + void start_up() final { send_query(td::make_tl_object(username_), [this](auto res) { CHECK(res->get_id() == td::td_api::chat::ID); auto chat = td::move_tl_object_as(res); @@ -618,7 +618,7 @@ class CheckTestC : public TestClinetTask { [](auto res) { check_td_error(res); }); } - void process_update(std::shared_ptr update) override { + void process_update(std::shared_ptr update) final { if (!update->object) { return; } @@ -682,7 +682,7 @@ class LoginTestActor : public td::Actor { set_timeout_in(timeout); } - void start_up() override { + void start_up() final { begin_stage("Logging in", 160); alice_ = td::create_actor("AliceClient", "alice"); bob_ = td::create_actor("BobClient", "bob"); @@ -709,10 +709,10 @@ class LoginTestActor : public td::Actor { public: WaitActor(double timeout, td::Promise<> promise) : timeout_(timeout), promise_(std::move(promise)) { } - void start_up() override { + void start_up() final { set_timeout_in(timeout_); } - void timeout_expired() override { + void timeout_expired() final { stop(); } @@ -766,7 +766,7 @@ class LoginTestActor : public td::Actor { // td::send_closure(alice_, &TestClient::add_listener, td::make_unique(bob_username_)); } - void timeout_expired() override { + void timeout_expired() final { LOG(FATAL) << "Timeout expired in stage '" << stage_name_ << "'"; }