00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GEOS_PLANARGRAPH_PLANARGRAPH_H
00017 #define GEOS_PLANARGRAPH_PLANARGRAPH_H
00018
00019 #include <geos/export.h>
00020 #include <geos/planargraph/NodeMap.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 class Node;
00033 }
00034 }
00035
00036 namespace geos {
00037 namespace planargraph {
00038
00052 class GEOS_DLL PlanarGraph {
00053
00054 protected:
00055
00056 std::vector<Edge*> edges;
00057 std::vector<DirectedEdge*> dirEdges;
00058 NodeMap nodeMap;
00059
00069 void add(Node *node) {
00070 nodeMap.add(node);
00071 }
00072
00082 void add(Edge *edge);
00083
00091 void add(DirectedEdge *dirEdge) {
00092 dirEdges.push_back(dirEdge);
00093 }
00094
00095 public:
00096
00097 typedef std::vector<Edge *> EdgeContainer;
00098 typedef EdgeContainer::iterator EdgeIterator;
00099
00100
00105 PlanarGraph() {}
00106
00107 virtual ~PlanarGraph() {}
00108
00114 Node* findNode(const geom::Coordinate& pt) {
00115 return nodeMap.find(pt);
00116 }
00117
00122 NodeMap::container::iterator nodeIterator() {
00123 return nodeMap.begin();
00124 }
00125
00126 NodeMap::container::iterator nodeBegin() {
00127 return nodeMap.begin();
00128 }
00129
00130 NodeMap::container::const_iterator nodeBegin() const {
00131 return nodeMap.begin();
00132 }
00133
00134 NodeMap::container::iterator nodeEnd() {
00135 return nodeMap.end();
00136 }
00137
00138 NodeMap::container::const_iterator nodeEnd() const {
00139 return nodeMap.end();
00140 }
00141
00148 void getNodes(std::vector<Node*>& nodes) { nodeMap.getNodes(nodes); }
00149
00158 std::vector<DirectedEdge*>::iterator dirEdgeIterator() {
00159 return dirEdges.begin();
00160 }
00161
00163 std::vector<Edge*>::iterator edgeIterator() {
00164 return edges.begin();
00165 }
00166
00168
00172 std::vector<Edge*>::iterator edgeBegin() {
00173 return edges.begin();
00174 }
00175
00177
00181 std::vector<Edge*>::iterator edgeEnd() {
00182 return edges.end();
00183 }
00184
00190 std::vector<Edge*>* getEdges() {
00191 return &edges;
00192 }
00193
00203 void remove(Edge *edge);
00204
00214 void remove(DirectedEdge *de);
00215
00221 void remove(Node *node);
00222
00228 std::vector<Node*>* findNodesOfDegree(size_t degree);
00229 };
00230
00231 }
00232 }
00233
00234 #endif // GEOS_PLANARGRAPH_PLANARGRAPH_H
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245