[Ktechlab-devel] clarification about GenericElementFactory
Julian Bäume
julian at svg4all.de
Tue Jul 27 15:04:48 UTC 2010
Okay, I'll resend this mail with fixed line-breaks -_-
On Tuesday 27 July
2010 15:29:37 Zoltan Padrah wrote:
> Hello,
>
> In the current
implementation,
> the template shouldn't be instantiated directly.
> For an
example, see the basic_ec plugin.
>
> The DECLARE_ELEMENT_FACTORY_MEMBER
>
macro can be used to declare a variable
> of the template type, usually in
a class.
>
> REGISTER_ELEMENT_FACTORY creates
> an instance of the above
declared
> member and registers it in the
> simulation manager.
>
>
UNREGISTER_ELEMENT_FACTORY unregisters the
> instance.
>
> All 3 macros
take as parameter only the type of the new
> element.
>
> The template
class has the parameter <class ElementType> the
> new element type, and its
constructor takes as
> argument the ID of the element type. It's not
>
necessary to instantiate the template manually.
>
> This implementation
could be used from any plugin, so it should be
> moved somewhere else, I
guess in the interfaces folder.
Ahh, okay. I got it :)
> Other
implementation, that would scale even better,
> could be used as
following:
>
> outside of any class:
>
> DECLARE_ELEMENT_FACTORY(
>
FactoryName,
> SUPPORT_ELEMENT( Element1 )
> SUPPORT_ELEMENT( Element2 )
>
// and so on...
> );
>
> And the plugin can look like:
>
> class
>
MyPlugin : public IPlugin {
> FactoryName *m_factory;
>
> MyPlugin() {
>
m_factory = new FactoryName();
>
ISimulationManager::self()->registerElementFactory(m_factory);
> }
> void
unload(){
>
ISimulationManager::self()->unregisterElementFactory(m_factory);
> }
>
};
>
> This way, adding 1 new component takes 2 new lines in the source:
one
> for including its header, and the other to call a macro.
>
> The
implementation of the macros could be done by using many if-s
> internally,
but that shouldn't be visible to the programmer.
>
> Opinions about this?
I
think, I'd support that one. Looks pretty similar to what
I had in mind,
some hours ago.
The macro might be a little more complex, but once done,
it
would be easy to add new elements.
I can also imagine, that this can be
easily extended to
work with scripted plugins, too.
> 2010/7/27, Julian
Bäume <julian at svg4all.de>:
> > This could look like:
> >
> > // my cool
> >
// resistor
> > // implementation
> > DECLARE_ELEMENT_FACTORY(
> >
KTechLab::Element::Resistor
> > );
> >
> > REGISTER_ELEMENT_FACTORY(
> >
ElementFactory<KTechLab::Element::Resistor>
> > );
> >
> > class
KTechLab::Element::Resistor
> > : public IElement
> >{
> >
//implementation
> > };
bye then
julian
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/ktechlab-devel/attachments/20100727/f5a5583e/attachment.sig>
More information about the Ktechlab-devel
mailing list