[gme-users] Use of BON Extender

Ioannis Ntalamagkas i.ntalamagkas at cs.manchester.ac.uk
Tue Aug 4 06:35:31 CDT 2009


I am having a problem into using the BON extender correctly for our 
meta-model. The story is as follows::

We are trying to define an interpreter for our meta-model which we call 
XMAN_META. We use the BON Extender that correctly generates all 
meta-classes (XMAN_META_CLASSES). We also generate XMANVisitor and 
populate its methods accordingly. We then build the interpreter 
component using BON II. Inside the InvokeEx method we are doing:

> XMANVisitor * xman_visitor = new XMANVisitor();
> std::set<FCO>::const_iterator it = setSelectedFCOs.begin();
> (*it)->accept(xman_visitor);
This does not work because the type of the selected FCO is a META_GME 
type (FCOBase or something) and not of type XMAN_META_CLASSES. To force 
the latter, we changed our code to:

> 1: XMANVisitor * xman_visitor = new XMANVisitor();
> 2: std::set<FCO>::const_iterator it = setSelectedFCOs.begin();
> 3: XMAN_BON::SomeType object = XMAN_BON::SomeType(*it);
> 4: (*it)->accept(xman_visitor);
In the third line we construct an object of XMAN_META_CLASSES type. Now 
the visitor correctly visits the object, but it does not visit its 

We suspect that the reason is the auto-generated code of SomeTypeImpl's 
accept method. For convenience I quote it below:
>     void XMAN_BON::SomeTypeImpl::accept( XMAN_BON::XMANVisitor *pVisitor){
>     // visit the XMAN_BON::SomeType - THIS WORKS FINE
>     pVisitor->visitSomeType( XMAN_BON::SomeType( this));
>     std::set<BON::FCO> children = ModelImpl::getChildFCOs();
>     for( std::set<BON::FCO>::const_iterator it = children.begin(); it 
> != children.end(); ++it)
>     {
>         (*it)->accept( pVisitor);
>     }
> }
In the second part of the accept method, should it not automatically 
down-cast the FCOs children of "SomeType" to the correct 
XMAN_META_CLASSES type? Actually this for-loop should be more 
complicated so that it automatically down-casts the FCOs children of 
"SomeType" to the correct sub-type? Is there something wrong in my 
understanding? Am I not using BON_Extender in the correct way? Any 
advice is appreciated.

Thank you,

More information about the gme-users mailing list