16 #ifndef GEOS_GEOM_COORDINATESEQUENCE_H
17 #define GEOS_GEOM_COORDINATESEQUENCE_H
19 #include <geos/export.h>
20 #include <geos/platform.h>
21 #include <geos/inline.h>
23 #include <geos/geom/Coordinate.h>
33 class CoordinateFilter;
70 typedef std::auto_ptr<CoordinateSequence> AutoPtr;
86 virtual const Coordinate& getAt(std::size_t i)
const=0;
90 return getAt(size()-1);
98 const Coordinate& operator[] (std::size_t i)
const {
105 virtual void getAt(std::size_t i, Coordinate& c)
const=0;
112 virtual std::size_t getSize()
const=0;
114 size_t size()
const {
return getSize(); }
136 virtual const std::vector<Coordinate>* toVector()
const=0;
142 virtual void toVector(std::vector<Coordinate>& coords)
const=0;
151 void add(
const std::vector<Coordinate>* vc,
bool allowRepeated);
168 void add(
const CoordinateSequence *cl,
bool allowRepeated,
178 virtual void add(
const Coordinate& c,
bool allowRepeated);
191 virtual void add(std::size_t i,
const Coordinate& coord,
bool allowRepeated)=0;
194 virtual bool isEmpty()
const=0;
197 virtual void add(
const Coordinate& c)=0;
206 virtual void setAt(
const Coordinate& c, std::size_t pos)=0;
209 virtual void deleteAt(std::size_t pos)=0;
212 virtual std::string toString()
const=0;
215 virtual void setPoints(
const std::vector<Coordinate> &v)=0;
218 bool hasRepeatedPoints()
const;
221 const Coordinate* minCoordinate()
const;
232 static CoordinateSequence* removeRepeatedPoints(
233 const CoordinateSequence *cl);
239 virtual CoordinateSequence& removeRepeatedPoints()=0;
245 static bool hasRepeatedPoints(
const CoordinateSequence *cl);
251 static CoordinateSequence* atLeastNCoordinatesOrNothing(std::size_t n,
252 CoordinateSequence *c);
259 static const Coordinate* minCoordinate(CoordinateSequence *cl);
266 static int indexOf(
const Coordinate *coordinate,
267 const CoordinateSequence *cl);
274 static bool equals(
const CoordinateSequence *cl1,
275 const CoordinateSequence *cl2);
278 static void scroll(CoordinateSequence *cl,
const Coordinate *firstCoordinate);
297 static int increasingDirection(
const CoordinateSequence& pts);
300 static void reverse(CoordinateSequence *cl);
311 virtual std::size_t getDimension()
const=0;
323 virtual double getOrdinate(std::size_t index, std::size_t ordinateIndex)
const=0;
331 virtual double getX(std::size_t index)
const {
return getOrdinate(index, X); }
339 virtual double getY(std::size_t index)
const {
return getOrdinate(index, Y); }
350 virtual void setOrdinate(std::size_t index, std::size_t ordinateIndex,
double value)=0;
359 virtual void expandEnvelope(
Envelope &env)
const;
373 void applyCoordinateFilter(T& f)
376 for(std::size_t i=0, n=size(); i<n; ++i)
386 GEOS_DLL std::ostream&
operator<< (std::ostream& os,
const CoordinateSequence& cs);
388 GEOS_DLL
bool operator== (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
390 GEOS_DLL
bool operator!= (
const CoordinateSequence& s1,
const CoordinateSequence& s2);
399 #endif // ndef GEOS_GEOM_COORDINATESEQUENCE_H