00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H
00017 #define GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H
00018
00019 #include <geos/export.h>
00020 #include <cassert>
00021 #include <set>
00022 #include <vector>
00023
00024 #include <geos/geom/CoordinateFilter.h>
00025 #include <geos/geom/CoordinateSequence.h>
00026 #include <geos/geom/Coordinate.h>
00027
00028 #ifdef _MSC_VER
00029 #pragma warning(push)
00030 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00031 #endif
00032
00033 namespace geos {
00034 namespace util {
00035
00036
00037
00038
00039
00040
00041
00042 class GEOS_DLL UniqueCoordinateArrayFilter: public geom::CoordinateFilter
00043 {
00044 public:
00050 UniqueCoordinateArrayFilter(geom::Coordinate::ConstVect &target)
00051 : pts(target)
00052 {}
00053
00060 virtual ~UniqueCoordinateArrayFilter() {}
00061
00067 virtual void filter_ro(const geom::Coordinate *coord)
00068 {
00069 if ( uniqPts.insert(coord).second )
00070 {
00071 pts.push_back(coord);
00072 }
00073 }
00074
00075 private:
00076 geom::Coordinate::ConstVect &pts;
00077 geom::Coordinate::ConstSet uniqPts;
00078
00079
00080 UniqueCoordinateArrayFilter(const UniqueCoordinateArrayFilter& other);
00081 UniqueCoordinateArrayFilter& operator=(const UniqueCoordinateArrayFilter& rhs);
00082 };
00083
00084 }
00085 }
00086
00087 #ifdef _MSC_VER
00088 #pragma warning(pop)
00089 #endif
00090
00091 #endif // GEOS_UTIL_UNIQUECOORDINATEARRAYFILTER_H