Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | Related Pages

IntervalRTreeNode.h

00001 /**********************************************************************
00002  * $Id
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2006 Refractions Research Inc.
00008  *
00009  * This is free software; you can redistribute and/or modify it under
00010  * the terms of the GNU Lesser General Public Licence as published
00011  * by the Free Software Foundation. 
00012  * See the COPYING file for more information.
00013  *
00014  *
00015  **********************************************************************/
00016 
00017 #ifndef GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H
00018 #define GEOS_INDEX_INTERVALRTREE_INTERVALRTREENODE_H
00019 
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( std::numeric_limits<double>::min() ),
00055                 max( std::numeric_limits<double>::max() )
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 /**********************************************************************
00111  * $Log$
00112  **********************************************************************/
00113 

Generated on Tue Jan 6 06:17:20 2009 for GEOS by  doxygen 1.4.4