box2d<T> - update to use boost::spirit::x3
This commit is contained in:
parent
85a75af9c6
commit
45dd2754db
2 changed files with 27 additions and 18 deletions
|
@ -51,11 +51,11 @@ template <typename T> class MAPNIK_DECL box2d
|
||||||
public:
|
public:
|
||||||
using value_type = T;
|
using value_type = T;
|
||||||
using box2d_type = box2d<value_type>;
|
using box2d_type = box2d<value_type>;
|
||||||
private:
|
|
||||||
T minx_;
|
T minx_;
|
||||||
T miny_;
|
T miny_;
|
||||||
T maxx_;
|
T maxx_;
|
||||||
T maxy_;
|
T maxy_;
|
||||||
|
private:
|
||||||
friend inline void swap(box2d_type & lhs, box2d_type & rhs)
|
friend inline void swap(box2d_type & lhs, box2d_type & rhs)
|
||||||
{
|
{
|
||||||
using std::swap;
|
using std::swap;
|
||||||
|
|
|
@ -33,24 +33,30 @@
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#include <mapnik/warning_ignore.hpp>
|
#include <mapnik/warning_ignore.hpp>
|
||||||
#include <boost/fusion/include/adapt_adt.hpp>
|
#include <boost/fusion/include/adapt_struct.hpp>
|
||||||
#include <boost/spirit/include/qi.hpp>
|
#include <boost/spirit/home/x3.hpp>
|
||||||
#include <boost/spirit/include/support_adapt_adt_attributes.hpp>
|
|
||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
|
|
||||||
// agg
|
// agg
|
||||||
#include "agg_trans_affine.h"
|
#include "agg_trans_affine.h"
|
||||||
|
|
||||||
BOOST_FUSION_ADAPT_TPL_ADT(
|
BOOST_FUSION_ADAPT_TPL_STRUCT(
|
||||||
(T),
|
(T),
|
||||||
(mapnik::box2d)(T),
|
(mapnik::box2d)(T),
|
||||||
(T, T, obj.minx(), obj.set_minx(mapnik::safe_cast<T>(val)))
|
(T, minx_),
|
||||||
(T, T, obj.miny(), obj.set_miny(mapnik::safe_cast<T>(val)))
|
(T, miny_),
|
||||||
(T, T, obj.maxx(), obj.set_maxx(mapnik::safe_cast<T>(val)))
|
(T, maxx_),
|
||||||
(T, T, obj.maxy(), obj.set_maxy(mapnik::safe_cast<T>(val))))
|
(T, maxy_))
|
||||||
|
|
||||||
|
namespace mapnik {
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
auto minx = [](auto& ctx) { _val(ctx) = _attr(ctx); };
|
||||||
|
auto miny = [](auto& ctx) { _val(ctx) = _attr(ctx); };
|
||||||
|
auto maxx = [](auto& ctx) { _val(ctx) = _attr(ctx); };
|
||||||
|
auto maxy = [](auto& ctx) { _val(ctx) = _attr(ctx); };
|
||||||
|
}
|
||||||
|
|
||||||
namespace mapnik
|
|
||||||
{
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
box2d<T>::box2d()
|
box2d<T>::box2d()
|
||||||
:minx_( std::numeric_limits<T>::max()),
|
:minx_( std::numeric_limits<T>::max()),
|
||||||
|
@ -61,13 +67,13 @@ box2d<T>::box2d()
|
||||||
template <typename T>
|
template <typename T>
|
||||||
box2d<T>::box2d(T minx,T miny,T maxx,T maxy)
|
box2d<T>::box2d(T minx,T miny,T maxx,T maxy)
|
||||||
{
|
{
|
||||||
init(minx,miny,maxx,maxy);
|
init(minx, miny, maxx, maxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
box2d<T>::box2d(coord<T,2> const& c0, coord<T,2> const& c1)
|
box2d<T>::box2d(coord<T,2> const& c0, coord<T,2> const& c1)
|
||||||
{
|
{
|
||||||
init(c0.x,c0.y,c1.x,c1.y);
|
init(c0.x, c0.y, c1.x, c1.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -350,12 +356,15 @@ void box2d<T>::pad(T padding)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool box2d<T>::from_string(std::string const& str)
|
bool box2d<T>::from_string(std::string const& str)
|
||||||
{
|
{
|
||||||
boost::spirit::qi::lit_type lit;
|
using boost::spirit::x3::lit;
|
||||||
boost::spirit::qi::double_type double_;
|
boost::spirit::x3::double_type double_;
|
||||||
boost::spirit::ascii::space_type space;
|
boost::spirit::x3::ascii::space_type space;
|
||||||
bool r = boost::spirit::qi::phrase_parse(str.begin(),
|
bool r = boost::spirit::x3::phrase_parse(str.begin(),
|
||||||
str.end(),
|
str.end(),
|
||||||
double_ >> -lit(',') >> double_ >> -lit(',') >> double_ >> -lit(',') >> double_,
|
double_[detail::minx] >> -lit(',') >>
|
||||||
|
double_[detail::miny] >> -lit(',') >>
|
||||||
|
double_[detail::maxx] >> -lit(',') >>
|
||||||
|
double_[detail::maxy],
|
||||||
space,
|
space,
|
||||||
*this);
|
*this);
|
||||||
return r;
|
return r;
|
||||||
|
|
Loading…
Add table
Reference in a new issue