15 #ifndef GEOS_GEOM_COORDINATESEQUENCE_H
16 #define GEOS_GEOM_COORDINATESEQUENCE_H
18 #include <geos/export.h>
19 #include <geos/platform.h>
20 #include <geos/inline.h>
22 #include <geos/geom/Coordinate.h>
32 class CoordinateFilter;
69 typedef std::auto_ptr<CoordinateSequence> AutoPtr;
85 virtual const Coordinate& getAt(std::size_t i)
const=0;
89 return getAt(size()-1);
97 const Coordinate& operator[] (std::size_t i)
const {
104 virtual void getAt(std::size_t i, Coordinate& c)
const=0;
111 virtual std::size_t getSize()
const=0;
113 size_t size()
const {
return getSize(); }
135 virtual const std::vector<Coordinate>* toVector()
const=0;
141 virtual void toVector(std::vector<Coordinate>& coords)
const=0;
150 void add(
const std::vector<Coordinate>* vc,
bool allowRepeated);
167 void add(
const CoordinateSequence *cl,
bool allowRepeated,
177 virtual void add(
const Coordinate& c,
bool allowRepeated);
190 virtual void add(std::size_t i,
const Coordinate& coord,
bool allowRepeated)=0;
193 virtual bool isEmpty()
const=0;
196 virtual void add(
const Coordinate& c)=0;
205 virtual void setAt(
const Coordinate& c, std::size_t pos)=0;
208 virtual void deleteAt(std::size_t pos)=0;
211 virtual std::string toString()
const=0;
214 virtual void setPoints(
const std::vector<Coordinate> &v)=0;
217 bool hasRepeatedPoints()
const;
220 const Coordinate* minCoordinate()
const;
231 static CoordinateSequence* removeRepeatedPoints(
232 const CoordinateSequence *cl);
238 virtual CoordinateSequence& removeRepeatedPoints()=0;
244 static bool hasRepeatedPoints(
const CoordinateSequence *cl);
250 static CoordinateSequence* atLeastNCoordinatesOrNothing(std::size_t n,
251 CoordinateSequence *c);
258 static const Coordinate* minCoordinate(CoordinateSequence *cl);
265 static int indexOf(
const Coordinate *coordinate,
266 const CoordinateSequence *cl);
273 static bool equals(
const CoordinateSequence *cl1,
274 const CoordinateSequence *cl2);
277 static void scroll(CoordinateSequence *cl,
const Coordinate *firstCoordinate);
296 static int increasingDirection(
const CoordinateSequence& pts);
299 static void reverse(CoordinateSequence *cl);
310 virtual std::size_t getDimension()
const=0;
322 virtual double getOrdinate(std::size_t index, std::size_t ordinateIndex)
const=0;
330 virtual double getX(std::size_t index)
const {
return getOrdinate(index, X); }
338 virtual double getY(std::size_t index)
const {
return getOrdinate(index, Y); }
349 virtual void setOrdinate(std::size_t index, std::size_t ordinateIndex,
double value)=0;
358 virtual void expandEnvelope(
Envelope &env)
const;
372 void applyCoordinateFilter(T& f)
375 for(std::size_t i=0, n=size(); i<n; ++i)
385 GEOS_DLL std::ostream&
operator<< (std::ostream& os,
const CoordinateSequence& cs);
387 GEOS_DLL
bool operator== (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
389 GEOS_DLL
bool operator!= (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
398 #endif // ndef GEOS_GEOM_COORDINATESEQUENCE_H