+ use mapped_memory_cache for memory mapped files

This commit is contained in:
Artem Pavlenko 2011-04-07 15:24:52 +00:00
parent 878bc6b6da
commit cccdd048eb

View file

@ -30,11 +30,10 @@
#include <mapnik/feature_layer_desc.hpp> #include <mapnik/feature_layer_desc.hpp>
#include <mapnik/wkb.hpp> #include <mapnik/wkb.hpp>
#include <mapnik/unicode.hpp> #include <mapnik/unicode.hpp>
#include <mapnik/mapped_memory_cache.hpp>
// boost // boost
#include <boost/iostreams/stream.hpp> #include <boost/interprocess/streams/bufferstream.hpp>
#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/device/mapped_file.hpp>
// ogr // ogr
#include "ogr_index_featureset.hpp" #include "ogr_index_featureset.hpp"
@ -50,9 +49,6 @@ using mapnik::feature_ptr;
using mapnik::geometry_utils; using mapnik::geometry_utils;
using mapnik::transcoder; using mapnik::transcoder;
using namespace boost::iostreams;
template <typename filterT> template <typename filterT>
ogr_index_featureset<filterT>::ogr_index_featureset(OGRDataSource & dataset, ogr_index_featureset<filterT>::ogr_index_featureset(OGRDataSource & dataset,
OGRLayer & layer, OGRLayer & layer,
@ -69,12 +65,14 @@ ogr_index_featureset<filterT>::ogr_index_featureset(OGRDataSource & dataset,
multiple_geometries_(multiple_geometries), multiple_geometries_(multiple_geometries),
count_(0) count_(0)
{ {
stream<mapped_file_source> file (index_file);
if (file) boost::optional<mapnik::mapped_region_ptr> memory = mapnik::mapped_memory_cache::find(index_file.c_str(),true);
if (memory)
{ {
ogr_index<filterT,stream<mapped_file_source> >::query(filter,file,ids_); boost::interprocess::ibufferstream file(static_cast<char*>((*memory)->get_address()),(*memory)->get_size());
file.close(); ogr_index<filterT,boost::interprocess::ibufferstream >::query(filter,file,ids_);
} }
std::sort(ids_.begin(),ids_.end()); std::sort(ids_.begin(),ids_.end());
#ifdef MAPNIK_DEBUG #ifdef MAPNIK_DEBUG