AWSAppender.CloudWatch.Services.UnitConverter.PerformConvert C# (CSharp) Method

PerformConvert() private method

private PerformConvert ( StandardUnit to ) : double
to Amazon.CloudWatch.StandardUnit
return double
        private double PerformConvert(StandardUnit to)
        {
            if (_converterGraph == null)
                GenerateGraph();

            var queue = new Queue<UnitGraphNode>();
            var visited = new HashSet<UnitGraphNode>();
            var multipliers = new Dictionary<UnitGraphNode, double>();

            var fromNode = _converterGraph[_from];
            queue.Enqueue(fromNode);
            multipliers.Add(fromNode, 1.0);

            while (queue.Any())
            {
                var n = queue.Dequeue();
                if (_converterGraph[to] == n)
                {
                    if (!fromNode.Links.Select(l => l.Value.OtherNode).Contains(n))
                        fromNode.LinkTo(n, multipliers[n]);
                    return multipliers[n] * _value;
                }

                if (!visited.Contains(n))
                {
                    visited.Add(n);
                    var multiplier = multipliers[n];
                    foreach (var link in n.Links.Values)
                    {
                        if (!visited.Contains(link.OtherNode))
                        {
                            queue.Enqueue(link.OtherNode);
                            if (!multipliers.ContainsKey(link.OtherNode))
                                multipliers.Add(link.OtherNode, multiplier * link.Multiplier);
                        }
                    }
                }
            }

            throw new ConversionNotSupportedException();
        }