/// <summary> /// The Next. /// </summary> /// <param name="offsetBase">The offsetBase<see cref="int"/>.</param> /// <param name="offsetFactor">The offsetFactor<see cref="int"/>.</param> /// <param name="indexOffset">The indexOffset<see cref="int"/>.</param> /// <param name="x">The x<see cref="int"/>.</param> /// <returns>The <see cref="int"/>.</returns> public override int Next(int offsetBase, int offsetFactor, int indexOffset, int x) { if (min != NULL_KEY && x < min) { return(min); } BaseSpectrum scopesItem; int x_highest = highest(x); int scopesKey; scopesKey = offsetBase + (indexOffset * parentSqrt) + x_highest; int maximumLow = NULL_KEY; if (scopes.TryGet(scopesKey, out scopesItem)) { maximumLow = scopesItem.IndexMax; } if (maximumLow != NULL_KEY && lowest(x) < maximumLow) { int _offset = scopesItem.Next(offsetBase + (offsetFactor * parentSqrt), (offsetFactor * parentSqrt), (indexOffset * parentSqrt) + x_highest, lowest(x)); return(index(x_highest, _offset)); } if (sigmaNode == null) { return(NULL_KEY); } //======================// //from sigmaNode part //======================// int successorCluster = sigmaNode.Next(x_highest); if (successorCluster == NULL_KEY) { return(NULL_KEY); } scopesKey = offsetBase + (indexOffset * parentSqrt) + successorCluster; scopes.TryGet(scopesKey, out scopesItem); int offset = scopesItem.IndexMin; return(index(successorCluster, offset)); }