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; } }
/// <summary> /// Creates a new features list. /// </summary> public RouterDbFeatures(RouterDb routerDb) { _routerDb = routerDb; _enumerator = routerDb.GetEdgeEnumerator(); }
public override void MoveTo(RouterDbEdgeEnumerator enumerator) { _edgeFactor = enumerator.FactorInEdgeDirection(_profile); _length = enumerator.EdgeLength(); }
internal uint GetBackwardWeight(RouterDbEdgeEnumerator enumerator) { this.MoveTo(enumerator); return(this.ForwardWeight); }
/// <summary> /// Moves this profile handler to the given edge. /// </summary> /// <param name="enumerator">The enumerator.</param> public abstract void MoveTo(RouterDbEdgeEnumerator enumerator);