public CountValueContainer(final LongToIntHashMap countCounter, final int valueRadix, final boolean storePrefixes, final long[] numNgramsForEachOrder) {
super(valueRadix, storePrefixes, numNgramsForEachOrder);
final boolean hasDefaultVal = countCounter.get(getDefaultVal().asLong(), -1) >= 0;
countsForRank = new long[countCounter.size() + (hasDefaultVal ? 0 : 1)];
countIndexer = new LongToIntHashMap();
int k = 0;
for (final Entry pair : countCounter.getObjectsSortedByValue(true)) {
countIndexer.put(pair.key, countIndexer.size());
countsForRank[k++] = pair.key;
if (countIndexer.size() == defaultValRank && !hasDefaultVal) {
countIndexer.put(getDefaultVal().asLong(), countIndexer.size());
countsForRank[k++] = getDefaultVal().asLong();
}
}
if (countIndexer.size() < defaultValRank && !hasDefaultVal) {
countIndexer.put(getDefaultVal().asLong(), countIndexer.size());
countsForRank[k++] = getDefaultVal().asLong();
}
valueWidth = CustomWidthArray.numBitsNeeded(countIndexer.size());
}