2012-02-10 12:56:53 +01:00
/*****************************************************************************
*
* This file is part of Mapnik ( c + + mapping toolkit )
*
* Copyright ( C ) 2012 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
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
// mapnik
# include <mapnik/json/feature_collection_parser.hpp>
# include <mapnik/json/feature_collection_grammar.hpp>
// boost
# include <boost/version.hpp>
# include <boost/spirit/include/qi.hpp>
2012-02-20 17:23:31 +01:00
# include <boost/spirit/include/support_multi_pass.hpp>
2012-02-10 12:56:53 +01:00
namespace mapnik { namespace json {
2012-02-10 19:20:26 +01:00
# if BOOST_VERSION >= 104700
2012-02-20 17:23:31 +01:00
template < typename Iterator >
feature_collection_parser < Iterator > : : feature_collection_parser ( mapnik : : context_ptr const & ctx , mapnik : : transcoder const & tr )
2012-02-10 12:56:53 +01:00
: grammar_ ( new feature_collection_grammar < iterator_type , feature_type > ( ctx , tr ) ) { }
2012-02-20 17:23:31 +01:00
template < typename Iterator >
feature_collection_parser < Iterator > : : ~ feature_collection_parser ( ) { }
2012-02-10 19:20:26 +01:00
# endif
2012-02-10 12:56:53 +01:00
2012-02-20 17:23:31 +01:00
template < typename Iterator >
bool feature_collection_parser < Iterator > : : parse ( iterator_type first , iterator_type last , std : : vector < mapnik : : feature_ptr > & features )
2012-02-10 12:56:53 +01:00
{
2012-02-10 19:20:26 +01:00
# if BOOST_VERSION >= 104700
2012-02-10 12:56:53 +01:00
using namespace boost : : spirit ;
2012-02-14 19:33:05 +01:00
return qi : : phrase_parse ( first , last , * grammar_ , standard_wide : : space , features ) ;
2012-02-10 19:20:26 +01:00
# else
std : : ostringstream s ;
s < < BOOST_VERSION / 100000 < < " . " < < BOOST_VERSION / 100 % 1000 < < " . " < < BOOST_VERSION % 100 ;
throw std : : runtime_error ( " mapnik::feature_collection_parser::parse() requires at least boost 1.47 while your build was compiled against boost " + s . str ( ) ) ;
return false ;
# endif
2012-02-10 12:56:53 +01:00
}
2012-02-20 17:23:31 +01:00
template class feature_collection_parser < std : : string : : const_iterator > ;
template class feature_collection_parser < boost : : spirit : : multi_pass < std : : istreambuf_iterator < char > > > ;
2012-02-10 12:56:53 +01:00
} }