Пример #1
0
 protected virtual void RevoveEdgesOfChanged(WalkerWorker1 <TItem, TEdge> worker)
 {
     foreach (var edge in worker.Affected.OfType <TEdge>().ToArray())
     {
         if (worker.Changed(edge.Root) || worker.Changed(edge.Leaf))
         {
             worker.Remove(edge);
         }
     }
 }
Пример #2
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);
                            }
                        }
                    }
                }
            }
        }