make mapnik::symbolizer a mapnik::util::variant<Symbolizers...>

This commit is contained in:
artemp 2014-08-12 10:40:38 +01:00
parent 201641a206
commit 3f8c459195
8 changed files with 39 additions and 38 deletions

View file

@ -131,7 +131,7 @@ boost::python::object __getitem__(mapnik::symbolizer_base const& sym, std::strin
std::string __str__(mapnik::symbolizer const& sym)
{
return boost::apply_visitor(mapnik::symbolizer_to_json(), sym);
return mapnik::util::apply_visitor(mapnik::symbolizer_to_json(), sym);
}
std::string get_symbolizer_type(symbolizer const& sym)
@ -141,7 +141,7 @@ std::string get_symbolizer_type(symbolizer const& sym)
std::size_t hash_impl(symbolizer const& sym)
{
return boost::apply_visitor(mapnik::symbolizer_hash_visitor(), sym);
return mapnik::util::apply_visitor(mapnik::symbolizer_hash_visitor(), sym);
}
template <typename T>
@ -150,7 +150,7 @@ std::size_t hash_impl_2(T const& sym)
return mapnik::symbolizer_hash::value<T>(sym);
}
struct extract_underlying_type_visitor : boost::static_visitor<boost::python::object>
struct extract_underlying_type_visitor : mapnik::util::static_visitor<boost::python::object>
{
template <typename T>
boost::python::object operator() (T const& sym) const
@ -161,7 +161,7 @@ struct extract_underlying_type_visitor : boost::static_visitor<boost::python::ob
boost::python::object extract_underlying_type(symbolizer const& sym)
{
return boost::apply_visitor(extract_underlying_type_visitor(), sym);
return mapnik::util::apply_visitor(extract_underlying_type_visitor(), sym);
}
}

View file

@ -157,7 +157,7 @@ private:
expression_attributes<std::set<std::string> > f_attr_;
};
struct symbolizer_attributes : public boost::static_visitor<>
struct symbolizer_attributes : public util::static_visitor<>
{
symbolizer_attributes(std::set<std::string>& names,
double & filter_factor)
@ -210,7 +210,7 @@ private:
class attribute_collector : public mapnik::noncopyable
{
private:
std::set<std::string>& names_;
std::set<std::string> & names_;
double filter_factor_;
expression_attributes<std::set<std::string> > f_attr;
public:
@ -224,9 +224,9 @@ public:
{
typename RuleType::symbolizers const& symbols = r.get_symbolizers();
symbolizer_attributes s_attr(names_,filter_factor_);
for (auto symbol : symbols)
for (auto const& sym : symbols)
{
boost::apply_visitor(s_attr,symbol);
util::apply_visitor(std::ref(s_attr), sym);
}
expression_ptr const& expr = r.get_filter();
@ -256,12 +256,13 @@ inline void group_attribute_collector::operator() (group_symbolizer const& sym)
// get columns from child rules and symbolizers
group_symbolizer_properties_ptr props = get<group_symbolizer_properties_ptr>(sym, keys::group_properties);
if (props) {
if (props)
{
for (auto const& rule : props->get_rules())
{
// note that this recurses down on to the symbolizer
// internals too, so we get all free variables.
column_collector(*rule);
// FIXME column_collector(*rule);
// still need to collect repeat key columns
if (rule->get_repeat_key())
{

View file

@ -44,10 +44,10 @@
#include <mapnik/projection.hpp>
#include <mapnik/proj_transform.hpp>
#include <mapnik/util/featureset_buffer.hpp>
#include <mapnik/util/variant.hpp>
// boost
#include <boost/variant/apply_visitor.hpp>
#include <boost/variant/static_visitor.hpp>
//#include <boost/variant/static_visitor.hpp>
// stl
#include <vector>
@ -87,7 +87,7 @@ struct process_impl<false>
* \param sym Symbolizer object
*/
template <typename Processor>
struct feature_style_processor<Processor>::symbol_dispatch : public boost::static_visitor<>
struct feature_style_processor<Processor>::symbol_dispatch : public util::static_visitor<>
{
symbol_dispatch (Processor & output,
mapnik::feature_impl & f,
@ -665,7 +665,7 @@ void feature_style_processor<Processor>::render_style(
{
for (symbolizer const& sym : symbols)
{
boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
util::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
}
}
if (style->get_filter_mode() == FILTER_FIRST)
@ -686,7 +686,7 @@ void feature_style_processor<Processor>::render_style(
{
for (symbolizer const& sym : symbols)
{
boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
util::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
}
}
}
@ -701,7 +701,7 @@ void feature_style_processor<Processor>::render_style(
{
for (symbolizer const& sym : symbols)
{
boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
util::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
}
}
}

View file

@ -109,7 +109,7 @@ using render_thunk_list = std::list<render_thunk_ptr>;
// The bounding boxes can be used for layout, and the thunks are
// used to re-render at locations according to the group layout.
struct render_thunk_extractor : public boost::static_visitor<>
struct render_thunk_extractor : public util::static_visitor<>
{
render_thunk_extractor(box2d<double> & box,
render_thunk_list & thunks,
@ -280,7 +280,7 @@ void render_group_symbolizer(group_symbolizer const& sym,
for (auto const& sym : *rule)
{
// TODO: construct layout and obtain bounding box
boost::apply_visitor(extractor, sym);
util::apply_visitor(extractor, sym);
}
// add the bounding box to the layout manager

View file

@ -536,18 +536,18 @@ struct MAPNIK_DECL group_symbolizer : public symbolizer_base {};
struct MAPNIK_DECL debug_symbolizer : public symbolizer_base {};
// symbolizer
using symbolizer = boost::variant<point_symbolizer,
line_symbolizer,
line_pattern_symbolizer,
polygon_symbolizer,
polygon_pattern_symbolizer,
raster_symbolizer,
shield_symbolizer,
text_symbolizer,
building_symbolizer,
markers_symbolizer,
group_symbolizer,
debug_symbolizer>;
using symbolizer = util::variant<point_symbolizer,
line_symbolizer,
line_pattern_symbolizer,
polygon_symbolizer,
polygon_pattern_symbolizer,
raster_symbolizer,
shield_symbolizer,
text_symbolizer,
building_symbolizer,
markers_symbolizer,
group_symbolizer,
debug_symbolizer>;
using dash_array = std::vector<std::pair<double,double> >;

View file

@ -77,7 +77,7 @@ struct symbolizer_hash
}
};
struct symbolizer_hash_visitor : boost::static_visitor<std::size_t>
struct symbolizer_hash_visitor : util::static_visitor<std::size_t>
{
template <typename Symbolizer>
std::size_t operator() (Symbolizer const& sym) const

View file

@ -39,7 +39,7 @@
#include <mapnik/parse_transform.hpp>
#include <mapnik/util/variant.hpp>
// boost
#include <boost/variant/apply_visitor.hpp>
//#include <boost/variant/apply_visitor.hpp>
namespace mapnik {
@ -124,7 +124,7 @@ struct symbolizer_traits<debug_symbolizer>
// symbolizer name impl
namespace detail {
struct symbolizer_name_impl : public boost::static_visitor<std::string>
struct symbolizer_name_impl : public util::static_visitor<std::string>
{
public:
template <typename Symbolizer>
@ -137,7 +137,7 @@ public:
inline std::string symbolizer_name(symbolizer const& sym)
{
std::string type = boost::apply_visitor( detail::symbolizer_name_impl(), sym);
std::string type = util::apply_visitor( detail::symbolizer_name_impl(), sym);
return type;
}
@ -230,7 +230,7 @@ private:
Meta const& meta_;
};
struct symbolizer_to_json : public boost::static_visitor<std::string>
struct symbolizer_to_json : public util::static_visitor<std::string>
{
using result_type = std::string;

View file

@ -32,7 +32,7 @@
namespace mapnik {
struct symbol_type_dispatch : public boost::static_visitor<bool>
struct symbol_type_dispatch : public util::static_visitor<bool>
{
template <typename Symbolizer>
bool operator()(Symbolizer const& sym) const
@ -51,7 +51,7 @@ struct symbol_type_dispatch : public boost::static_visitor<bool>
bool is_path_based(symbolizer const& sym)
{
return boost::apply_visitor(symbol_type_dispatch(), sym);
return util::apply_visitor(symbol_type_dispatch(), sym);
}
template <typename OutputIterator, typename PathType>
@ -86,7 +86,7 @@ bool svg_renderer<OutputIterator>::process(rule::symbolizers const& syms,
{
process_path = true;
}
boost::apply_visitor(symbol_dispatch(*this, feature, prj_trans), sym);
util::apply_visitor(symbol_dispatch(*this, feature, prj_trans), sym);
}
if (process_path)