00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef MEMORY_FEATURESET_HPP
00025 #define MEMORY_FEATURESET_HPP
00026
00027 #include <boost/utility.hpp>
00028 #include <mapnik/memory_datasource.hpp>
00029
00030 namespace mapnik {
00031
00032 class memory_featureset : public Featureset, private boost::noncopyable
00033 {
00034 public:
00035 memory_featureset(Envelope<double> const& bbox, memory_datasource const& ds)
00036 : bbox_(bbox),
00037 pos_(ds.features_.begin()),
00038 end_(ds.features_.end())
00039 {}
00040 virtual ~memory_featureset() {}
00041
00042 feature_ptr next()
00043 {
00044 while (pos_ != end_)
00045 {
00046 geometry_ptr geom = (*pos_)->get_geometry();
00047 if (geom && bbox_.intersects(geom->envelope()))
00048 {
00049 return *pos_++;
00050 }
00051 ++pos_;
00052 }
00053 return feature_ptr();
00054 }
00055
00056 private:
00057 Envelope<double> const& bbox_;
00058 std::vector<feature_ptr>::const_iterator pos_;
00059 std::vector<feature_ptr>::const_iterator end_;
00060 };
00061 }
00062
00063 #endif // MEMORY_FEATURESET_HPP