IntervalRTreeNode.h

00001 /**********************************************************************
00002  *
00003  * GEOS - Geometry Engine Open Source
00004  * http://geos.osgeo.org
00005  *
00006  * Copyright (C) 2006 Refractions Research Inc.
00007  *
00008  * This is free software; you can redistribute and/or modify it under
00009  * the terms of the GNU Lesser General Public Licence as published
00010  * by the Free Software Foundation. 
00011  * See the COPYING file for more information.
00012  *
00013  *
00014  **********************************************************************/
00015 
00016 #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H
00017 #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H
00018 
00019 #include <geos/platform.h>
00020 #include <vector>
00021 #include <limits>
00022 
00023 // forward declarations
00024 namespace geos {
00025         namespace index {
00026                 class ItemVisitor;
00027         }
00028 }
00029 
00030 
00031 namespace geos {
00032 namespace index {
00033 namespace intervalrtree {
00034 
00035 class IntervalRTreeNode 
00036 {
00037 private:
00038 protected:
00039         double min;
00040         double max;
00041  
00042         bool intersects( double queryMin, double queryMax) const
00043         {
00044                 if (min > queryMax || max < queryMin)
00045                         return false;
00046 
00047                 return true;
00048         }
00049 
00050 public:
00051         typedef std::vector<const IntervalRTreeNode *> ConstVect;
00052 
00053         IntervalRTreeNode()
00054         :       min( DoubleInfinity ),
00055                 max( DoubleNegInfinity )
00056         { }
00057 
00058         IntervalRTreeNode( double min, double max)
00059         :       min( min ),
00060                 max( max )
00061         { }
00062 
00063         virtual ~IntervalRTreeNode() 
00064         { }
00065 
00066         double getMin() const
00067         { 
00068                 return min; 
00069         }
00070         
00071         double getMax() const 
00072         { 
00073                 return max; 
00074         }
00075         
00076         virtual void query( double queryMin, double queryMax, ItemVisitor * visitor) const =0;
00077         
00078         //std::string toString()
00079         //{
00080         //      return WKTWriter.toLineString(new Coordinate(min, 0), new Coordinate(max, 0));
00081         //}
00082   
00083 
00084         //class NodeComparator 
00085         //{
00086         //public:
00087                 static bool compare( const IntervalRTreeNode * n1, const IntervalRTreeNode * n2)
00088                 {
00089                         //IntervalRTreeNode * n1 = dynamic_cast<IntervalRTreeNode *>( o1);
00090                         //IntervalRTreeNode * n2 = dynamic_cast<IntervalRTreeNode *>( o2);
00091 
00092                         double mid1 = (n1->getMin() + n1->getMax()) / 2;
00093                         double mid2 = (n2->getMin() + n2->getMax()) / 2;
00094 
00095                         //if (mid1 < mid2) return -1;
00096                         //if (mid1 > mid2) return 1;
00097                         //return 0;
00098 
00099                         return mid1 > mid2;
00100                 }
00101         //};
00102 
00103 };
00104 
00105 } // geos::index::intervalrtree
00106 } // geos::index
00107 } // geos
00108 
00109 #endif // GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H
00110 

Generated on 23 Sep 2013 for GEOS by  doxygen 1.4.7