diff --git a/BlueBerry/Bundles/org.blueberry.core.runtime/src/berryReflection.cpp b/BlueBerry/Bundles/org.blueberry.core.runtime/src/berryReflection.cpp index ed6db9c471..e96f766381 100644 --- a/BlueBerry/Bundles/org.blueberry.core.runtime/src/berryReflection.cpp +++ b/BlueBerry/Bundles/org.blueberry.core.runtime/src/berryReflection.cpp @@ -1,109 +1,111 @@ /*=================================================================== BlueBerry Platform Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "berryReflection.h" #include "berryObject.h" +#include + // Better name demangling for gcc #if __GNUC__ > 3 || ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) #define GCC_USEDEMANGLE #endif #ifdef GCC_USEDEMANGLE #include #include #endif #if defined(_WIN32) && defined(NDEBUG) // exported from VC CRT extern "C" char * __unDName(char * outputString, const char * name, int maxStringLength, void * (* pAlloc )(size_t), void (* pFree )(void *), unsigned short disableFlags); #endif namespace berry { namespace Reflection { QString DemangleName(const char* mangledName) { QString name(mangledName); #ifdef GCC_USEDEMANGLE int status; char* unmangled = abi::__cxa_demangle(mangledName, 0, 0, &status); if(status == 0) { name = QString(unmangled); free(unmangled); } #elif defined(_WIN32) && defined(NDEBUG) char * const unmangled = __unDName(0, mangledName, 0, malloc, free, 0x2800); if (unmangled) { QString unmangledName(unmangled); name = unmangledName.split(' ', QString::SkipEmptyParts).back(); free(unmangled); } #else name = name.split(' ', QString::SkipEmptyParts).back(); #endif return name; } #ifdef GetClassName // clash with WinUser.h definition #undef GetClassName #endif QString GetClassName(const Object* obj) { return DemangleName(typeid(*const_cast(obj)).name()); } TypeInfo::Concept::~Concept(){} template<> struct TypeInfo::Model : Concept { QString GetName() const { return QString(); } QList GetSuperclasses() const { return QList(); } }; TypeInfo::TypeInfo() : m_Self(std::make_shared >()) { } bool TypeInfo::operator==(const TypeInfo& other) const { return this->GetName() == other.GetName(); } QString TypeInfo::GetName() const { return m_Self->GetName(); } QList TypeInfo::GetSuperclasses() const { return m_Self->GetSuperclasses(); } } }