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 #ifdef _MSC_VER
00025 #pragma warning(push)
00026 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00027 #endif
00028
00029
00030 namespace geos {
00031 namespace geom {
00032 class Coordinate;
00033 }
00034 namespace planargraph {
00035 class DirectedEdge;
00036 class Edge;
00037 }
00038 }
00039
00040 namespace geos {
00041 namespace planargraph {
00042
00044 class GEOS_DLL DirectedEdgeStar {
00045 protected:
00046
00047 private:
00051 mutable std::vector<DirectedEdge*> outEdges;
00052 mutable bool sorted;
00053 void sortEdges() const;
00054
00055 public:
00059 DirectedEdgeStar(): sorted(false) {}
00060
00061 virtual ~DirectedEdgeStar() {}
00062
00066 void add(DirectedEdge *de);
00067
00071 void remove(DirectedEdge *de);
00072
00077 std::vector<DirectedEdge*>::iterator iterator() { return begin(); }
00079 std::vector<DirectedEdge*>::iterator begin();
00080
00082 std::vector<DirectedEdge*>::iterator end();
00083
00085 std::vector<DirectedEdge*>::const_iterator begin() const;
00086
00088 std::vector<DirectedEdge*>::const_iterator end() const;
00089
00094 std::size_t getDegree() const { return outEdges.size(); }
00095
00100 geom::Coordinate& getCoordinate() const;
00101
00106 std::vector<DirectedEdge*>& getEdges();
00107
00113 int getIndex(const Edge *edge);
00114
00120 int getIndex(const DirectedEdge *dirEdge);
00121
00126 int getIndex(int i) const;
00127
00133 DirectedEdge* getNextEdge(DirectedEdge *dirEdge);
00134 };
00135
00136 }
00137 }
00138
00139 #ifdef _MSC_VER
00140 #pragma warning(pop)
00141 #endif
00142
00143 #endif // GEOS_PLANARGRAPH_DIRECTEDEDGESTAR_H
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154