diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-17 14:52:38 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-18 16:47:40 +0200 |
commit | 0019be5c97cf4ebb1b906cb548e0a06e0d449f5c (patch) | |
tree | d197f8d81b1f42b29597b2d0af6810739bc03107 | |
parent | 62929ab02c7f8e93b3d7241df775acdf2a1e1b36 (diff) | |
download | justbuild-0019be5c97cf4ebb1b906cb548e0a06e0d449f5c.tar.gz |
Add cast of TransformedRange to std::vector
-rw-r--r-- | src/utils/cpp/transformed_range.hpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/utils/cpp/transformed_range.hpp b/src/utils/cpp/transformed_range.hpp index 0522313d..f28029f3 100644 --- a/src/utils/cpp/transformed_range.hpp +++ b/src/utils/cpp/transformed_range.hpp @@ -20,6 +20,7 @@ #include <iterator> #include <type_traits> #include <utility> //std::move +#include <vector> #include "gsl/gsl" @@ -86,6 +87,18 @@ class TransformedRange final { [[nodiscard]] auto begin() const noexcept -> iterator { return begin_; } [[nodiscard]] auto end() const noexcept -> iterator { return end_; } + [[nodiscard]] auto size() const -> typename iterator::difference_type { + return std::distance(begin_, end_); + } + + [[nodiscard]] auto ToVector() const -> std::vector<Result> { + std::vector<Result> result; + result.reserve(size()); + for (auto item : *this) { + result.emplace_back(std::move(item)); + } + return result; + } private: iterator const begin_; |