diff options
| author | levlam <levlam@telegram.org> | 2022-11-08 17:27:02 +0300 |
|---|---|---|
| committer | levlam <levlam@telegram.org> | 2022-11-08 17:27:02 +0300 |
| commit | 52aa76584acd543d7bed96c7758924904b7f30a7 (patch) | |
| tree | ec2205ed4e2e9dae6aa083f1bf853ae86a51476f /tddb | |
| parent | 5945cc9b7022b3fc2865e86f58388e4e690b0002 (diff) | |
Improve TQueue::clear.
Diffstat (limited to 'tddb')
| -rw-r--r-- | tddb/td/db/TQueue.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index 1f7c65c2f..5fc61c98e 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -216,15 +216,23 @@ class TQueueImpl final : public TQueue { } void clear(QueueId queue_id, size_t keep_count) final { - auto size = get_size(queue_id); + auto queue_it = queues_.find(queue_id); + if (queue_it == queues_.end()) { + return; + } + auto &q = queue_it->second; + auto size = get_size(q); if (size <= keep_count) { return; } - MutableSpan<TQueue::Event> span; - auto r_size = get(queue_id, get_tail(queue_id).advance(0 - keep_count).move_as_ok(), true, 0, span); - CHECK(r_size.is_ok()); - CHECK(r_size.ok() == keep_count); + auto end_it = q.events.end(); + while (keep_count-- > 0) { + --end_it; + } + for (auto it = q.events.begin(); it != end_it;) { + pop(q, queue_id, it, q.tail_id); + } } Result<size_t> get(QueueId queue_id, EventId from_id, bool forget_previous, int32 unix_time_now, |
