// Path: src/main/java/com/github/davidmoten/rtree/geometry/Geometry.java
// public interface Geometry {
// 
//     /**
//      * <p>
//      * Returns the distance to the given {@link Rectangle}. For a {@link Rectangle}
//      * this might be Euclidean distance but for an EPSG4326 lat-long Rectangle might
//      * be great-circle distance. The distance function should satisfy the following
//      * properties:
//      * </p>
//      * 
//      * <p>
//      * <code>distance(r) &gt;= 0</code>
//      * </p>
//      * 
//      * <p>
//      * <code>if r1 contains r2 then distance(r1)&lt;=distance(r2)</code>
//      * </p>
//      * 
//      * 
//      * @param r
//      *            rectangle to measure distance to
//      * @return distance to the rectangle r from the geometry
//      */
//     double distance(Rectangle r);
// 
//     /**
//      * Returns the minimum bounding rectangle of this geometry.
//      * 
//      * @return minimum bounding rectangle
//      */
//     Rectangle mbr();
// 
//     boolean intersects(Rectangle r);
// 
//     boolean isDoublePrecision();
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/internal/EntryDefault.java
// public final class EntryDefault<T, S extends Geometry> implements Entry<T, S> {
//     private final T value;
//     private final S geometry;
// 
//     /**
//      * Constructor.
//      * 
//      * @param value
//      *            the value of the entry
//      * @param geometry
//      *            the geometry of the value
//      */
//     public EntryDefault(T value, S geometry) {
//         Preconditions.checkNotNull(geometry);
//         this.value = value;
//         this.geometry = geometry;
//     }
// 
//     /**
//      * Factory method.
//      * 
//      * @param <T>
//      *            type of value
//      * @param <S>
//      *            type of geometry
//      * @param value
//      *            object being given a spatial context
//      * @param geometry
//      *            geometry associated with the value
//      * @return entry wrapping value and associated geometry
//      */
//     public static <T, S extends Geometry> Entry<T, S> entry(T value, S geometry) {
//         return new EntryDefault<T, S>(value, geometry);
//     }
// 
//     /**
//      * Returns the value wrapped by this {@link EntryDefault}.
//      * 
//      * @return the entry value
//      */
//     @Override
//     public T value() {
//         return value;
//     }
// 
//     @Override
//     public S geometry() {
//         return geometry;
//     }
// 
//     @Override
//     public String toString() {
//         String builder = "Entry [value=" + value + ", geometry=" + geometry + "]";
//         return builder;
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(value, geometry);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         @SuppressWarnings("rawtypes")
//         Optional<EntryDefault> other = ObjectsHelper.asClass(obj, EntryDefault.class);
//         if (other.isPresent()) {
//             return Objects.equals(value, other.get().value)
//                     && Objects.equals(geometry, other.get().geometry);
//         } else
//             return false;
//     }
// 
// }


import com.github.davidmoten.rtree.geometry.Geometry;
import com.github.davidmoten.rtree.internal.EntryDefault;
package com.github.davidmoten.rtree;


public final class Entries {

    private Entries() {
        // prevent instantiation
    }
    
// Path: src/main/java/com/github/davidmoten/rtree/geometry/Geometry.java
// public interface Geometry {
// 
//     /**
//      * <p>
//      * Returns the distance to the given {@link Rectangle}. For a {@link Rectangle}
//      * this might be Euclidean distance but for an EPSG4326 lat-long Rectangle might
//      * be great-circle distance. The distance function should satisfy the following
//      * properties:
//      * </p>
//      * 
//      * <p>
//      * <code>distance(r) &gt;= 0</code>
//      * </p>
//      * 
//      * <p>
//      * <code>if r1 contains r2 then distance(r1)&lt;=distance(r2)</code>
//      * </p>
//      * 
//      * 
//      * @param r
//      *            rectangle to measure distance to
//      * @return distance to the rectangle r from the geometry
//      */
//     double distance(Rectangle r);
// 
//     /**
//      * Returns the minimum bounding rectangle of this geometry.
//      * 
//      * @return minimum bounding rectangle
//      */
//     Rectangle mbr();
// 
//     boolean intersects(Rectangle r);
// 
//     boolean isDoublePrecision();
// }
// 
// Path: src/main/java/com/github/davidmoten/rtree/internal/EntryDefault.java
// public final class EntryDefault<T, S extends Geometry> implements Entry<T, S> {
//     private final T value;
//     private final S geometry;
// 
//     /**
//      * Constructor.
//      * 
//      * @param value
//      *            the value of the entry
//      * @param geometry
//      *            the geometry of the value
//      */
//     public EntryDefault(T value, S geometry) {
//         Preconditions.checkNotNull(geometry);
//         this.value = value;
//         this.geometry = geometry;
//     }
// 
//     /**
//      * Factory method.
//      * 
//      * @param <T>
//      *            type of value
//      * @param <S>
//      *            type of geometry
//      * @param value
//      *            object being given a spatial context
//      * @param geometry
//      *            geometry associated with the value
//      * @return entry wrapping value and associated geometry
//      */
//     public static <T, S extends Geometry> Entry<T, S> entry(T value, S geometry) {
//         return new EntryDefault<T, S>(value, geometry);
//     }
// 
//     /**
//      * Returns the value wrapped by this {@link EntryDefault}.
//      * 
//      * @return the entry value
//      */
//     @Override
//     public T value() {
//         return value;
//     }
// 
//     @Override
//     public S geometry() {
//         return geometry;
//     }
// 
//     @Override
//     public String toString() {
//         String builder = "Entry [value=" + value + ", geometry=" + geometry + "]";
//         return builder;
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(value, geometry);
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         @SuppressWarnings("rawtypes")
//         Optional<EntryDefault> other = ObjectsHelper.asClass(obj, EntryDefault.class);
//         if (other.isPresent()) {
//             return Objects.equals(value, other.get().value)
//                     && Objects.equals(geometry, other.get().geometry);
//         } else
//             return false;
//     }
// 
// }


// Path: src/main/java/com/github/davidmoten/rtree/Entries.java
import com.github.davidmoten.rtree.geometry.Geometry;
import com.github.davidmoten.rtree.internal.EntryDefault;

package com.github.davidmoten.rtree;


public final class Entries {

    private Entries() {
        // prevent instantiation
    }
    
    public static <T, S extends Geometry> Entry<T,S> entry(T object, S geometry) {