From d12ca158c4ea06b0c068504a2abf95fd23a31b08 Mon Sep 17 00:00:00 2001 From: levlam Date: Fri, 6 Jan 2023 14:54:54 +0300 Subject: [PATCH] Add constant methods to td::Container. --- tdutils/td/utils/Container.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/tdutils/td/utils/Container.h b/tdutils/td/utils/Container.h index f7bec812a..a3d62c7c4 100644 --- a/tdutils/td/utils/Container.h +++ b/tdutils/td/utils/Container.h @@ -28,6 +28,14 @@ class Container { return &slots_[slot_id].data; } + const DataT *get(Id id) const { + int32 slot_id = decode_id(id); + if (slot_id == -1) { + return nullptr; + } + return &slots_[slot_id].data; + } + void erase(Id id) { int32 slot_id = decode_id(id); if (slot_id == -1) { @@ -60,7 +68,7 @@ class Container { return static_cast(id); } - vector ids() { + vector ids() const { vector is_bad(slots_.size(), false); for (auto id : empty_slots_) { is_bad[id] = true; @@ -73,6 +81,7 @@ class Container { } return res; } + template void for_each(const F &f) { auto ids = this->ids(); @@ -80,13 +89,24 @@ class Container { f(id, *get(id)); } } + + template + void for_each(const F &f) const { + auto ids = this->ids(); + for (auto id : ids) { + f(id, *get(id)); + } + } + size_t size() const { CHECK(empty_slots_.size() <= slots_.size()); return slots_.size() - empty_slots_.size(); } + bool empty() const { return size() == 0; } + void clear() { *this = Container(); }