package com.github.davidmoten.rtree; import com.github.davidmoten.guavamini.Preconditions; import com.github.davidmoten.rtree.geometry.Geometry; /** * Configures an RTree prior to instantiation of an {@link RTree}. */ public final class Context<T, S extends Geometry> { private final int maxChildren; private final int minChildren; private final Splitter splitter; private final Selector selector; private final Factory<T, S> factory; /** * Constructor. * * @param minChildren * minimum number of children per node (at least 1) * @param maxChildren * max number of children per node (minimum is 3) * @param selector * algorithm to select search path * @param splitter * algorithm to split the children across two new nodes * @param factory * node creation factory */ public Context(int minChildren, int maxChildren, Selector selector, Splitter splitter, Factory<T, S> factory) { Preconditions.checkNotNull(splitter); Preconditions.checkNotNull(selector); Preconditions.checkArgument(maxChildren > 2); Preconditions.checkArgument(minChildren >= 1); Preconditions.checkArgument(minChildren < maxChildren); Preconditions.checkNotNull(factory); this.selector = selector; this.maxChildren = maxChildren; this.minChildren = minChildren; this.splitter = splitter; this.factory = factory; } private Context() { this(2, 4, new SelectorMinimalAreaIncrease(), new SplitterQuadratic(), Factories.<T, S> defaultFactory()); } public int maxChildren() { return maxChildren; } public int minChildren() { return minChildren; } public Splitter splitter() { return splitter; } public Selector selector() { return selector; } public Factory<T, S> factory() { return factory; } }