Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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> >());
        }