예제 #1
0
        public override bool Visit <TInput, TOutput>(WidenTypeNode <TInput, TOutput> node,
                                                     Func <RuntimeVisitor, bool> next)
        {
            Append("ConvertNode[{0}] => {1}", Tokens <TInput>(), Tokens <TOutput>());

            return(Indent(next));
        }
예제 #2
0
 public virtual bool Visit <TInput, TOutput>(WidenTypeNode <TInput, TOutput> node,
                                             Func <RuntimeVisitor, bool> next)
     where TInput : class, TOutput
     where TOutput : class
 {
     return(next(this));
 }
        public override bool Visit <TInput, TOutput>(WidenTypeNode <TInput, TOutput> node,
                                                     Func <RuntimeVisitor, bool> next)
        {
            _current = _vertices.Get(--_noId, id => new Vertex(typeof(WidenTypeNode <,>), typeof(TInput), ""));

            if (_stack.Count > 0)
            {
                _edges.Add(new Edge(_stack.Peek(), _current, _current.TargetType.Name));
            }

            return(Next(() => base.Visit(node, next)));
        }
예제 #4
0
        public bool Find()
        {
            if (_node != null)
            {
                return(true);
            }

            WidenTypeNode <TInput, TOutput> widenTypeNode = _input.Successors
                                                            .OfType <WidenTypeNode <TInput, TOutput> >()
                                                            .FirstOrDefault();

            if (widenTypeNode != null)
            {
                _node = widenTypeNode;
            }
            else
            {
                _node = new WidenTypeNode <TInput, TOutput>(_output);
                _input.AddActivation(_node);
            }

            return(_node != null);
        }