DDC 0.17.0
Loading...
Searching...
No Matches
sparse_discrete_domain.cpp
1// Copyright (C) The DDC development team, see COPYRIGHT.md file
2//
3// SPDX-License-Identifier: MIT
4
5#include <cstddef>
6#include <ostream>
7#include <span>
8
9#include <Kokkos_Core.hpp>
10
14
15namespace ddc::detail {
16
17namespace {
18
19/// Print the ids of the elements of one dimension, eliding the middle ones if there are too many
20void print_sparse_discrete_domain_dimension(
21 std::ostream& os,
22 Kokkos::View<DiscreteElementType*, Kokkos::SharedSpace> const& view)
23{
24 /// Number of elements displayed at each end of a dimension of a SparseDiscreteDomain
25 std::size_t const print_edge_items = 3;
26 std::size_t const n = view.size();
27 os << '[';
28 if (n <= 2 * print_edge_items + 1) {
29 for (std::size_t i = 0; i < n; ++i) {
30 os << (i == 0 ? "" : ", ") << view(i);
31 }
32 } else {
33 for (std::size_t i = 0; i < print_edge_items; ++i) {
34 os << view(i) << ", ";
35 }
36 os << "...";
37 for (std::size_t i = n - print_edge_items; i < n; ++i) {
38 os << ", " << view(i);
39 }
40 }
41 os << ']';
42}
43
44} // namespace
45
46void print_sparse_discrete_domain(
47 std::ostream& os,
48 bool const empty,
49 std::span<DiscreteVectorElement const> const extents,
50 std::span<Kokkos::View<DiscreteElementType*, Kokkos::SharedSpace> const> const elements)
51{
52 os << "SparseDiscreteDomain(";
53 if (empty) {
54 os << "empty";
55 } else {
56 os << "extents=";
57 print_discrete_vector(os, extents);
58 os << ", elements=[";
59 for (std::size_t i = 0; i < elements.size(); ++i) {
60 os << (i == 0 ? "" : ", ");
61 print_sparse_discrete_domain_dimension(os, elements[i]);
62 }
63 os << ']';
64 }
65 os << ')';
66}
67
68} // namespace ddc::detail
The top-level namespace of DDC.