    001    package com.hammurapi.reasoning.impl;
    002
    003    import org.eclipse.emf.common.util.TreeIterator;
    004    import org.eclipse.emf.ecore.EObject;
    005
    006    import com.hammurapi.flow.Flow;
    007
    008    /**
    009     * Optimizes flow by setting inline flag to true for nodes and
    010     * transitions which form a chain and therefore there is no reason
    011     * to spawn multiple task for execution of each of them.
    012     * @author Pavel Vlasov
    013     *
    014     */
    015    public class IniliningOptimizer implements RuleSetFlowOptimizer {
    016
    017            /*
    018             * Algorithm:
    019             * 1. Iterate over nodes.
    020             * 2. If the node has one outbound transition to another node,
    021             *    then mark the transition and the target node as inline..
    022             */
    023
    024            @Override
    025            public void optimize(Flow ruleSetFlow) {
    026                    boolean optimized;
    027                    Z: do {
    028                            optimized = false;
    029                            TreeIterator<EObject> rcit = ruleSetFlow.eAllContents();
    030                            while (rcit.hasNext()) {
    031                                    EObject next = rcit.next();
    032
    033                                    throw new UnsupportedOperationException();
    034                            }
    035                    } while (optimized);
    036            }
    037
    038            /**
    039             * This optimization shall be executed after transition sharing optimization.
    040             */
    041            @Override
    042            public int getOrder() {
    043                    return 20;
    044            }
    045
    046    }