6#include <QtCore/QByteArray>
18template <
class ComponentType>
24 typedef void* (*InterfaceExtractorPtr)(ComponentType& component);
46 const QByteArray& subId)
const override;
49 typedef QMap<QByteArray, InterfaceExtractorPtr> InterfaceExtractors;
50 InterfaceExtractors m_interfaceExtractors;
54template <
class InterfaceType,
class ComponentType>
58 typedef void* (*InterfaceExtractorPtr)(ComponentType& component);
59 typedef InterfaceType* (*ExtractorPtr)(ComponentType& component);
72template <
class ComponentType>
79template <
class ComponentType>
82 m_interfaceExtractors[interfaceName] = extractorPtr;
88template <
class ComponentType>
93 if (metaGroupId == MGI_INTERFACES){
94 for (
typename InterfaceExtractors::const_iterator iter = m_interfaceExtractors.begin();
95 iter != m_interfaceExtractors.end();
97 retVal.insert(iter.key());
105template <
class ComponentType>
114template <
class ComponentType>
118 const QByteArray& subId)
const
120 ComponentType* nativeTypePtr =
dynamic_cast<ComponentType*
>(&component);
121 if ((nativeTypePtr !=
nullptr) && subId.isEmpty()){
126 typename InterfaceExtractors::ConstIterator foundIter = m_interfaceExtractors.constFind(interfaceType.
GetName());
127 if (foundIter != m_interfaceExtractors.constEnd()){
128 InterfaceExtractorPtr extractorPtr = foundIter.value();
130 return extractorPtr(*nativeTypePtr);
136 foundIter = m_interfaceExtractors.constFind(nonConstType.
GetName());
137 if (foundIter != m_interfaceExtractors.constEnd()){
138 InterfaceExtractorPtr extractorPtr = foundIter.value();
140 return extractorPtr(*nativeTypePtr);
Standard implementation of static info for base component classes.
virtual void RegisterSubelementInfo(const QByteArray &subcomponentId, const IElementStaticInfo *staticInfoPtr)
Register static subcomponent info.
static istd::CClassInfo s_compInterfaceType
Main component interface.
This interface provide static information about element meta info.
InterfaceType *(* ExtractorPtr)(ComponentType &component)
void *(* InterfaceExtractorPtr)(ComponentType &component)
SubElementInterfaceRegistrator(TSubelementStaticInfo< ComponentType > &staticInfo, ExtractorPtr extractorPtr)
virtual void * GetComponentInterface(const istd::CClassInfo &interfaceType, IComponent &component, const QByteArray &subId) const override
Extract instance implemented specified interface from some component.
virtual void RegisterInterfaceExtractor(const QByteArray &interfaceName, InterfaceExtractorPtr extractorPtr)
Register interface ID for this static component info.
virtual const IElementStaticInfo * GetSubelementInfo(const QByteArray &subcomponentId) const override
Return number of interfaces for specific slot.
void *(* InterfaceExtractorPtr)(ComponentType &component)
TSubelementStaticInfo(const QByteArray &name, CBaseComponentStaticInfo &owner)
Constructor attaching this subelement info to the component.
virtual Ids GetMetaIds(int metaGroupId) const override
Get list of meta IDs associated with some meta key.
Represents platform independent type info and provide set of static class manipulation functions.
bool IsConst() const
Check if this class information represents const class.
const QByteArray & GetName() const
Get undecorated and platform undependent class name.
bool IsValid() const
Check if this class info object is valid.
bool IsVoid() const
Check if this class information represents void type.
CClassInfo GetConstCasted(bool enableConst=true) const
Get class with enabled or disabled const attribute.
Package with interfaces and class used for components concept.