GCC Code Coverage Report


Directory: gridformat/
File: gridformat/common/matrix.hpp
Date: 2025-04-11 15:08:41
Exec Total Coverage
Lines: 16 16 100.0%
Functions: 19 19 100.0%
Branches: 5 6 83.3%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2022-2023 Dennis Gläser <dennis.glaeser@iws.uni-stuttgart.de>
2 // SPDX-License-Identifier: MIT
3 /*!
4 * \file
5 * \ingroup Common
6 * \copydoc GridFormat::Matrix
7 */
8 #ifndef GRIDFORMAT_COMMON_MATRIX_HPP_
9 #define GRIDFORMAT_COMMON_MATRIX_HPP_
10
11 #include <array>
12 #include <ranges>
13 #include <utility>
14
15 #include <gridformat/common/concepts.hpp>
16 #include <gridformat/common/type_traits.hpp>
17
18 namespace GridFormat {
19
20
21 template<typename T, std::size_t rows, std::size_t cols>
22 class Matrix {
23 public:
24 template<Concepts::StaticallySizedMDRange<2> R>
25 6834 explicit Matrix(R&& entries) {
26 static_assert(static_size<R> == rows);
27 static_assert(static_size<std::ranges::range_value_t<R>> == cols);
28
29 6834 int i = 0;
30
1/2
✓ Branch 1 taken 3465 times.
✗ Branch 2 not taken.
25060 std::ranges::for_each(entries, [&] (const auto& sub_range) {
31 9319 std::ranges::copy(sub_range, _entries[i]);
32 9319 i++;
33 });
34 6834 }
35
36 6733 void transpose() {
37
2/2
✓ Branch 0 taken 9319 times.
✓ Branch 1 taken 3465 times.
24955 for (std::size_t row = 0; row < rows; ++row)
38
2/2
✓ Branch 0 taken 8345 times.
✓ Branch 1 taken 9319 times.
34671 for (std::size_t col = row+1; col < cols; ++col)
39 16449 std::swap(_entries[row][col], _entries[col][row]);
40 6733 }
41
42 235 Matrix& transposed() {
43 235 transpose();
44 235 return *this;
45 }
46
47 6733 auto begin() const { return std::ranges::begin(_entries); }
48 6733 auto end() const { return std::ranges::end(_entries); }
49
50 private:
51 T _entries[rows][cols];
52 };
53
54
55 template<Concepts::StaticallySizedMDRange<2> Range>
56 Matrix(Range&&) -> Matrix<
57 MDRangeValueType<Range>,
58 static_size<Range>,
59 static_size<std::ranges::range_value_t<Range>>
60 >;
61
62 } // namespace GridFormat
63
64 #endif // GRIDFORMAT_COMMON_MATRIX_HPP_
65