public void readRegisters(ByteBuffer in) { registers = AVLTreeDigest.fromBytes(in); compression = registers.compression(); }
@Override public TDigest deserialize(ByteBuffer byteBuffer) { return MergingDigest.fromBytes(byteBuffer); } };
public void merge(PercentileCounter counter) { assert this.compression == counter.compression; registers.add(counter.registers); }
public double getResultEstimate() { return registers.quantile(quantileRatio); }
@Override protected void fixAggregates(int node) { super.fixAggregates(node); aggregatedCounts[node] = counts[node] + aggregatedCounts[left(node)] + aggregatedCounts[right(node)]; }
private void checkAggregates(int node) { assert aggregatedCounts[node] == counts[node] + aggregatedCounts[tree.left(node)] + aggregatedCounts[tree.right(node)]; if (node != IntAVLTree.NIL) { checkAggregates(tree.left(node)); checkAggregates(tree.right(node)); } }
public void writeRegisters(ByteBuffer out) { registers.compress(); registers.asSmallBytes(out); }
/** * Quick sort using an index array. On return, * values[order[i]] is in order as i goes 0..values.length * * @param order Indexes into values * @param values The values to sort. */ @SuppressWarnings("WeakerAccess") public static void sort(int[] order, double[] values) { sort(order, values, 0, values.length); }
private void reInitRegisters() { this.registers = TDigest.createAvlTreeDigest(this.compression); }
/** * Return the number of centroids in the tree. */ public int size() { return tree.size(); }
int bucket(double x) { if (x <= min) { return 0; } else if (x >= max) { return counts.length - 1; } else { return bucketIndex(x); } }
/** * Exposed for testing. */ int checkWeights() { return checkWeights(weight, totalWeight, lastUsedCell); }
@Override public String toString() { return "MergingDigest" + "-" + getScaleFunction() + "-" + (useWeightLimit ? "weight" : "kSize") + "-" + (useAlternatingSort ? "alternating" : "stable") + "-" + (useTwoLevelCompression ? "twoLevel" : "oneLevel"); } }
public void add(double v) { registers.add(v); }