| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const HistogramIterationValue_1 = require("./HistogramIterationValue");
- /**
- * Used for iterating through histogram values.
- */
- class JsHistogramIterator /* implements Iterator<HistogramIterationValue> */ {
- constructor() {
- this.currentIterationValue = new HistogramIterationValue_1.default();
- }
- resetIterator(histogram) {
- this.histogram = histogram;
- this.savedHistogramTotalRawCount = histogram.totalCount;
- this.arrayTotalCount = histogram.totalCount;
- this.currentIndex = 0;
- this.currentValueAtIndex = 0;
- this.nextValueAtIndex = Math.pow(2, histogram.unitMagnitude);
- this.prevValueIteratedTo = 0;
- this.totalCountToPrevIndex = 0;
- this.totalCountToCurrentIndex = 0;
- this.totalValueToCurrentIndex = 0;
- this.countAtThisValue = 0;
- this.freshSubBucket = true;
- this.currentIterationValue.reset();
- }
- /**
- * Returns true if the iteration has more elements. (In other words, returns true if next would return an
- * element rather than throwing an exception.)
- *
- * @return true if the iterator has more elements.
- */
- hasNext() {
- if (this.histogram.totalCount !== this.savedHistogramTotalRawCount) {
- throw "Concurrent Modification Exception";
- }
- return this.totalCountToCurrentIndex < this.arrayTotalCount;
- }
- /**
- * Returns the next element in the iteration.
- *
- * @return the {@link HistogramIterationValue} associated with the next element in the iteration.
- */
- next() {
- // Move through the sub buckets and buckets until we hit the next reporting level:
- while (!this.exhaustedSubBuckets()) {
- this.countAtThisValue = this.histogram.getCountAtIndex(this.currentIndex);
- if (this.freshSubBucket) {
- // Don't add unless we've incremented since last bucket...
- this.totalCountToCurrentIndex += this.countAtThisValue;
- this.totalValueToCurrentIndex +=
- this.countAtThisValue *
- this.histogram.highestEquivalentValue(this.currentValueAtIndex);
- this.freshSubBucket = false;
- }
- if (this.reachedIterationLevel()) {
- const valueIteratedTo = this.getValueIteratedTo();
- Object.assign(this.currentIterationValue, {
- valueIteratedTo,
- valueIteratedFrom: this.prevValueIteratedTo,
- countAtValueIteratedTo: this.countAtThisValue,
- countAddedInThisIterationStep: this.totalCountToCurrentIndex - this.totalCountToPrevIndex,
- totalCountToThisValue: this.totalCountToCurrentIndex,
- totalValueToThisValue: this.totalValueToCurrentIndex,
- percentile: (100 * this.totalCountToCurrentIndex) / this.arrayTotalCount,
- percentileLevelIteratedTo: this.getPercentileIteratedTo(),
- });
- this.prevValueIteratedTo = valueIteratedTo;
- this.totalCountToPrevIndex = this.totalCountToCurrentIndex;
- this.incrementIterationLevel();
- if (this.histogram.totalCount !== this.savedHistogramTotalRawCount) {
- throw new Error("Concurrent Modification Exception");
- }
- return this.currentIterationValue;
- }
- this.incrementSubBucket();
- }
- throw new Error("Index Out Of Bounds Exception");
- }
- getPercentileIteratedTo() {
- return (100 * this.totalCountToCurrentIndex) / this.arrayTotalCount;
- }
- getPercentileIteratedFrom() {
- return (100 * this.totalCountToPrevIndex) / this.arrayTotalCount;
- }
- getValueIteratedTo() {
- return this.histogram.highestEquivalentValue(this.currentValueAtIndex);
- }
- exhaustedSubBuckets() {
- return this.currentIndex >= this.histogram.countsArrayLength;
- }
- incrementSubBucket() {
- this.freshSubBucket = true;
- this.currentIndex++;
- this.currentValueAtIndex = this.histogram.valueFromIndex(this.currentIndex);
- this.nextValueAtIndex = this.histogram.valueFromIndex(this.currentIndex + 1);
- }
- }
- exports.default = JsHistogramIterator;
- //# sourceMappingURL=JsHistogramIterator.js.map
|