private void addPartitions(FeatureRange range, long part, long partSize, int first, int last, boolean isNeg) {
        for (int i = first; i < last; ++i) {
            range.addPartition(new RangePartition(
                    range.getKey(), (part + i) * partSize, (part + i + 1) * partSize - 1, isNeg));
        }
    }
Partitions all the feature ranges according to the arity and bounds
set in the PredicateOptions, and updates the ranges with a set of
partitions and edge partitions.
This is required to be able to store a range in the PredicateIndex.

@author Magnar Nedland
@author bjorncs
predicate-search-core/src/main/java/com/yahoo/search/predicate/optimization/ComplexNodeTransformer.java