56 lines
1.3 KiB
C++
56 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <iostream>
|
|
|
|
#ifdef __GNUG__
|
|
#include <cstdlib>
|
|
#include <memory>
|
|
#include <cxxabi.h>
|
|
#endif
|
|
|
|
//#define DDKIT_ENABLE_LIFETIME_LOGGER
|
|
|
|
namespace ddkit {
|
|
namespace utils {
|
|
namespace log {
|
|
|
|
|
|
template <typename Type>
|
|
class LifetimeLogger {
|
|
public:
|
|
LifetimeLogger() {
|
|
#ifdef DDKIT_ENABLE_LIFETIME_LOGGER
|
|
std::cerr << "Constructor of:\t" << typeName() << " @ " << this << std::endl;
|
|
#endif
|
|
}
|
|
|
|
~LifetimeLogger() {
|
|
#ifdef DDKIT_ENABLE_LIFETIME_LOGGER
|
|
std::cerr << "Destructor of: \t" << typeName() << " @ " << this << std::endl;
|
|
#endif
|
|
}
|
|
|
|
private:
|
|
std::string typeName() const {
|
|
#ifdef __GNUG__
|
|
const char* mangled = typeid(Type).name();
|
|
|
|
int status = 0;
|
|
char* name = abi::__cxa_demangle(mangled, nullptr, nullptr, &status);
|
|
if(status == 0) {
|
|
std::string demangledName(name);
|
|
delete name;
|
|
return demangledName;
|
|
}
|
|
return mangled;
|
|
#else
|
|
return typeid(Type).name();
|
|
#endif
|
|
}
|
|
};
|
|
|
|
} // namespace log
|
|
} // namespace utils
|
|
} // namespace ddkit
|