LCOV - code coverage report
Current view: top level - issm-precice - ranges.hpp (source / functions) Hit Total Coverage
Test: issm-precice-test-coverage.info Lines: 7 7 100.0 %
Date: 2025-07-12 23:40:24 Functions: 9 9 100.0 %

          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

Generated by: LCOV version 1.14