//Predicate.java
//
//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.
package rtree.join;
import rtree.*;
import java.util.List;
/**
This class works with "sweepline" algo. For the actual binary predicate between MBRs, this interface
should help. We will have an implementing class for "intersects","contains","meet".
@author Prachuryya Barua
*/
public abstract class Predicate
{
protected Pair p = new PairElmt();//this is always PairElmt
public Predicate(){}
// public Predicate(Pair p)
// {
// if(p == null)
// throw new NullPointerException(" Argument null");
// this.p = p;
// }
/**
* Do the appropriate rtree operation.
* @param event the <code>Element</code> at which the event took place.
* @param from the index from which <code>others</code> start.
* @param others the <code>Element[]</code> to compare with <code>event</code>
* @param pairs a <code>List</code> value where the output pairs would put.
* @param evtSide tells whether <code>event</code> is from left tree or right tree.
* @param p a <code>Pair</code> value which specifies the kind of output required.
*/
public abstract void relate(Element event, int from, Element[] others, List pairs, int evtSide);
/**
* This one is specifically for the case where one tree is longer then the other.
* It may be noted that both the elements can be leaf as well.
* @param nlElmt the non-leaf <code>Element</code>
* @param lfElmt the leaf <code>Element</code>
* @param side The side of <code>nlElmt</code> element.
* @return a <code>boolean</code> value
*/
public abstract boolean relateMismatch(Element nlElmt, Element lfElmt, int side);
/**
Returns the <code>Pair</code> which tells the type of output required.
*/
public Pair getPair()
{
return p;
}
}