mapnik::value_holder get_params_by_key1(mapnik::parameters const& p, std::string const& key) { parameters::const_iterator pos = p.find(key); if (pos != p.end()) { // will be auto-converted to proper python type by `mapnik_params_to_python` return pos->second; } return mapnik::value_null(); }
mapnik::value_holder get_params_by_key2(mapnik::parameters const& p, std::string const& key) { parameters::const_iterator pos = p.find(key); if (pos == p.end()) { PyErr_SetString(PyExc_KeyError, key.c_str()); boost::python::throw_error_already_set(); } // will be auto-converted to proper python type by `mapnik_params_to_python` return pos->second; }
mapnik::parameter get_params_by_index(mapnik::parameters const& p, int index) { if (index < 0 || static_cast<unsigned>(index) > p.size()) { PyErr_SetString(PyExc_IndexError, "Index is out of range"); throw boost::python::error_already_set(); } parameters::const_iterator itr = p.begin(); std::advance(itr, index); if (itr != p.end()) { return *itr; } PyErr_SetString(PyExc_IndexError, "Index is out of range"); throw boost::python::error_already_set(); }