|
10 | 10 | #include <ostream> |
11 | 11 | #include <sstream> |
12 | 12 | #include <type_traits> |
| 13 | +#include <typeinfo> |
13 | 14 | #include <utility> |
14 | 15 |
|
15 | 16 | #include "chunk_span.hpp" |
16 | | -#include "discrete_domain.hpp" |
| 17 | +#include "discrete_vector.hpp" |
17 | 18 |
|
18 | 19 | #if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) |
19 | 20 | # include <cxxabi.h> |
@@ -259,49 +260,43 @@ class ChunkPrinter |
259 | 260 | } |
260 | 261 | }; |
261 | 262 |
|
262 | | -#if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) |
263 | | -template <class Type> |
264 | | -void print_demangled_type_name(std::ostream& os) |
| 263 | +inline void print_demangled_type_name(std::ostream& os, char const* const mangled_name) |
265 | 264 | { |
| 265 | +#if defined(KOKKOS_COMPILER_GNU) || defined(KOKKOS_COMPILER_CLANG) |
266 | 266 | int status; |
267 | 267 |
|
268 | | - std::unique_ptr<char, decltype(std::free)*> const demangled_name( |
269 | | - abi::__cxa_demangle(typeid(Type).name(), nullptr, nullptr, &status), |
270 | | - std::free); |
| 268 | + std::unique_ptr<char, decltype(std::free)*> const |
| 269 | + demangled_name(abi::__cxa_demangle(mangled_name, nullptr, nullptr, &status), std::free); |
271 | 270 | if (status != 0) { |
272 | 271 | os << "Error demangling dimension name: " << status; |
273 | 272 | return; |
274 | 273 | } |
275 | 274 |
|
276 | 275 | os << demangled_name.get(); |
277 | | -} |
278 | 276 | #else |
279 | | -template <class Type> |
280 | | -void print_demangled_type_name(std::ostream& os) |
281 | | -{ |
282 | | - os << typeid(Type).name(); |
283 | | -} |
| 277 | + os << mangled_name; |
284 | 278 | #endif |
| 279 | +} |
285 | 280 |
|
286 | | -inline void print_dim_name(std::ostream& os, DiscreteDomain<> const) |
| 281 | +inline void print_single_dim_name( |
| 282 | + std::ostream& os, |
| 283 | + std::type_info const& dim, |
| 284 | + DiscreteVectorElement const size) |
287 | 285 | { |
288 | | - os << "Scalar"; |
| 286 | + print_demangled_type_name(os, dim.name()); |
| 287 | + os << '(' << size << ')'; |
289 | 288 | } |
290 | 289 |
|
291 | | -template <class Dim> |
292 | | -void print_dim_name(std::ostream& os, DiscreteDomain<Dim> const dd) |
| 290 | +inline void print_dim_name(std::ostream& os, DiscreteVector<> const&) |
293 | 291 | { |
294 | | - print_demangled_type_name<Dim>(os); |
295 | | - os << '(' << dd.size() << ')'; |
| 292 | + os << "Scalar"; |
296 | 293 | } |
297 | 294 |
|
298 | | -template <class Dim0, class Dim1, class... Dims> |
299 | | -void print_dim_name(std::ostream& os, DiscreteDomain<Dim0, Dim1, Dims...> const dd) |
| 295 | +template <class Dim0, class... Dims> |
| 296 | +void print_dim_name(std::ostream& os, DiscreteVector<Dim0, Dims...> const& dd) |
300 | 297 | { |
301 | | - print_demangled_type_name<Dim0>(os); |
302 | | - DiscreteDomain<Dim1, Dims...> const smaller_dd(dd); |
303 | | - os << '(' << dd.size() / smaller_dd.size() << ")×"; |
304 | | - print_dim_name(os, smaller_dd); |
| 298 | + print_single_dim_name(os, typeid(Dim0), get<Dim0>(dd)); |
| 299 | + ((os << "×", print_single_dim_name(os, typeid(Dims), get<Dims>(dd))), ...); |
305 | 300 | } |
306 | 301 |
|
307 | 302 | } // namespace detail |
@@ -339,9 +334,9 @@ std::ostream& print_type_info( |
339 | 334 | std::ostream& os, |
340 | 335 | ChunkSpan<ElementType, SupportType, LayoutStridedPolicy, MemorySpace> const& chunk_span) |
341 | 336 | { |
342 | | - ddc::detail::print_dim_name(os, chunk_span.domain()); |
| 337 | + ddc::detail::print_dim_name(os, chunk_span.extents()); |
343 | 338 | os << '\n'; |
344 | | - ddc::detail::print_demangled_type_name<decltype(chunk_span)>(os); |
| 339 | + ddc::detail::print_demangled_type_name(os, typeid(chunk_span).name()); |
345 | 340 | os << '\n'; |
346 | 341 |
|
347 | 342 | return os; |
|
0 commit comments