private void AddEdge(ChangeRate changeRate, IChangeRateComputationStrategy changeRateComputationStrategy) { var source = changeRate.Source; var target = changeRate.Target; if (!this.adjacency.ContainsKey(source)) { this.adjacency[source] = new List <WeightedBidrectionalEdge <Currency> >(); this.TotalVertices += 1; } if (!this.adjacency.ContainsKey(target)) { this.adjacency[target] = new List <WeightedBidrectionalEdge <Currency> >(); this.TotalVertices += 1; } var originalRate = changeRate.Rate; var inverseRate = changeRateComputationStrategy.ComputeInverseRate(originalRate); this.adjacency[source] .Add(new WeightedBidrectionalEdge <Currency>(source, target, originalRate, inverseRate)); this.adjacency[target] .Add(new WeightedBidrectionalEdge <Currency>(target, source, inverseRate, originalRate)); this.TotalEdges += 1; }
internal CurrencyGraph( IEnumerable <ChangeRate> changeRates, IChangeRateComputationStrategy changeRateComputationStrategy) { this.adjacency = new Dictionary <Currency, ICollection <WeightedBidrectionalEdge <Currency> > >(); this.TotalEdges = 0; this.TotalVertices = 0; foreach (var changeRate in changeRates) { this.AddEdge(changeRate, changeRateComputationStrategy); } this.scannerGraphAlgorithm = new BfsScanner <Currency, WeightedBidrectionalEdge <Currency> >( new ScannerResultfactory <Currency, WeightedBidrectionalEdge <Currency> >()); }