/home/andreas/src/svn/mapnik/include/mapnik/filter_factory.hpp

Go to the documentation of this file.
00001 /*****************************************************************************
00002  * 
00003  * This file is part of Mapnik (c++ mapping toolkit)
00004  *
00005  * Copyright (C) 2006 Artem Pavlenko
00006  *
00007  * This library is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * This library is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with this library; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020  *
00021  *****************************************************************************/
00022 
00023 //$Id$
00024 
00025 #ifndef FILTER_FACTORY_HPP
00026 #define FILTER_FACTORY_HPP
00027 
00028 #include <mapnik/filter_parser.hpp>
00029 
00030 namespace mapnik
00031 {
00032     using std::string;
00033     
00034     template<typename FeatureT>
00035     class MAPNIK_DECL filter_factory
00036     {
00037     public:
00038         static filter_ptr compile(string const& str)
00039         {
00040             stack<shared_ptr<filter<FeatureT> > > filters;
00041             stack<shared_ptr<expression<FeatureT> > > exps;
00042             filter_grammar<FeatureT> grammar(filters,exps);
00043             char const *text = str.c_str();
00044             parse_info<> info = parse(text,text+strlen(text),grammar,space_p);
00045             if (info.full && !filters.empty())
00046             {
00047                 return filters.top();   
00048             }
00049             else 
00050             {
00051                 clog << "failed at :" << info.stop << "\n";
00052                 return filter_ptr(new none_filter<FeatureT>());
00053             }  
00054         }
00055     };
00056     
00057     MAPNIK_DECL filter_ptr create_filter (std::string const& wkt);
00058 }
00059 
00060 #endif //FILTER_FACTORY_HPP

Generated on Thu Jul 19 17:59:26 2007 for Mapnik by  doxygen 1.4.7