GEOS 3.4.2

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

Coordinate.h
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_GEOM_COORDINATE_H
16 #define GEOS_GEOM_COORDINATE_H
17
18 #include <geos/export.h>
19 #include <geos/platform.h> // for DoubleNotANumber
20 #include <geos/inline.h>
21 #include <set>
22 #include <stack>
23 #include <vector> // for typedefs
24 #include <string>
25 #include <limits>
26
27 #ifdef _MSC_VER
28 #pragma warning(push)
29 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
30 #endif
31
32 namespace geos {
33 namespace geom { // geos.geom
34
35 struct CoordinateLessThen;
36
57 // Define the following to make assignments and copy constructions
58 // NON-inline (will let profilers report usages)
59 //#define PROFILE_COORDINATE_COPIES 1
60 class GEOS_DLL Coordinate {
61
62 private:
63
64 static Coordinate nullCoord;
65
66 public:
68 typedef std::set<const Coordinate *, CoordinateLessThen> ConstSet;
69
71 typedef std::vector<const Coordinate *> ConstVect;
72
74 typedef std::stack<const Coordinate *> ConstStack;
75
77 typedef std::vector<Coordinate> Vect;
78
80 double x;
81
83 double y;
84
86 double z;
87
88 void setNull();
89
90 static Coordinate& getNull();
91
92 bool isNull() const;
93
94 Coordinate(double xNew=0.0, double yNew=0.0, double zNew=DoubleNotANumber);
95
96 bool equals2D(const Coordinate& other) const;
97
99 bool equals(const Coordinate& other) const;
100
102 int compareTo(const Coordinate& other) const;
103
105 bool equals3D(const Coordinate& other) const;
106
108 std::string toString() const;
109
112 //void makePrecise(const PrecisionModel *pm);
113
114 double distance(const Coordinate& p) const;
115
116 int hashCode() const;
117
122 static int hashCode(double d);
123
124 };
125
127 struct GEOS_DLL CoordinateLessThen {
128
129 bool operator()(const Coordinate* a, const Coordinate* b) const;
130 bool operator()(const Coordinate& a, const Coordinate& b) const;
131
132 };
133
135 inline bool operator<(const Coordinate& a, const Coordinate& b) {
136 return CoordinateLessThen()(a,b);
137 }
138
140 GEOS_DLL std::ostream& operator<< (std::ostream& os, const Coordinate& c);
141
143 GEOS_DLL bool operator==(const Coordinate& a, const Coordinate& b);
144
146 GEOS_DLL bool operator!=(const Coordinate& a, const Coordinate& b);
147
148
149
150 } // namespace geos.geom
151 } // namespace geos
152
153 #ifdef _MSC_VER
154 #pragma warning(pop)
155 #endif
156
157 #ifdef GEOS_INLINE
158 # include "geos/geom/Coordinate.inl"
159 #endif
160
161 #endif // ndef GEOS_GEOM_COORDINATE_H
162