GEOS 3.14.0dev
EdgeEndStar.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2011 Sandro Santilli <strk@kbt.io>
7 * Copyright (C) 2005-2006 Refractions Research Inc.
8 * Copyright (C) 2001-2002 Vivid Solutions Inc.
9 *
10 * This is free software; you can redistribute and/or modify it under
11 * the terms of the GNU Lesser General Public Licence as published
12 * by the Free Software Foundation.
13 * See the COPYING file for more information.
14 *
15 **********************************************************************
16 *
17 * Last port: geomgraph/EdgeEndStar.java r428 (JTS-1.12+)
18 *
19 **********************************************************************/
20
21
22#pragma once
23
24#include <geos/export.h>
25#include <geos/geomgraph/EdgeEnd.h> // for EdgeEndLT
26#include <geos/geom/Location.h>
27#include <geos/geom/Coordinate.h> // for p0,p1
28
29#include <array>
30#include <memory>
31#include <set>
32#include <string>
33#include <vector>
34#include <algorithm> // for inlines (find)
35
36#ifdef _MSC_VER
37#pragma warning(push)
38#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
39#endif
40
41// Forward declarations
42namespace geos {
43namespace algorithm {
44class BoundaryNodeRule;
45}
46namespace geomgraph {
47class GeometryGraph;
48}
49}
50
51namespace geos {
52namespace geomgraph { // geos.geomgraph
53
54
63class GEOS_DLL EdgeEndStar /* non-final */ {
64public:
65
66 typedef std::set<EdgeEnd*, EdgeEndLT> container;
67
68 typedef container::iterator iterator;
69 typedef container::const_iterator const_iterator;
70 typedef container::reverse_iterator reverse_iterator;
71
73
74 virtual
75 ~EdgeEndStar() {}
76
80 virtual void insert(EdgeEnd* e) = 0;
81
90
91 const geom::Coordinate& getCoordinate() const;
92
93 std::size_t getDegree();
94
95 iterator begin();
96
97 iterator end();
98
99 reverse_iterator rbegin();
100
101 reverse_iterator rend();
102
103 const_iterator
104 begin() const
105 {
106 return edgeMap.begin();
107 }
108
109 const_iterator
110 end() const
111 {
112 return edgeMap.end();
113 }
114
115 container& getEdges();
116
117 EdgeEnd* getNextCW(EdgeEnd* ee);
118
119 virtual void computeLabelling(const std::vector<std::unique_ptr<GeometryGraph>>&geomGraph);
120 // throw(TopologyException *);
121
122 bool isAreaLabelsConsistent(const GeometryGraph& geomGraph);
123
124 void propagateSideLabels(uint32_t geomIndex);
125 // throw(TopologyException *);
126
127 //virtual int findIndex(EdgeEnd *eSearch);
128 iterator find(EdgeEnd* eSearch);
129
130 virtual std::string print() const;
131
132protected:
133
138 EdgeEndStar::container edgeMap;
139
143 void
145 {
146 edgeMap.insert(e);
147 }
148
149private:
150
151 geom::Location getLocation(uint32_t geomIndex,
152 const geom::Coordinate&p,
153 const std::vector<std::unique_ptr<GeometryGraph>>&geom);
154
159 std::array<geom::Location, 2> ptInAreaLocation;
160
161 void computeEdgeEndLabels(const algorithm::BoundaryNodeRule&);
162
163 bool checkAreaLabelsConsistent(uint32_t geomIndex);
164
165};
166
167inline std::size_t
168EdgeEndStar::getDegree()
169{
170 return edgeMap.size();
171}
172
173inline EdgeEndStar::iterator
174EdgeEndStar::begin()
175{
176 return edgeMap.begin();
177}
178
179inline EdgeEndStar::container&
180EdgeEndStar::getEdges()
181{
182 return edgeMap;
183}
184
185inline EdgeEndStar::reverse_iterator
186EdgeEndStar::rend()
187{
188 return edgeMap.rend();
189}
190
191inline EdgeEndStar::iterator
192EdgeEndStar::end()
193{
194 return edgeMap.end();
195}
196
197inline EdgeEndStar::reverse_iterator
198EdgeEndStar::rbegin()
199{
200 return edgeMap.rbegin();
201}
202
203inline EdgeEndStar::iterator
204EdgeEndStar::find(EdgeEnd* eSearch)
205{
206 return edgeMap.find(eSearch);
207}
208
209std::ostream& operator<< (std::ostream&, const EdgeEndStar&);
210
211} // namespace geos.geomgraph
212} // namespace geos
213
214#ifdef _MSC_VER
215#pragma warning(pop)
216#endif
217
An interface for rules which determine whether node points which are in boundaries of lineal geometry...
Definition BoundaryNodeRule.h:52
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
A EdgeEndStar is an ordered list of EdgeEnds around a node.
Definition EdgeEndStar.h:63
EdgeEndStar::container edgeMap
A map which maintains the edges in sorted order around the node.
Definition EdgeEndStar.h:138
geom::Coordinate & getCoordinate()
void insertEdgeEnd(EdgeEnd *e)
Insert an EdgeEnd into the map.
Definition EdgeEndStar.h:144
virtual void insert(EdgeEnd *e)=0
Insert a EdgeEnd into this EdgeEndStar.
Models the end of an edge incident on a node.
Definition EdgeEnd.h:54
Location
Constants representing the location of a point relative to a geometry.
Definition Location.h:32
Basic namespace for all GEOS functionalities.
Definition geos.h:39