content: //   RTreeWrapper.java
  //   Java Spatial Index Library
  //   Copyright (C) 2002-2005 Infomatiq Limited.
  //  
  //  This library is free software; you can redistribute it and/or
  //  modify it under the terms of the GNU Lesser General Public
  //  License as published by the Free Software Foundation; either
  //  version 2.1 of the License, or (at your option) any later version.
  //  
  //  This library is distributed in the hope that it will be useful,
  //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  //  Lesser General Public License for more details.
  //  
  //  You should have received a copy of the GNU Lesser General Public
  //  License along with this library; if not, write to the Free Software
  //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  
  package net.sf.jsi;
  
  import gnu.trove.procedure.TIntProcedure;
  
  import java.util.Properties;
  
  import net.sf.jsi.rtree.RTree;
  
  /**
   * A completely useless wrapper class for the RTree class.
   * 
   * Actually the point to introduce the same overhead as 
   * the SILWrapper class, so that performance comparisons
   * can be made.
   */
  public class RTreeWrapper implements SpatialIndex {
    private RTree tree;
    
    class IntProcedure2 implements TIntProcedure {
      private TIntProcedure m_intProcedure = null;
      
      public IntProcedure2(TIntProcedure ip) {
        m_intProcedure = ip;
      }
      
      public boolean execute(int i) {
        return m_intProcedure.execute(i);
      }
    }
    
    /**
     * @see net.sf.jsi.SpatialIndex#init(Properties)
     */
    public void init(Properties props) {
      // create a memory-based storage manager
      
      tree = new RTree();
      tree.init(props);
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#nearest(Point, gnu.trove.TIntProcedure, float)
     */
    public void nearest(Point p, TIntProcedure v, float furthestDistance) {
      tree.nearest(new Point(p.x, p.y),
                   new IntProcedure2(v),
                   Float.POSITIVE_INFINITY);
    }
    
    /**
     * @see net.sf.jsi.SpatialIndex#nearestN(Point, gnu.trove.TIntProcedure, int, float)
     */
    public void nearestN(Point p, TIntProcedure v, int n, float furthestDistance) {
      tree.nearestN(new Point(p.x, p.y),
                   new IntProcedure2(v),
                   n,
                   furthestDistance);
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#nearestNUnsorted(Point, gnu.trove.TIntProcedure, int, float)
     */
    public void nearestNUnsorted(Point p, TIntProcedure v, int n, float furthestDistance) {
      tree.nearestNUnsorted(new Point(p.x, p.y),
                   new IntProcedure2(v),
                   n,
                   furthestDistance);
    }
    
    /**
     * @see net.sf.jsi.SpatialIndex#intersects(Rectangle, gnu.trove.TIntProcedure)
     */
    public void intersects(Rectangle r, TIntProcedure ip) {
      Rectangle r2 = new Rectangle(r.minX, r.minY, r.maxX, r.maxY);  
      tree.intersects(r2, new IntProcedure2(ip));
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#contains(Rectangle, gnu.trove.TIntProcedure)
     */
    public void contains(Rectangle r, TIntProcedure ip) {
      Rectangle r2 = new Rectangle(r.minX, r.minY, r.maxX, r.maxY);
      tree.contains(r2, new IntProcedure2(ip));
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#add(Rectangle, int)
     */
    public void add(Rectangle r, int id) {
      Rectangle r2 = new Rectangle(r.minX, r.minY, r.maxX, r.maxY);
      tree.add(r2, id);
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#delete(Rectangle, int)
     */
    public boolean delete(Rectangle r, int id) {
      Rectangle r2 = new Rectangle(r.minX, r.minY, r.maxX, r.maxY);
      return tree.delete(r2, id);
    }
  
    /**
     * @see net.sf.jsi.SpatialIndex#size()
     */
    public int size() {
      return tree.size();  
    }
    
    /**
     * @see net.sf.jsi.SpatialIndex#getBounds()
     */
    public Rectangle getBounds() {
      return tree.getBounds(); 
    }
    
    /**
     * @see net.sf.jsi.SpatialIndex#getVersion()
     */
    public String getVersion() {
      return "RTreeWrapper-" + BuildProperties.getVersion();
    }
    
  }
  