public void ReduceChildrenCascades() { ParameterExpression intVar = Expression.Variable(typeof(int)); List <int> list = new List <int>(); var foreachExp = new ForEachExpression( intVar, Expression.Constant(Enumerable.Range(5, 4)), Expression.Call( Expression.Constant(list), typeof(List <int>).GetMethod(nameof(List <int> .Insert)), Expression.Constant(0), intVar ) ); // Check that not only has the visitor reduced the foreach into a block // but the using within that block into a try…finally. Expression reduced = new DefaultVisitor().Visit(foreachExp); var block = (BlockExpression)reduced; var tryExp = (TryExpression)block.Expressions[1]; var loop = (LoopExpression)tryExp.Body; var innerBlock = (BlockExpression)loop.Body; var call = (MethodCallExpression)innerBlock.Expressions.Last(); var instance = (ConstantExpression)call.Object; Assert.Same(list, instance.Value); }
public override object Run(WorkFlowContext context, SearchMode mode, WorkFlow.Visitors.IVisitor visitor = null) { if (visitor == null) { visitor = new DefaultVisitor(); } Queue <string> fila = new Queue <string>(); List <string> mark = new List <string>(); fila.Enqueue(context.SourceState); mark.Add(context.SourceState); while (fila.Count != 0) { string statusfila = fila.Dequeue(); context.SourceState = statusfila; foreach (var item in this.GetActivities(context).OrderBy(x => x.Operation)) { context.Operation = item.Operation; string newstatus = this.GetNextStatus(context); visitor.Visit(statusfila, new Activity { Operation = item.Operation, Description = item.Description }, newstatus); if (!mark.Contains(newstatus)) { fila.Enqueue(newstatus); mark.Add(newstatus); } } } return(visitor.EndVisit()); }
public static void Main(string[] args) { Visitor <string> visitor = new DefaultVisitor(); IVehicle vehicle = new Car(); string text = vehicle.Accept(visitor); Console.WriteLine(text); }
public void Test_Visitor0() { Visitor <string> visitor = new DefaultVisitor(); IVehicle vehicle1 = new Car(); string text1 = vehicle1.Accept(visitor); Assert.Equal("car", text1); IVehicle vehicle2 = new Moto(); string text2 = vehicle2.Accept(visitor); Assert.Equal("moto", text2); }
public override object Run(WorkFlowContext context, SearchMode mode, IVisitor visitor = null) { if (visitor == null) { visitor = new DefaultVisitor(); } if (mode == SearchMode.Depth) { RunInDepth(context, visitor); } else if (mode == SearchMode.Breadth) { RunInWidth(context, visitor); } return(visitor.EndVisit()); }
public void ReduceChildrenCascades() { var intVar = Expression.Variable(typeof(int)); List<int> list = new List<int>(); var foreachExp = new ForEachExpression( intVar, Expression.Constant(Enumerable.Range(5, 4)), Expression.Call( Expression.Constant(list), typeof(List<int>).GetMethod(nameof(List<int>.Insert)), Expression.Constant(0), intVar ) ); // Check that not only has the visitor reduced the foreach into a block // but the using within that block into a try…finally. var reduced = new DefaultVisitor().Visit(foreachExp); var block = (BlockExpression)reduced; var tryExp = (TryExpression)block.Expressions[1]; var loop = (LoopExpression)tryExp.Body; var innerBlock = (BlockExpression)loop.Body; var call = (MethodCallExpression)innerBlock.Expressions.Last(); var instance = (ConstantExpression)call.Object; Assert.Same(list, instance.Value); }