예제 #1
0
        public Conditional Copy(DFG <Block> dfg, Dictionary <DFG <Block>, DFG <Block> > knownDFGCopys)
        {
            VariableBlock copyDeciding = null;

            if (DecidingBlock != null)
            {
                copyDeciding = (VariableBlock)dfg.Nodes.Single(x => DecidingBlock.OutputVariable == x.value.OutputVariable).value;
            }

            DFG <Block> copyGuarded = null;

            if (GuardedDFG != null && knownDFGCopys.ContainsKey(GuardedDFG))
            {
                copyGuarded = knownDFGCopys[GuardedDFG];
            }
            else if (GuardedDFG != null)
            {
                copyGuarded = GuardedDFG.Copy();
                knownDFGCopys.Add(GuardedDFG, copyGuarded);
            }

            DFG <Block> copyNext = null;

            if (NextDFG != null && knownDFGCopys.ContainsKey(NextDFG))
            {
                copyNext = knownDFGCopys[NextDFG];
            }
            else if (NextDFG != null)
            {
                copyNext = NextDFG.Copy();
                knownDFGCopys.Add(NextDFG, copyNext);
            }

            return(new Conditional(copyDeciding, copyGuarded, copyNext));
        }