Interface Documentation
Version: invalid
demangle.hh
Go to the documentation of this file.
1 /*
2  @@@@@@@@ @@ @@@@@@ @@@@@@@@ @@
3  /@@///// /@@ @@////@@ @@////// /@@
4  /@@ /@@ @@@@@ @@ // /@@ /@@
5  /@@@@@@@ /@@ @@///@@/@@ /@@@@@@@@@/@@
6  /@@//// /@@/@@@@@@@/@@ ////////@@/@@
7  /@@ /@@/@@//// //@@ @@ /@@/@@
8  /@@ @@@//@@@@@@ //@@@@@@ @@@@@@@@ /@@
9  // /// ////// ////// //////// //
10 
11  Copyright (c) 2016, Triad National Security, LLC
12  All rights reserved.
13  */
14 #pragma once
15 
18 #include <string>
19 #include <typeinfo> // typeid()
20 
21 namespace flecsi {
22 namespace util {
23 
32 std::string demangle(const char * const name);
33 
42 template<class T>
43 inline std::string
44 type() {
45  return demangle(typeid(T).name());
46 } // type
47 
56 inline std::string
57 type(const std::type_info & type_info) {
58  return demangle(type_info.name());
59 } // type
60 
63 template<auto & S>
64 struct Symbol {};
68 template<auto & S>
69 std::string
70 symbol() {
71  constexpr int PFX = sizeof("flecsi::util::Symbol<") - 1;
72  const auto s = type<Symbol<S>>();
73  return s.substr(PFX, s.size() - 1 - PFX);
74 }
75 
76 } // namespace util
77 } // namespace flecsi
Definition: demangle.hh:64
std::string demangle(const char *const name)
Definition: demangle.cc:29
std::string type(const std::type_info &type_info)
Definition: demangle.hh:57
std::string symbol()
Definition: demangle.hh:70
Definition: control.hh:31