LCOV - code coverage report
Current view: top level - issm-precice - ranges.hpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 7 7
Test Date: 2026-08-10 06:53:29 Functions: 100.0 % 9 9

            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
        

Generated by: LCOV version 2.0-1