public override void Add(TSinkEdge edge) { Sink.Add(edge); var edgeTwo = (TSourceEdge)Mapper.TryGetCreate(edge); Source.Add(edgeTwo); }
public override void Add(TSinkItem item) { if (item == null) { return; } Sink.Add(item); var itemTwo = Mapper.TryGetCreate(item); Source.Add(itemTwo); }
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); }
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)); }
/// <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); } } } } } }
public override void Add(TItem item) { Sink.Add(item); Source.Add(item); }
public override void Add(TEdge edge) { Source.Add(edge); Sink.Add(edge); }