Example #1
0
        internal static EdgeFactor FactorInEdgeDirection(this RouterDbEdgeEnumerator enumerator, Profile profile)
        {
            var factor = profile.Factor(enumerator.GetAttributes());

            if (!enumerator.Forward)
            {
                factor = factor.Reverse;
            }
            return(factor);
        }
        public override void MoveTo(RouterDbEdgeEnumerator enumerator)
        {
            // reset all the things.
            _enumerator     = enumerator;
            _weightForward  = null;
            _weightBackward = null;
            _edgeFactor     = null;
            _length         = null;

            if (_coder.Get(enumerator.Enumerator, out var weight))
            { // get from the storage.
                if (weight >= (1 << 26))
                {
                    _weightForward  = weight - (1 << 26);
                    _weightBackward = 0;
                }
                else if (weight >= (1 << 25))
                {
                    _weightForward  = 0;
                    _weightBackward = weight - (1 << 25);
                }
                else
                {
                    _weightForward  = weight;
                    _weightBackward = weight;
                }
            }
            else
            { // get the factor from the profile and store it.
                this.ExtractFromProfileAndStore();
            }

            // reverse if it needs reversing.
            if (!_enumerator.Forward)
            {
                var t = _weightBackward;
                _weightBackward = _weightForward;
                _weightForward  = t;
            }
        }
Example #3
0
        /// <summary>
        /// Creates a new features list.
        /// </summary>
        public RouterDbFeatures(RouterDb routerDb)
        {
            _routerDb = routerDb;

            _enumerator = routerDb.GetEdgeEnumerator();
        }
Example #4
0
        public override void MoveTo(RouterDbEdgeEnumerator enumerator)
        {
            _edgeFactor = enumerator.FactorInEdgeDirection(_profile);

            _length = enumerator.EdgeLength();
        }
Example #5
0
 internal uint GetBackwardWeight(RouterDbEdgeEnumerator enumerator)
 {
     this.MoveTo(enumerator);
     return(this.ForwardWeight);
 }
Example #6
0
 /// <summary>
 /// Moves this profile handler to the given edge.
 /// </summary>
 /// <param name="enumerator">The enumerator.</param>
 public abstract void MoveTo(RouterDbEdgeEnumerator enumerator);