4747#include < mapnik/group/group_symbolizer_properties.hpp>
4848#include < mapnik/util/variant.hpp>
4949
50- // stl
51- #include < sstream>
52-
5350using mapnik::symbolizer;
5451using mapnik::point_symbolizer;
5552using mapnik::line_symbolizer;
@@ -73,10 +70,61 @@ using mapnik::parse_path;
7370
7471
7572namespace {
73+
74+ struct value_to_target
75+ {
76+ value_to_target (mapnik::symbolizer_base & sym, std::string const & name)
77+ : sym_(sym), name_(name) {}
78+
79+ void operator () (mapnik::value_integer const & val)
80+ {
81+ auto key = mapnik::get_key (name_);
82+ switch (std::get<2 >(get_meta (key)))
83+ {
84+ case mapnik::property_types::target_bool:
85+ put (sym_, key, static_cast <mapnik::value_bool>(val));
86+ break ;
87+ case mapnik::property_types::target_double:
88+ put (sym_, key, static_cast <mapnik::value_double>(val));
89+ break ;
90+ default :
91+ put (sym_, key, val);
92+ break ;
93+ }
94+ }
95+
96+ void operator () (mapnik::value_double const & val)
97+ {
98+ auto key = mapnik::get_key (name_);
99+ switch (std::get<2 >(get_meta (key)))
100+ {
101+ case mapnik::property_types::target_bool:
102+ put (sym_, key, static_cast <mapnik::value_bool>(val));
103+ break ;
104+ case mapnik::property_types::target_integer:
105+ put (sym_, key, static_cast <mapnik::value_integer>(val));
106+ break ;
107+ default :
108+ put (sym_, key, val);
109+ break ;
110+ }
111+ }
112+
113+ template <typename T>
114+ void operator () (T const & val)
115+ {
116+ put (sym_, mapnik::get_key (name_), val);
117+ }
118+ private:
119+ mapnik::symbolizer_base & sym_;
120+ std::string const & name_;
121+
122+ };
123+
76124using namespace boost ::python;
77125void __setitem__ (mapnik::symbolizer_base & sym, std::string const & name, mapnik::symbolizer_base::value_type const & val)
78126{
79- put (sym, mapnik::get_key ( name), val);
127+ mapnik::util::apply_visitor ( value_to_target (sym, name), val);
80128}
81129
82130std::shared_ptr<mapnik::symbolizer_base::value_type> numeric_wrapper (const object& arg)
0 commit comments