void visit(rule_type const& r)
	{	    
	    const symbolizers& symbols = r.get_symbolizers();
	    symbolizers::const_iterator symIter=symbols.begin();
	    symbolizer_attributes attr(names_);
	    while (symIter != symbols.end())
	    {
		boost::apply_visitor(attr,*symIter++);
	    }
	    filter_ptr const& filter = r.get_filter();
	    filter->accept(*this);
	}
Пример #2
0
    static  boost::python::tuple
    getstate(const rule_type& r)
    {
        boost::python::list syms;
        
	rule_type::symbolizers::const_iterator begin = r.get_symbolizers().begin();
	rule_type::symbolizers::const_iterator end = r.get_symbolizers().end();        
        pickle_symbolizer serializer( syms );
        std::for_each( begin, end , boost::apply_visitor( serializer ));
        
	// We serialize filter expressions AST as strings
        std::string filter_expr = to_expression_string(*r.get_filter());
	
        return boost::python::make_tuple(r.get_abstract(),filter_expr,r.has_else_filter(),syms);
    }
Пример #3
0
    static void
    setstate (rule_type& r, boost::python::tuple state)
    {
        using namespace boost::python;
        if (len(state) != 4)
        {
            PyErr_SetObject(PyExc_ValueError,
			    ("expected 4-item tuple in call to __setstate__; got %s"
			     % state).ptr()
		);
            throw_error_already_set();
        }
                
        if (state[0])
        {
            r.set_title(extract<std::string>(state[0]));
        }    

        if (state[1])
        {
            rule_type dfl;
            std::string filter = extract<std::string>(state[1]);
            std::string default_filter = "<TODO>";//dfl.get_filter()->to_string();
            if ( filter != default_filter)
            {
                r.set_filter(mapnik::parse_expression(filter,"utf8"));
            }
        }    

        if (state[2])
        {
            r.set_else(true);
        }    
        
        boost::python::list syms=extract<boost::python::list>(state[3]);
        extract_symbolizer serializer( r );
        for (int i=0;i<len(syms);++i)
        {
            symbolizer symbol = extract<symbolizer>(syms[i]);
            boost::apply_visitor( serializer, symbol );
        }        
    }
Пример #4
0
    static boost::python::tuple
    getinitargs(const rule_type& r)
    {
	return boost::python::make_tuple(r.get_name(),r.get_title(),r.get_min_scale(),r.get_max_scale());
    }