Fuse tight composer

Take a look at https://github.com/sriram87/edg4x-rose/blob/fuse/projects/fuse/src/analysis/abstract_object.C#L586. Here’s the implementation of this interface in ValueObject. This function routes the meetUpdate call to Composer::meetUpdate. Can we do the check for fullness before the call to Composer::meetUpdate? We can’t call isFull() until after Composer::meetUpdate() is done finding the right edge since isFull() takes the edge as input. However, we can check for whether the argument is the single Full object. Another way to do it is to force the composer to call code inside ValueObject after it finds the right edge and do the isFull check there. We can have AbstractObject::meetUpdate() and AbstractObject::meetUpdateCorrectEdge(). The former calls Composer::meetUpdate(), which then calls the latter, which then calls CPValueObject::meetUpdateV().

Greg Bronevetsky
Lawrence Livermore National Lab
(925) 424-5756
bronevetsky@llnl.gov<mailto:bronevetsky@llnl.gov>
http://greg.bronevetsky.com

From: Sriram Aananthakrishnan [mailto:notifications@github.com]
Sent: Wednesday, July 02, 2014 1:15 PM
To: sriram87/edg4x-rose
Cc: bronevet
Subject: Re: [edg4x-rose] Fuse tight composer (#4)


In projects/fuse/src/analysis/tight_composer.C:

> +    boost::shared_ptr<AnalysisMapAOType> amAO_p = boost::make_shared<AnalysisMapAOType>();

> +    list<ComposedAnalysis*>::iterator a = allAnalyses.begin();

> +    list<Expr2AnyKey>::iterator qIt;

> +    list<boost::shared_ptr<AOType> > aopList;

> +

> +    // Dispatch queries to each analysis

> +    for( ; a != allAnalyses.end(); ++a) {

> +      if(implementsExpr2AnyOp(*a)) {

> +        aopList.clear();

> +        for(qIt = queryList.begin(); qIt != queryList.end(); ++qIt) {

> +          Expr2AnyKey query = *qIt;

> +          // Transition this query to analysis state corresponding to *a

> +          tcqm.transToAnalState(query, *a);

> +          // dispatch the query to the analysis

> +          boost::shared_ptr<AOType> ao_p = Expr2AnyOp(*a, query.sgn, query.pedge);

> +          // Add it to the list

Here in ChainComposer::meetUpdateV
https://github.com/sriram87/edg4x-rose/blob/fuse/projects/fuse/src/analysis/compose.C#L963

the function pointer is set to ValueObject::meetUpdateV(). ChainComposer::meetUpdateV is responsible for calling ValueObject::meetUpdateV() at the correct PartEdge as the analysis that implemented the ValueObject could have run on a different transition system. It looks like ChainComposer calls the analysis implemented meetUpdateV directly. It is not being routed through AbstractObject where we thought about checking for Full objects before routing to individual objects.
Here is the interface we were talking about
https://github.com/sriram87/edg4x-rose/blob/fuse/projects/fuse/src/analysis/abstract_object.h#L413-L414

I dont think these are used anywhere. Perhaps we should change their signature to accept ValueObjects and perform the check for full objects and call meetUpdateV

—
Reply to this email directly or view it on GitHub<https://github.com/sriram87/edg4x-rose/pull/4/files#r14480684>.