From 6d7ca1ac6ffc64366cf532e42a9af4cde4e3437d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 26 Apr 2011 17:39:21 +0000 Subject: [PATCH] move mapnik::value -> python value conversion to separate header fro reuse --- bindings/python/mapnik_feature.cpp | 34 +----------- bindings/python/mapnik_value_converter.hpp | 64 ++++++++++++++++++++++ 2 files changed, 67 insertions(+), 31 deletions(-) create mode 100644 bindings/python/mapnik_value_converter.hpp diff --git a/bindings/python/mapnik_feature.cpp b/bindings/python/mapnik_feature.cpp index ef828afb6..8b32c38d4 100644 --- a/bindings/python/mapnik_feature.cpp +++ b/bindings/python/mapnik_feature.cpp @@ -28,10 +28,12 @@ #include #include #include + // mapnik #include #include #include +#include "mapnik_value_converter.hpp" mapnik::geometry_type & (mapnik::Feature::*get_geom1)(unsigned) = &mapnik::Feature::get_geometry; @@ -56,37 +58,7 @@ void add_geometry(Feature & feature, std::auto_ptr geom) } // end anonymous namespace namespace boost { namespace python { - struct value_converter : public boost::static_visitor - { - PyObject * operator() (int val) const - { -#if PY_VERSION_HEX >= 0x03000000 - return ::PyLong_FromLong(val); -#else - return ::PyInt_FromLong(val); -#endif - } - - PyObject * operator() (double val) const - { - return ::PyFloat_FromDouble(val); - } - - PyObject * operator() (UnicodeString const& s) const - { - std::string buffer; - mapnik::to_utf8(s,buffer); - PyObject *obj = Py_None; - obj = ::PyUnicode_DecodeUTF8(buffer.c_str(),implicit_cast(buffer.length()),0); - return obj; - } - - PyObject * operator() (mapnik::value_null const& /*s*/) const - { - return NULL; - } - }; - + struct mapnik_value_to_python { static PyObject* convert(mapnik::value const& v) diff --git a/bindings/python/mapnik_value_converter.hpp b/bindings/python/mapnik_value_converter.hpp new file mode 100644 index 000000000..fb6d6bba8 --- /dev/null +++ b/bindings/python/mapnik_value_converter.hpp @@ -0,0 +1,64 @@ +/***************************************************************************** + * + * This file is part of Mapnik (c++ mapping toolkit) + * + * Copyright (C) 2011 Artem Pavlenko + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + *****************************************************************************/ +#ifndef MAPNIK_PYTHON_BINDING_VALUE_CONVERTER_INCLUDED +#define MAPNIK_PYTHON_BINDING_VALUE_CONVERTER_INCLUDED + +// boost +#include +#include + +namespace boost { namespace python { + struct value_converter : public boost::static_visitor + { + PyObject * operator() (int val) const + { +#if PY_VERSION_HEX >= 0x03000000 + return ::PyLong_FromLong(val); +#else + return ::PyInt_FromLong(val); +#endif + } + + PyObject * operator() (double val) const + { + return ::PyFloat_FromDouble(val); + } + + PyObject * operator() (UnicodeString const& s) const + { + std::string buffer; + mapnik::to_utf8(s,buffer); + PyObject *obj = Py_None; + obj = ::PyUnicode_DecodeUTF8(buffer.c_str(),implicit_cast(buffer.length()),0); + return obj; + } + + PyObject * operator() (mapnik::value_null const& /*s*/) const + { + return NULL; + } + }; + +} +} + +#endif // MAPNIK_PYTHON_BINDING_VALUE_CONVERTER_INCLUDED