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