00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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