From 4758dac21881cae6f1c7ff6e2257ef63c7eeb402 Mon Sep 17 00:00:00 2001 From: Michel Hermier Date: Wed, 22 Dec 2021 00:34:05 +0100 Subject: AK: Make `Disjoint*::is_empty()` not call size This is a raffinement of 49cbd4dcca037336ad5e2e4fcb1e3cc613b46cce. Previously, the container was scanned to compute the size in the unhappy path. Now, using `all_of` happy and unhappy path should be fast. --- AK/DisjointChunks.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'AK') diff --git a/AK/DisjointChunks.h b/AK/DisjointChunks.h index d58ed43f7e..181ab1b88a 100644 --- a/AK/DisjointChunks.h +++ b/AK/DisjointChunks.h @@ -6,6 +6,7 @@ #pragma once +#include #include #include #include @@ -124,7 +125,10 @@ public: return size; } - bool is_empty() const { return size() == 0; } + bool is_empty() const + { + return all_of(m_spans, [](auto& span) { return span.is_empty(); }); + } DisjointSpans slice(size_t start, size_t length) const { @@ -256,7 +260,10 @@ public: return sum; } - bool is_empty() const { return m_chunks.size() == 0 || size() == 0; } + bool is_empty() const + { + return all_of(m_chunks, [](auto& chunk) { return chunk.is_empty(); }); + } DisjointSpans spans() const& { -- cgit v1.2.3