1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #ifndef BOOST_GEOMETRY_SRS_SHARED_GRIDS_BOOST_HPP
- #define BOOST_GEOMETRY_SRS_SHARED_GRIDS_BOOST_HPP
- #include <boost/geometry/srs/projections/grids.hpp>
- #include <boost/thread/lock_types.hpp>
- #include <boost/thread/shared_mutex.hpp>
- namespace boost { namespace geometry
- {
- namespace srs
- {
- class shared_grids_boost
- {
- public:
- std::size_t size() const
- {
- boost::shared_lock<boost::shared_mutex> lock(mutex);
- return gridinfo.size();
- }
- bool empty() const
- {
- boost::shared_lock<boost::shared_mutex> lock(mutex);
- return gridinfo.empty();
- }
- typedef projections::detail::shared_grids_tag tag;
- struct read_locked
- {
- read_locked(shared_grids_boost & g)
- : gridinfo(g.gridinfo)
- , lock(g.mutex)
- {}
-
- projections::detail::pj_gridinfo & gridinfo;
- private:
- boost::shared_lock<boost::shared_mutex> lock;
- };
- struct write_locked
- {
- write_locked(shared_grids_boost & g)
- : gridinfo(g.gridinfo)
- , lock(g.mutex)
- {}
- projections::detail::pj_gridinfo & gridinfo;
- private:
- boost::unique_lock<boost::shared_mutex> lock;
- };
- private:
- projections::detail::pj_gridinfo gridinfo;
- mutable boost::shared_mutex mutex;
- };
- }
- }}
- #endif
|