From 769b5786ae958a4aae772872d4cebeacd7fdbe1a Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 6 Jun 2023 13:21:39 +0300 Subject: [PATCH] Add util::array::subarray --- libs/util/include/psemek/util/array.hpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/libs/util/include/psemek/util/array.hpp b/libs/util/include/psemek/util/array.hpp index 55fa74cd..2a804506 100644 --- a/libs/util/include/psemek/util/array.hpp +++ b/libs/util/include/psemek/util/array.hpp @@ -118,6 +118,7 @@ namespace psemek::util T const & operator()(std::initializer_list const & index) const; array copy() const; + array subarray(dims_type const & start, dims_type const & end) const; void resize(dims_type const & dims); @@ -383,6 +384,25 @@ namespace psemek::util return array{dims_, std::move(data)}; } + template + array array::subarray(dims_type const & start, dims_type const & end) const + { + dims_type size; + for (std::size_t i = 0; i < N; ++i) + size[i] = end[i] - start[i]; + + array result(size); + for (auto const & idx : result.indices()) + { + auto jdx = idx; + for (std::size_t i = 0; i < N; ++i) + jdx[i] += start[i]; + result(idx) = (*this)(jdx); + } + + return result; + } + template void array::resize(dims_type const & dims) {