2#include <Core/RaCore.hpp>
3#include <Core/Utils/StringUtils.hpp>
26std::
string demangleType( const T& ) noexcept;
29RA_CORE_API
std::
string demangleType( const
std::type_index& typeName ) noexcept;
33auto simplifiedDemangledType() noexcept ->
std::
string;
37auto simplifiedDemangledType( const T& ) noexcept ->
std::
string;
43RA_CORE_API auto simplifiedDemangledType( const
std::type_index& typeName ) noexcept ->
std::
string;
53auto is_container_impl(
int )
69using is_container =
decltype( detail::is_container_impl<T>( 0 ) );
74namespace TypeInternal {
79auto simplifiedDemangledType() noexcept ->
std::
string {
86 static auto demangled_name =
87 TypeInternal::makeTypeReadable( Ra::Core::Utils::demangleType<T>() );
89 return demangled_name;
93auto simplifiedDemangledType(
const T& )
noexcept ->
std::string {
94 return simplifiedDemangledType<T>();
98 return TypeInternal::makeTypeReadable( Ra::Core::Utils::demangleType( typeName ) );
106template <
typename... Ts>
109namespace TypeListInternal {
115template <
typename ListT,
typename... Ts>
122template <
typename... Ts,
typename... OtherTs>
124 using type = TypeList<Ts..., OtherTs...>;
131template <
typename... Ts,
typename... OtherTs>
133 using type = TypeList<Ts..., OtherTs...>;
138template <
typename... Ts>
141 using Self = TypeList;
143 static constexpr size_t Size =
sizeof...( Ts );
160 template <
typename... TypesToAppend>
170 retval = typeIndex.name();
174 char* name = abi::__cxa_demangle( typeIndex.name(), 0, 0, &error );
175 if ( error == 0 ) { retval = name; }
184 removeAllInString( retval,
"class " );
185 removeAllInString( retval,
"struct " );
186 removeAllInString( retval,
"__cdecl" );
187 replaceAllInString( retval,
"& __ptr64",
"&" );
188 replaceAllInString( retval,
",",
", " );
189 replaceAllInString( retval,
" >",
">" );
190 replaceAllInString( retval,
"__int64",
"long" );
191 replaceAllInString( retval,
"const &",
"const&" );
192 removeAllInString( retval,
"__cxx11::" );
193 removeAllInString( retval,
"__1::" );
194 replaceAllInString( retval,
" >",
">" );
211 static auto demangled_name = demangleType(
std::type_index(
typeid( T ) ) );
212 return demangled_name;
218 return demangleType<T>();
hepler function to manage enum as underlying types in VariableSet
T regex_replace(T... args)
Append any number of types to a TypeList.