Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
        public static void Main(string[] args)
        {
            Visitor <string> visitor = new DefaultVisitor();
            IVehicle         vehicle = new Car();
            string           text    = vehicle.Accept(visitor);

            Console.WriteLine(text);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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());
        }
Exemplo n.º 6
0
        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);
        }