Search in sources :

Example 1 with DirectedGraph

use of claw.tatsu.analysis.topology.DirectedGraph in project claw-compiler by C2SM-RCM.

the class ClawTranslator method reorderTransformations.

/**
 */
private void reorderTransformations() {
    if (getGroups().containsKey(ScaForward.class)) {
        TransformationGroup tg = getGroups().get(ScaForward.class);
        if (tg.count() <= 1) {
            return;
        }
        DirectedGraph<Transformation> dg = new DirectedGraph<>();
        Map<String, List<Transformation>> fctMap = new HashMap<>();
        for (Transformation t : tg.getTransformations()) {
            ScaForward p = (ScaForward) t;
            dg.addNode(p);
            if (fctMap.containsKey(p.getCallingFctName())) {
                List<Transformation> tList = fctMap.get(p.getCallingFctName());
                tList.add(p);
            } else {
                List<Transformation> tList = new ArrayList<>();
                tList.add(p);
                fctMap.put(p.getCallingFctName(), tList);
            }
        }
        for (Transformation t : tg.getTransformations()) {
            ScaForward p = (ScaForward) t;
            if (p.getCalledFctName() != null && fctMap.containsKey(p.getCalledFctName())) {
                List<Transformation> tList = fctMap.get(p.getCalledFctName());
                for (Transformation end : tList) {
                    dg.addEdge(p, end);
                }
            }
        }
        List<Transformation> ordered = TopologicalSort.sort(TopologicalSort.reverseGraph(dg));
        tg.setTransformations(ordered);
    }
}
Also used : ScaForward(claw.wani.transformation.sca.ScaForward) Transformation(claw.shenron.transformation.Transformation) DirectedGraph(claw.tatsu.analysis.topology.DirectedGraph) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) DependentTransformationGroup(claw.shenron.transformation.DependentTransformationGroup) IndependentTransformationGroup(claw.shenron.transformation.IndependentTransformationGroup) TransformationGroup(claw.shenron.transformation.TransformationGroup) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

DependentTransformationGroup (claw.shenron.transformation.DependentTransformationGroup)1 IndependentTransformationGroup (claw.shenron.transformation.IndependentTransformationGroup)1 Transformation (claw.shenron.transformation.Transformation)1 TransformationGroup (claw.shenron.transformation.TransformationGroup)1 DirectedGraph (claw.tatsu.analysis.topology.DirectedGraph)1 ScaForward (claw.wani.transformation.sca.ScaForward)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1