00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H
00018 #define GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H
00019
00020 #include <geos/export.h>
00021
00022 #include <vector>
00023
00024
00025 namespace geos {
00026 namespace geom {
00027 class Coordinate;
00028 }
00029 namespace planargraph {
00030 class DirectedEdge;
00031 class Edge;
00032 }
00033 }
00034
00035 namespace geos {
00036 namespace planargraph {
00037
00039 class GEOS_DLL DirectedEdgeStar {
00040 protected:
00041
00042 private:
00046 mutable std::vector<DirectedEdge*> outEdges;
00047 mutable bool sorted;
00048 void sortEdges() const;
00049
00050 public:
00054 DirectedEdgeStar(): sorted(false) {}
00055
00056 virtual ~DirectedEdgeStar() {}
00057
00061 void add(DirectedEdge *de);
00062
00066 void remove(DirectedEdge *de);
00067
00072 std::vector<DirectedEdge*>::iterator iterator() { return begin(); }
00074 std::vector<DirectedEdge*>::iterator begin();
00075
00077 std::vector<DirectedEdge*>::iterator end();
00078
00080 std::vector<DirectedEdge*>::const_iterator begin() const;
00081
00083 std::vector<DirectedEdge*>::const_iterator end() const;
00084
00089 size_t getDegree() const { return outEdges.size(); }
00090
00095 geom::Coordinate& getCoordinate() const;
00096
00101 std::vector<DirectedEdge*>& getEdges();
00102
00108 int getIndex(const Edge *edge);
00109
00115 int getIndex(const DirectedEdge *dirEdge);
00116
00121 int getIndex(int i) const;
00122
00128 DirectedEdge* getNextEdge(DirectedEdge *dirEdge);
00129 };
00130
00131
00132 }
00133 }
00134
00135 #endif // GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146