115 if constexpr ( std::is_same_v<T, bool> ) {
116 copy( name,
"bool", N );
117 }
else if constexpr ( std::is_same_v<T, char> ) {
118 copy( name,
"char", N );
119 }
else if constexpr ( std::is_same_v<T, int8_t> ) {
120 copy( name,
"int8_t", N );
121 }
else if constexpr ( std::is_same_v<T, uint8_t> || std::is_same_v<T, unsigned char> ) {
122 copy( name,
"uint8_t", N );
123 }
else if constexpr ( std::is_same_v<T, int16_t> ) {
124 copy( name,
"int16_t", N );
125 }
else if constexpr ( std::is_same_v<T, uint16_t> ) {
126 copy( name,
"uint16_t", N );
127 }
else if constexpr ( std::is_same_v<T, int> || std::is_same_v<T, int32_t> ) {
128 copy( name,
"int32_t", N );
129 }
else if constexpr ( std::is_same_v<T, unsigned> || std::is_same_v<T, uint32_t> ) {
130 copy( name,
"uint32_t", N );
131 }
else if constexpr ( std::is_same_v<T, int64_t> ) {
132 copy( name,
"int64_t", N );
133 }
else if constexpr ( std::is_same_v<T, uint64_t> ) {
134 copy( name,
"uint64_t", N );
135 }
else if constexpr ( std::is_same_v<T, float> ) {
136 copy( name,
"float", N );
137 }
else if constexpr ( std::is_same_v<T, double> ) {
138 copy( name,
"double", N );
139 }
else if constexpr ( std::is_same_v<T, std::complex<float>> ) {
140 copy( name,
"std::complex<float>", N );
141 }
else if constexpr ( std::is_same_v<T, std::complex<double>> ) {
142 copy( name,
"std::complex<double>", N );
143 }
else if constexpr ( std::is_same_v<T, std::string> ) {
144 copy( name,
"std::string", N );
145 }
else if constexpr ( std::is_same_v<T, std::string_view> ) {
146 copy( name,
"std::string_view", N );
149#if defined( __clang__ ) || defined( __GNUC__ )
150 constexpr std::string_view name0 = __PRETTY_FUNCTION__;
151 std::string_view name2 = name0;
152#elif defined( _MSC_VER )
153 constexpr std::string_view name0 = __FUNCSIG__;
154 std::string_view name2 = name0;
155#elif AMP_CXX_STANDARD >= 20
157 auto source = std::source_location::current();
158 std::string_view name2( source.function_name() );
160 #error "Not finished";
163 if ( name2.find(
"T = " ) != std::string::npos ) {
164 name2 = name2.substr( name2.find(
"T = " ) + 4 );
165 if ( name2.find(
';' ) != std::string::npos )
166 name2 = name2.substr( 0, name2.find(
';' ) );
168 name2 = name2.substr( 0, name2.rfind(
']' ) );
170 if ( name2.find(
"getTypeName<" ) != std::string::npos ) {
171 auto i1 = name2.find(
"getTypeName<" );
172 auto i2 = name2.rfind(
">" );
173 name2 = name2.substr( i1 + 12, i2 - i1 - 12 );
175 if ( name2[0] ==
' ' )
176 name2.remove_prefix( 1 );
178 name2 = name2.substr( 0, N - 1 );
179 for (
size_t i = 0; i < N; i++ )
181 for (
size_t i = 0; i < std::min( name2.size(), N - 1 ); i++ )
186 replace( name, N,
"class ",
"" );
187 replace( name, N,
"struct ",
"" );
188 replace( name, N,
"std::__cxx11::basic_string<char>",
"std::string" );
189 replace( name, N,
"std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>",
"std::string" );
190 replace( name, N,
"std::basic_string<char,struct std::char_traits<char>,class std::allocator<char>>",
"std::string" );
191 replace( name, N,
"std::__cxx11::basic_string_view<char>",
"std::string_view" );
192 replace( name, N,
"std::__cxx11::basic_string_view<char, std::char_traits<char>>",
"std::string_view" );
193 replace( name, N,
"std::basic_string_view<char,struct std::char_traits<char>>",
"std::string_view" );
194 replace( name, N,
"std::basic_string_view<char>",
"std::string_view" );
195 replace( name, N,
"std::basic_string_view<char, std::char_traits<char>>",
"std::string_view" );
196 replace( name, N,
"std::__debug::",
"std::" );
197 replace( name, N,
" *",
"* " );
198 replace( name, N,
" >",
">" );
199 replace( name, N,
"* [",
"*[" );