Exemplo n.º 1
0
        public override void Add(TSinkEdge edge)
        {
            Sink.Add(edge);
            var edgeTwo = (TSourceEdge)Mapper.TryGetCreate(edge);

            Source.Add(edgeTwo);
        }
Exemplo n.º 2
0
        public override void Add(TSinkItem item)
        {
            if (item == null)
            {
                return;
            }
            Sink.Add(item);
            var itemTwo = Mapper.TryGetCreate(item);

            Source.Add(itemTwo);
        }
Exemplo n.º 3
0
        public virtual TSinkItem TryGetCreate(TSourceItem source)
        {
            var result = default(TSinkItem);

            if (!Dict.TryGetValue(source, out result))
            {
                if (!(source is TSourceEdge))
                {
                    var sink = CreateItem(this.Source, this.Sink, source);
                    if (ItemCreated != null)
                    {
                        ItemCreated(sink);
                    }
                    Sink.Add(sink);
                    RegisterPair(source, sink);
                    result = sink;
                }
                else
                {
                    var sourceEdge = (TSourceEdge)source;

                    var root = TryGetCreate(sourceEdge.Root);
                    var leaf = TryGetCreate(sourceEdge.Leaf);
                    Done.Add(sourceEdge.Root);
                    Done.Add(sourceEdge.Leaf);

                    if (!Dict.TryGetValue(source, out result))
                    {
                        var sinkEdge = CreateEdge(this.Source, this.Sink, sourceEdge);

                        sinkEdge.Root = root;
                        sinkEdge.Leaf = leaf;

                        if (ItemCreated != null)
                        {
                            ItemCreated(sinkEdge);
                        }

                        RegisterPair(sourceEdge, sinkEdge);

                        Sink.Add(sinkEdge);

                        EdgeCreated(sourceEdge, sinkEdge);
                        result = sinkEdge;
                    }
                }
            }

            return(result);
        }
Exemplo n.º 4
0
 public override ICollection <TSinkEdge> Edges(TSinkItem item)
 {
     //ICollection<TEdgeOne> result = Sink.Edges (item);
     if (true)  //(result == EmptyEgdes){
     {
         var itemTwo = Get(item);
         ICollection <TSourceEdge> _edgesTwo = null;
         if (itemTwo != null)
         {
             _edgesTwo = Source.Edges(itemTwo);
         }
         else
         {
             _edgesTwo = new EmptyCollection <TSourceEdge> ();
         }
         foreach (var edgeTwo in _edgesTwo)
         {
             Sink.Add((TSinkEdge)Mapper.TryGetCreate(edgeTwo));
         }
     }
     return(Sink.Edges(item));
 }
Exemplo n.º 5
0
        /// <summary>
        /// add all items of worker into SubGraph
        /// add invisible, but valid edges into SubGraph:
        /// </summary>
        /// <param name="worker"></param>
        protected virtual void CommitAdd(WalkerWorker1 <TItem, TEdge> worker)
        {
            var changeStack = new Queue <TItem> (worker.Affected);

            while (changeStack.Count > 0)
            {
                var item = changeStack.Dequeue();

                Sink.Add(item);

                // look if we have invisible, but valid edges
                var sink = Source as ISinkGraph <TItem, TEdge>;
                if (sink != null)
                {
                    foreach (var edge in sink.ComplementEdges(item, Sink))
                    {
                        if (!worker.Changed(edge))
                        {
                            changeStack.Enqueue(edge);
                            worker.AddChange(edge);
                        }
                    }
                }
                else
                {
                    foreach (var edge in Source.Fork(item))
                    {
                        if (worker.Contains(edge.Root) && worker.Contains(edge.Leaf))
                        {
                            if (!worker.Changed(edge))
                            {
                                changeStack.Enqueue(edge);
                                worker.AddChange(edge);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
 public override void Add(TItem item)
 {
     Sink.Add(item);
     Source.Add(item);
 }
Exemplo n.º 7
0
 public override void Add(TEdge edge)
 {
     Source.Add(edge);
     Sink.Add(edge);
 }