From 95478a3a7986fc7bb02b130c15d02a1b2dde8b4e Mon Sep 17 00:00:00 2001 From: Paul Nathan Stickney Date: Sat, 2 Nov 2019 21:23:14 -0700 Subject: [PATCH] [#521] perf. cleanup for demangler.cc - Remove dependency; since this is gone from the header as well, saves many hundreds of ms per affected TU.. like, literally, 200ms+ per TU :| - Moved non-effective inline functions to cc. - Removed assorted aliases and converted to more idiomatic C++. --- src/vt/utils/demangle/demangle.cc | 47 +++++++++++++++++++++++--- src/vt/utils/demangle/demangle.h | 46 ++++--------------------- src/vt/utils/demangle/demangled_name.h | 2 -- 3 files changed, 48 insertions(+), 47 deletions(-) diff --git a/src/vt/utils/demangle/demangle.cc b/src/vt/utils/demangle/demangle.cc index cf711b6c2b..ffa160b2c0 100644 --- a/src/vt/utils/demangle/demangle.cc +++ b/src/vt/utils/demangle/demangle.cc @@ -42,19 +42,52 @@ //@HEADER */ - -#include "vt/config.h" #include "vt/utils/demangle/demangle.h" -#include "vt/context/context.h" #include #include #include #include +#include +#include +#include + namespace vt { namespace util { namespace demangle { -/*static*/ ActiveFunctionDemangler::StrParsedOutType +// +// DemanglerUtils +// + +/*static*/ std::vector +DemanglerUtils::splitString(std::string const& str, char delim) { + std::stringstream ss; + ss.str(str); + + std::string item; + std::vector elems; + while (std::getline(ss, item, delim)) { + elems.push_back(item); + } + return elems; +} + +/*static*/ std::string +DemanglerUtils::removeSpaces(std::string const& str) { + std::string clean{str}; + + clean.erase( + std::remove(clean.begin(), clean.end(), ' '), + clean.end()); + + return clean; +} + +// +// ActiveFunctionDemangler +// + +/*static*/ DemangledName ActiveFunctionDemangler::parseActiveFunctionName(std::string const& str) { using CountType = int32_t; using CharType = char; @@ -333,7 +366,11 @@ ActiveFunctionDemangler::parseActiveFunctionName(std::string const& str) { return demangled; } -/*static*/ ActiveFunctorDemangler::StrParsedOutType +// +// ActiveFunctorDemangler +// + +/*static*/ DemangledName ActiveFunctorDemangler::parseActiveFunctorName( std::string const& name, std::string const& args ) { diff --git a/src/vt/utils/demangle/demangle.h b/src/vt/utils/demangle/demangle.h index 74555e6665..ec1f0aef6f 100644 --- a/src/vt/utils/demangle/demangle.h +++ b/src/vt/utils/demangle/demangle.h @@ -51,20 +51,15 @@ #include "vt/utils/demangle/demangled_name.h" #include -#include #include #include #include -#include #include -#include #include #include namespace vt { namespace util { namespace demangle { -using StrContainerType = std::vector; - struct DemanglerUtils { template static inline std::string getTypeName() { @@ -72,34 +67,11 @@ struct DemanglerUtils { return s; } - template - static inline void splitString( - std::string const& s, char delim, StringOut result - ) { - std::stringstream ss; - ss.str(s); - std::string item; - while (std::getline(ss, item, delim)) { - *(result++) = item; - } - } - - static inline StrContainerType splitString( - std::string const& str, char delim - ) { - StrContainerType elems; - splitString(str, delim, std::back_inserter(elems)); - return elems; - } + static std::vector + splitString(std::string const& str, char delim); - static inline std::string removeSpaces(std::string const& str) { - StrContainerType const& str_split = splitString(str, ' '); - std::stringstream clean; - for (auto&& x : str_split) { - clean << x; - } - return clean.str(); - } + static std::string + removeSpaces(std::string const& str); }; /* @@ -115,17 +87,11 @@ struct DemanglerUtils { * > */ struct ActiveFunctionDemangler { - using StrParsedOutType = DemangledName; - using UtilType = DemanglerUtils; - - static StrParsedOutType parseActiveFunctionName(std::string const& str); + static DemangledName parseActiveFunctionName(std::string const& str); }; struct ActiveFunctorDemangler { - using StrParsedOutType = DemangledName; - using UtilType = DemanglerUtils; - - static StrParsedOutType parseActiveFunctorName( + static DemangledName parseActiveFunctorName( std::string const& name, std::string const& args ); }; diff --git a/src/vt/utils/demangle/demangled_name.h b/src/vt/utils/demangle/demangled_name.h index 78dfaed508..752644ffac 100644 --- a/src/vt/utils/demangle/demangled_name.h +++ b/src/vt/utils/demangle/demangled_name.h @@ -45,8 +45,6 @@ #if !defined INCLUDED_UTILS_DEMANGLE_DEMANGLED_NAME_H #define INCLUDED_UTILS_DEMANGLE_DEMANGLED_NAME_H -#include "vt/config.h" - #include namespace vt { namespace util { namespace demangle {