1 #ifndef ProcessingDataPlugin_hxx
2 #define ProcessingDataPlugin_hxx
20 typedef std::string
Key;
21 typedef std::type_info
Type;
22 typedef std::map<Key,ProcessingDataPlugin *>
TypeMap;
26 std::string _displayName;
28 static std::string demangle(
const std::string & mangledName)
30 std::string result = mangledName;
32 int demangleError = 0;
33 char * demangled = abi::__cxa_demangle(mangledName.c_str(),0,0,&demangleError);
34 if (!demangleError && demangled)
36 if (demangled) free(demangled);
44 _name = _displayName = type.name();
45 _displayName = displayName.empty()?
46 demangle(_name) : displayName;
48 getTypeMap().insert(std::make_pair(_name,
this));
50 ~ProcessingDataPlugin()
52 if (
lookUp(_type)==
this) getTypeMap().erase(_type.name());
55 const std::string &
color()
const {
return _color; }
56 const std::string &
name()
const {
return _name; }
57 const std::string &
displayName()
const {
return _displayName; }
61 static std::list<std::string>
types()
63 std::list<std::string> result;
64 for (TypeMap::iterator it=getTypeMap().begin();
65 it!=getTypeMap().end(); it++)
67 result.push_back(it->first);
73 TypeMap::iterator it = getTypeMap().find(type.name());
74 if (it==getTypeMap().end())
return 0;
77 static std::string
colorFor(
const std::type_info & type)
80 if (plugin)
return plugin->
color();
87 return demangle(type.name());
91 template <
typename DataType>
96 Registrator(
const std::string & color,
const std::string & displayName=
"")
107 #endif//ProcessingDataPlugin_hxx