Line data Source code
1 : // SPDX-FileCopyrightText: 2024 Daniel Abele <daniel.abele@dlr.de>
2 : //
3 : // SPDX-License-Identifier: BSD-3-Clause
4 :
5 : #pragma once
6 :
7 : #include "issm-precice/config.hpp"
8 : #include <ranges>
9 : #include <algorithm>
10 : #include <vector>
11 : #include <unordered_map>
12 :
13 : namespace ipc
14 : {
15 : // creates a vector with elements from range r
16 26 : template<class R> auto to_vector(R&& r)
17 : {
18 : using ValueT = std::ranges::range_value_t<std::remove_reference_t<R>>;
19 26 : auto c = r | std::views::common;
20 26 : auto v = std::vector<ValueT>(c.begin(), c.end());
21 52 : return v;
22 : }
23 :
24 : //creates a map with elements from range r
25 : template<class R> auto to_map(R&& r)
26 : {
27 : using TupleT = std::ranges::range_value_t<std::remove_reference_t<R>>;
28 : using KeyT = std::tuple_element_t<0, TupleT>;
29 : using ValueT = std::tuple_element_t<1, TupleT>;
30 : auto c = r | std::views::common;
31 : auto v = std::unordered_map<KeyT, ValueT>(c.begin(), c.end());
32 : return v;
33 : }
34 :
35 : template<size_t N, class Arr>
36 4987 : auto subarray(const Arr& arr)
37 : {
38 : std::array<typename Arr::value_type, N> sub;
39 4987 : std::ranges::copy(arr | std::views::take(N), sub.begin());
40 4987 : return sub;
41 : }
42 :
43 : } // namespace ipc
|