code size reduction

This commit is contained in:
Wenzel Jakob 2015-07-28 16:12:29 +02:00
parent 43398a8548
commit fbe82bf94d
1 changed files with 14 additions and 10 deletions

View File

@ -26,23 +26,27 @@ inline void erase_all(std::string &string, const std::string &search) {
string.erase(pos, search.length()); string.erase(pos, search.length());
} }
} }
NAMESPACE_END(detail)
/// Return a string representation of a C++ type inline void clean_type_id(std::string &name) {
template <typename T> static std::string type_id() { #if defined(__GNUG__)
std::string name(typeid(T).name()); int status = 0;
#if defined(__GNUG__) std::unique_ptr<char, void (*)(void *)> res {
int status = 0; abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status), std::free };
std::unique_ptr<char, void (*)(void *)> res { if (status == 0)
abi::__cxa_demangle(name.c_str(), nullptr, nullptr, &status), std::free }; name = res.get();
if (status == 0)
name = res.get();
#else #else
detail::erase_all(name, "class "); detail::erase_all(name, "class ");
detail::erase_all(name, "struct "); detail::erase_all(name, "struct ");
detail::erase_all(name, "enum "); detail::erase_all(name, "enum ");
#endif #endif
detail::erase_all(name, "pybind::"); detail::erase_all(name, "pybind::");
}
NAMESPACE_END(detail)
/// Return a string representation of a C++ type
template <typename T> static std::string type_id() {
std::string name(typeid(T).name());
detail::clean_type_id(name);
return name; return name;
} }