15 #ifndef GEOS_GEOM_COORDINATESEQUENCE_H
16 #define GEOS_GEOM_COORDINATESEQUENCE_H
18 #include <geos/export.h>
19 #include <geos/inline.h>
21 #include <geos/geom/Coordinate.h>
31 class CoordinateFilter;
58 class GEOS_DLL CoordinateSequence {
62 CoordinateSequence() {}
64 CoordinateSequence(
const CoordinateSequence&) {}
68 typedef std::unique_ptr<CoordinateSequence> Ptr;
71 ~CoordinateSequence() {}
76 virtual std::unique_ptr<CoordinateSequence> clone()
const = 0;
84 virtual const Coordinate& getAt(std::size_t i)
const = 0;
90 return getAt(size() - 1);
101 operator[](std::size_t i)
const
106 virtual Envelope getEnvelope()
const;
111 virtual void getAt(std::size_t i, Coordinate& c)
const = 0;
117 virtual std::size_t getSize()
const = 0;
129 virtual void toVector(std::vector<Coordinate>& coords)
const = 0;
132 virtual bool isEmpty()
const = 0;
135 virtual void setAt(
const Coordinate& c, std::size_t pos) = 0;
138 std::string toString()
const;
141 virtual void setPoints(
const std::vector<Coordinate>& v) = 0;
144 bool hasRepeatedPoints()
const;
147 const Coordinate* minCoordinate()
const;
153 static bool hasRepeatedPoints(
const CoordinateSequence* cl);
159 static CoordinateSequence* atLeastNCoordinatesOrNothing(std::size_t n,
160 CoordinateSequence* c);
167 static size_t indexOf(
const Coordinate* coordinate,
168 const CoordinateSequence* cl);
175 static bool equals(
const CoordinateSequence* cl1,
176 const CoordinateSequence* cl2);
179 static void scroll(CoordinateSequence* cl,
const Coordinate* firstCoordinate);
198 static int increasingDirection(
const CoordinateSequence& pts);
201 static void reverse(CoordinateSequence* cl);
212 virtual std::size_t getDimension()
const = 0;
224 virtual double getOrdinate(std::size_t index, std::size_t ordinateIndex)
const;
233 getX(std::size_t index)
const
235 return getOrdinate(index, X);
245 getY(std::size_t index)
const
247 return getOrdinate(index, Y);
259 virtual void setOrdinate(std::size_t index, std::size_t ordinateIndex,
double value) = 0;
268 virtual void expandEnvelope(
Envelope& env)
const;
283 applyCoordinateFilter(T& f)
286 for(std::size_t i = 0, n = size(); i < n; ++i) {
295 GEOS_DLL std::ostream&
operator<< (std::ostream& os,
const CoordinateSequence& cs);
297 GEOS_DLL
bool operator== (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
299 GEOS_DLL
bool operator!= (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
308 #endif // ndef GEOS_GEOM_COORDINATESEQUENCE_H