• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

EdgeEndStar.h

00001 /**********************************************************************
00002  * $Id: EdgeEndStar.h 2557 2009-06-08 09:30:55Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2005-2006 Refractions Research Inc.
00008  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************
00016  *
00017  * Last port: geomgraph/EdgeEndStar.java rev. 1.8 (JTS-1.10)
00018  *
00019  **********************************************************************/
00020 
00021 
00022 #ifndef GEOS_GEOMGRAPH_EDGEENDSTAR_H
00023 #define GEOS_GEOMGRAPH_EDGEENDSTAR_H
00024 
00025 #include <geos/export.h>
00026 #include <geos/geomgraph/EdgeEnd.h>  // for EdgeEndLT
00027 #include <geos/geom/Coordinate.h>  // for p0,p1
00028 
00029 #include <geos/inline.h>
00030 
00031 #include <set>
00032 #include <string>
00033 #include <vector>
00034 #include <algorithm> // for inlines (find)
00035 
00036 // Forward declarations
00037 namespace geos {
00038         namespace algorithm {
00039                 class BoundaryNodeRule;
00040         }
00041         namespace geomgraph {
00042                 class GeometryGraph;
00043         }
00044 }
00045 
00046 namespace geos {
00047 namespace geomgraph { // geos.geomgraph
00048 
00049 
00058 class GEOS_DLL EdgeEndStar {
00059 public:
00060 
00061         typedef std::set<EdgeEnd *, EdgeEndLT> container;
00062 
00063         typedef container::iterator iterator;
00064         typedef container::reverse_iterator reverse_iterator;
00065 
00066         EdgeEndStar();
00067 
00068         virtual ~EdgeEndStar() {};
00069 
00073         virtual void insert(EdgeEnd *e)=0;
00074 
00082         virtual geom::Coordinate& getCoordinate();
00083 
00084         virtual size_t getDegree();
00085 
00086         virtual iterator begin();
00087 
00088         virtual iterator end();
00089 
00090         virtual reverse_iterator rbegin();
00091 
00092         virtual reverse_iterator rend();
00093 
00094         virtual container &getEdges();
00095 
00096 
00097         virtual EdgeEnd* getNextCW(EdgeEnd *ee);
00098 
00099         virtual void computeLabelling(std::vector<GeometryGraph*> *geomGraph);
00100                 // throw(TopologyException *);
00101 
00102         virtual bool isAreaLabelsConsistent(const GeometryGraph& geomGraph);
00103 
00104         virtual void propagateSideLabels(int geomIndex);
00105                 // throw(TopologyException *);
00106 
00107         //virtual int findIndex(EdgeEnd *eSearch);
00108         virtual iterator find(EdgeEnd *eSearch);
00109 
00110         virtual std::string print();
00111 
00112 protected:
00113 
00118         EdgeEndStar::container edgeMap;
00119 
00123         virtual void insertEdgeEnd(EdgeEnd *e) { edgeMap.insert(e); }
00124 
00125 private:
00126 
00127         virtual int getLocation(int geomIndex,
00128                 const geom::Coordinate& p,
00129                 std::vector<GeometryGraph*> *geom); 
00130 
00135         int ptInAreaLocation[2];
00136 
00137         virtual void computeEdgeEndLabels(const algorithm::BoundaryNodeRule&);
00138 
00139         virtual bool checkAreaLabelsConsistent(int geomIndex);
00140 
00141 };
00142 
00143 inline size_t
00144 EdgeEndStar::getDegree()
00145 {
00146         return edgeMap.size();
00147 }
00148 
00149 inline EdgeEndStar::iterator
00150 EdgeEndStar::begin()
00151 {
00152         return edgeMap.begin();
00153 }
00154 
00155 inline EdgeEndStar::container&
00156 EdgeEndStar::getEdges()
00157 {
00158         return edgeMap;
00159 }
00160 
00161 inline EdgeEndStar::reverse_iterator
00162 EdgeEndStar::rend()
00163 {
00164         return edgeMap.rend();
00165 }
00166 
00167 inline EdgeEndStar::iterator
00168 EdgeEndStar::end()
00169 {
00170         return edgeMap.end();
00171 }
00172 
00173 inline EdgeEndStar::reverse_iterator
00174 EdgeEndStar::rbegin()
00175 {
00176         return edgeMap.rbegin();
00177 }
00178 
00179 inline EdgeEndStar::iterator
00180 EdgeEndStar::find(EdgeEnd *eSearch)
00181 {
00182         return edgeMap.find(eSearch);
00183 }
00184 
00185 
00186 } // namespace geos.geomgraph
00187 } // namespace geos
00188 
00189 //#ifdef GEOS_INLINE
00190 //# include "geos/geomgraph/EdgeEndStar.inl"
00191 //#endif
00192 
00193 #endif // ifndef GEOS_GEOMGRAPH_EDGEENDSTAR_H
00194 
00195 /**********************************************************************
00196  * $Log$
00197  * Revision 1.4  2006/06/12 10:49:43  strk
00198  * unsigned int => size_t
00199  *
00200  * Revision 1.3  2006/04/04 13:35:55  strk
00201  * Port info, assertion checking, indentation
00202  *
00203  * Revision 1.2  2006/03/24 09:52:41  strk
00204  * USE_INLINE => GEOS_INLINE
00205  *
00206  * Revision 1.1  2006/03/09 16:46:49  strk
00207  * geos::geom namespace definition, first pass at headers split
00208  *
00209  **********************************************************************/
00210 

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1