1 #include "caffe2/core/typeid.h" 2 #include "caffe2/core/scope_guard.h" 9 std::map<CaffeTypeId, string>& gTypeNames() {
10 static std::map<CaffeTypeId, string> g_type_names;
14 std::set<string>& gRegisteredTypeNames() {
15 static std::set<string> g_registered_type_names;
16 return g_registered_type_names;
19 std::mutex& gCaffe2TypeRegistrationMutex() {
20 static std::mutex g_caffe2_type_registration_mutex;
21 return g_caffe2_type_registration_mutex;
26 string Demangle(
const char* name) {
30 string Demangle(
const char* name) {
32 auto demangled = ::abi::__cxa_demangle(name,
nullptr,
nullptr, &status);
34 auto guard =
MakeGuard([demangled]() { free(demangled); });
35 return string(demangled);
41 string GetExceptionString(
const std::exception& e) {
43 return Demangle(
typeid(e).name()) +
": " + e.what();
45 return string(
"Exception (no RTTI available): ") + e.what();
53 struct UninitializedTypeNameRegisterer {
54 UninitializedTypeNameRegisterer() {
55 gTypeNames()[0] =
"nullptr (uninitialized)";
58 static UninitializedTypeNameRegisterer g_uninitialized_type_name_registerer;
detail::ScopeGuardImplDecay< F > MakeGuard(F &&f) noexcept(noexcept(detail::ScopeGuardImplDecay< F >(static_cast< F && >(f))))
ScopeGuard is a general implementation of the "Initialization is Resource Acquisition" idiom...
A global dictionary that holds information about what Caffe2 modules have been loaded in the current ...