17 #include <QStringList> 20 #if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) 21 #define GCC_USEDEMANGLE 24 #ifdef GCC_USEDEMANGLE 29 #if defined(_WIN32) && defined(NDEBUG) 32 char * __unDName(
char * outputString,
const char * name,
int maxStringLength,
33 void * (* pAlloc )(
size_t),
void (* pFree )(
void *),
34 unsigned short disableFlags);
39 namespace Reflection {
43 QString name(mangledName);
44 #ifdef GCC_USEDEMANGLE 46 char* unmangled = abi::__cxa_demangle(mangledName,
nullptr,
nullptr, &status);
50 name = QString(unmangled);
53 #elif defined(_WIN32) && defined(NDEBUG) 54 char *
const unmangled = __unDName(0, mangledName, 0, malloc, free, 0x2800);
57 QString unmangledName(unmangled);
58 name = unmangledName.split(
' ', QString::SkipEmptyParts).back();
62 name = name.split(
' ', QString::SkipEmptyParts).back();
74 return DemangleName(
typeid(*const_cast<Object*>(obj)).name());
77 TypeInfo::Concept::~Concept(){}
80 struct TypeInfo::Model<EmptyType> : Concept {
81 QString
GetName()
const override {
return QString(); }
82 QList<TypeInfo>
GetSuperclasses()
const override {
return QList<TypeInfo>(); }
86 : m_Self(
std::make_shared<Model<EmptyType> >())
97 return m_Self->GetName();
102 return m_Self->GetSuperclasses();
QString GetClassName(const Object *obj)
Light weight base class for most BlueBerry classes.
QString DemangleName(const char *mangledName)
QList< TypeInfo > GetSuperclasses() const
bool operator==(const TypeInfo &other) const