GEOS 3.14.0dev
EdgeList.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2005-2006 Refractions Research Inc.
7 * Copyright (C) 2001-2002 Vivid Solutions Inc.
8 *
9 * This is free software; you can redistribute and/or modify it under
10 * the terms of the GNU Lesser General Public Licence as published
11 * by the Free Software Foundation.
12 * See the COPYING file for more information.
13 *
14 **********************************************************************
15 *
16 * Last port: geomgraph/EdgeList.java rev. 1.4 (JTS-1.10)
17 *
18 **********************************************************************/
19
20
21#pragma once
22
23#include <geos/export.h>
24#include <vector>
25#include <unordered_map>
26#include <string>
27#include <iostream>
28
29#include <geos/noding/OrientedCoordinateArray.h> // for map comparator
30
31#ifdef _MSC_VER
32#pragma warning(push)
33#pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
34#endif
35
36// Forward declarations
37namespace geos {
38namespace index {
39class SpatialIndex;
40}
41namespace geomgraph {
42class Edge;
43}
44}
45
46namespace geos {
47namespace geomgraph { // geos.geomgraph
48
55class GEOS_DLL EdgeList final {
56
57private:
58
59 std::vector<Edge*> edges;
60
61 struct OcaCmp {
62 bool
63 operator()(
65 const noding::OrientedCoordinateArray* oca2) const
66 {
67 return *oca1 < *oca2;
68 }
69 };
70
74 typedef std::unordered_map<noding::OrientedCoordinateArray,
75 Edge*,
76 noding::OrientedCoordinateArray::HashCode> EdgeMap;
77 EdgeMap ocaMap;
78
79public:
80 friend std::ostream& operator<< (std::ostream& os, const EdgeList& el);
81
82 EdgeList()
83 :
84 edges(),
85 ocaMap()
86 {}
87
88 ~EdgeList() = default;
89
93 void add(Edge* e);
94
95 void addAll(const std::vector<Edge*>& edgeColl);
96
97 std::vector<Edge*>&
98 getEdges()
99 {
100 return edges;
101 }
102
103 Edge* findEqualEdge(const Edge* e) const;
104
105 Edge* get(std::size_t i);
106
107 int findEdgeIndex(const Edge* e) const;
108
109 std::string print();
110
111 void clearList();
112
113};
114
115std::ostream& operator<< (std::ostream& os, const EdgeList& el);
116
117
118} // namespace geos.geomgraph
119} // namespace geos
120
121#ifdef _MSC_VER
122#pragma warning(pop)
123#endif
124
A EdgeList is a list of Edges.
Definition EdgeList.h:55
Definition geomgraph/Edge.h:63
Allows comparing geom::CoordinateSequences in an orientation-independent way.
Definition OrientedCoordinateArray.h:42
Basic namespace for all GEOS functionalities.
Definition geos.h:39