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 <ranges> 8 : #include <algorithm> 9 : #include <vector> 10 : #include <unordered_map> 11 : 12 : namespace ipc 13 : { 14 : // creates a vector with elements from range r 15 15 : template<class R> auto to_vector(R&& r) 16 : { 17 : using ValueT = std::ranges::range_value_t<std::remove_reference_t<R>>; 18 15 : auto c = r | std::views::common; 19 19 : auto v = std::vector<ValueT>(c.begin(), c.end()); 20 30 : return v; 21 : } 22 : 23 : //creates a map with elements from range r 24 : template<class R> auto to_map(R&& r) 25 : { 26 : using TupleT = std::ranges::range_value_t<std::remove_reference_t<R>>; 27 : using KeyT = std::tuple_element_t<0, TupleT>; 28 : using ValueT = std::tuple_element_t<1, TupleT>; 29 : auto c = r | std::views::common; 30 : auto v = std::unordered_map<KeyT, ValueT>(c.begin(), c.end()); 31 : return v; 32 : } 33 : 34 : template<size_t N, class Arr> 35 12000 : auto subarray(const Arr& arr) 36 : { 37 : std::array<typename Arr::value_type, N> sub; 38 12000 : std::ranges::copy(arr | std::views::take(N), sub.begin()); 39 12000 : return sub; 40 : } 41 : 42 : } // namespace ipc