File Coverage

/usr/local/lib/perl5/site_perl/5.26.1/x86_64-linux/XS/libgeos.x/i/geos/noding/NodingValidator.h
Criterion Covered Total %
statement 4 4 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 4 4 100.0


line stmt bran cond sub pod time code
1             /**********************************************************************
2             *
3             * GEOS - Geometry Engine Open Source
4             * http://geos.osgeo.org
5             *
6             * Copyright (C) 2006 Refractions Research Inc.
7             *
8             * This is free software; you can redistribute and/or modify it under
9             * the terms of the GNU Lesser General Public Licence as published
10             * by the Free Software Foundation.
11             * See the COPYING file for more information.
12             *
13             **********************************************************************/
14              
15             #ifndef GEOS_NODING_NODINGVALIDATOR_H
16             #define GEOS_NODING_NODINGVALIDATOR_H
17              
18             #include
19              
20             #include
21             #include
22              
23             #include
24              
25             #include
26             //#include
27              
28             // Forward declarations
29             namespace geos {
30             namespace geom {
31             class Coordinate;
32             }
33             namespace noding {
34             class SegmentString;
35             }
36             }
37              
38             namespace geos {
39             namespace noding { // geos.noding
40              
41             /**
42             * Validates that a collection of {@link SegmentString}s is correctly noded.
43             * Throws a TopologyException if a noding error is found.
44             *
45             * Last port: noding/NodingValidator.java rev. 1.6 (JTS-1.7)
46             *
47             */
48             class GEOS_DLL NodingValidator {
49             private:
50             algorithm::LineIntersector li;
51             const std::vector& segStrings;
52              
53             /**
54             * Checks if a segment string contains a segment
55             * pattern a-b-a (which implies a self-intersection)
56             */
57             void checkCollapses() const;
58              
59             void checkCollapses(const SegmentString& ss) const;
60              
61             void checkCollapse(const geom::Coordinate& p0, const geom::Coordinate& p1,
62             const geom::Coordinate& p2) const;
63              
64             /**
65             * Checks all pairs of segments for intersections at an
66             * interior point of a segment
67             */
68             void checkInteriorIntersections();
69              
70             void checkInteriorIntersections(const SegmentString& ss0,
71             const SegmentString& ss1);
72              
73             void checkInteriorIntersections(
74             const SegmentString& e0, unsigned int segIndex0,
75             const SegmentString& e1, unsigned int segIndex1);
76              
77             /**
78             * Checks for intersections between an endpoint of a segment string
79             * and an interior vertex of another segment string
80             */
81             void checkEndPtVertexIntersections() const;
82              
83             void checkEndPtVertexIntersections(const geom::Coordinate& testPt,
84             const std::vector& segStrings) const;
85              
86             /**
87             * @return true if there is an intersection point which is not an
88             * endpoint of the segment p0-p1
89             */
90             bool hasInteriorIntersection(const algorithm::LineIntersector& aLi,
91             const geom::Coordinate& p0, const geom::Coordinate& p1) const;
92              
93             // Declare type as noncopyable
94             NodingValidator(const NodingValidator& other) = delete;
95             NodingValidator& operator=(const NodingValidator& rhs) = delete;
96              
97             public:
98              
99 1           NodingValidator(const std::vector& newSegStrings):
100 1           segStrings(newSegStrings)
101 1           {}
102              
103 2           ~NodingValidator() {}
104              
105             void checkValid();
106              
107             };
108              
109              
110             } // namespace geos.noding
111             } // namespace geos
112              
113             #endif // GEOS_NODING_NODINGVALIDATOR_H