From e298d141da74d1f62bbf4bc625363d0ba0983377 Mon Sep 17 00:00:00 2001 From: Hermann Kraus Date: Sun, 5 Feb 2012 03:11:00 +0100 Subject: [PATCH] Improve expression handling. --- include/mapnik/attribute_collector.hpp | 10 +++++---- include/mapnik/text_placements.hpp | 4 ++-- include/mapnik/text_placements_list.hpp | 2 +- include/mapnik/text_processing.hpp | 8 +++++--- src/text_placements.cpp | 27 ++++++++----------------- src/text_processing.cpp | 10 ++++----- 6 files changed, 27 insertions(+), 34 deletions(-) diff --git a/include/mapnik/attribute_collector.hpp b/include/mapnik/attribute_collector.hpp index 3e4d3b681..ce0f16a08 100644 --- a/include/mapnik/attribute_collector.hpp +++ b/include/mapnik/attribute_collector.hpp @@ -88,8 +88,9 @@ struct symbolizer_attributes : public boost::static_visitor<> void operator () (text_symbolizer const& sym) { - std::set::const_iterator it; - std::set expressions = sym.get_placement_options()->get_all_expressions(); + expression_set::const_iterator it; + expression_set expressions; + sym.get_placement_options()->add_expressions(expressions); expression_attributes f_attr(names_); for (it=expressions.begin(); it != expressions.end(); it++) { @@ -141,8 +142,9 @@ struct symbolizer_attributes : public boost::static_visitor<> void operator () (shield_symbolizer const& sym) { - std::set::const_iterator it; - std::set expressions = sym.get_placement_options()->get_all_expressions(); + expression_set::const_iterator it; + expression_set expressions; + sym.get_placement_options()->add_expressions(expressions); expression_attributes f_attr(names_); for (it=expressions.begin(); it != expressions.end(); it++) { diff --git a/include/mapnik/text_placements.hpp b/include/mapnik/text_placements.hpp index d7d7ae8fd..9ad1dc483 100644 --- a/include/mapnik/text_placements.hpp +++ b/include/mapnik/text_placements.hpp @@ -91,7 +91,7 @@ struct text_symbolizer_properties formating::node_ptr format_tree() const; /** Get a list of all expressions used in any placement. * This function is used to collect attributes. */ - std::set get_all_expressions() const; + void add_expressions(expression_set &output) const; //Per symbolizer options expression_ptr orientation; @@ -236,7 +236,7 @@ public: /** Get a list of all expressions used in any placement. * This function is used to collect attributes. */ - virtual std::set get_all_expressions(); + virtual void add_expressions(expression_set &output); /** Destructor. */ virtual ~text_placements() {} diff --git a/include/mapnik/text_placements_list.hpp b/include/mapnik/text_placements_list.hpp index 1010816be..6d508019d 100644 --- a/include/mapnik/text_placements_list.hpp +++ b/include/mapnik/text_placements_list.hpp @@ -35,7 +35,7 @@ public: text_placements_list(); text_placement_info_ptr get_placement_info( double scale_factor, dimension_type dim, bool has_dimensions) const; - virtual std::set get_all_expressions(); + virtual void add_expressions(expression_set &output); text_symbolizer_properties & add(); text_symbolizer_properties & get(unsigned i); unsigned size() const; diff --git a/include/mapnik/text_processing.hpp b/include/mapnik/text_processing.hpp index bd5698fc7..d1ad66fc8 100644 --- a/include/mapnik/text_processing.hpp +++ b/include/mapnik/text_processing.hpp @@ -42,6 +42,8 @@ namespace mapnik class processed_text; struct char_properties; +typedef std::set expression_set; + enum label_placement_enum { POINT_PLACEMENT, LINE_PLACEMENT, @@ -104,7 +106,7 @@ public: virtual void to_xml(boost::property_tree::ptree &xml) const; static node_ptr from_xml(boost::property_tree::ptree const& xml); virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const = 0; - virtual void add_expressions(std::set &expressions) const; + virtual void add_expressions(expression_set &output) const; }; class list_node: public node { @@ -112,7 +114,7 @@ public: list_node() : node(), children_() {} virtual void to_xml(boost::property_tree::ptree &xml) const; virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const; - virtual void add_expressions(std::set &expressions) const; + virtual void add_expressions(expression_set &output) const; void push_back(node_ptr n); void set_children(std::vector const& children); @@ -128,7 +130,7 @@ public: void to_xml(boost::property_tree::ptree &xml) const; static node_ptr from_xml(boost::property_tree::ptree const& xml); virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const; - virtual void add_expressions(std::set &expressions) const; + virtual void add_expressions(expression_set &output) const; void set_text(expression_ptr text); expression_ptr get_text() const; diff --git a/src/text_placements.cpp b/src/text_placements.cpp index 6333c8304..914190d3b 100644 --- a/src/text_placements.cpp +++ b/src/text_placements.cpp @@ -217,11 +217,10 @@ void text_symbolizer_properties::to_xml(boost::property_tree::ptree &node, bool } -std::set text_symbolizer_properties::get_all_expressions() const +void text_symbolizer_properties::add_expressions(expression_set &output) const { - std::set result; - if (tree_) tree_->add_expressions(result); - return result; + output.insert(orientation); + if (tree_) tree_->add_expressions(output); } void text_symbolizer_properties::set_old_style_expression(expression_ptr expr) @@ -356,13 +355,9 @@ text_placements::text_placements() : properties() { } -std::set text_placements::get_all_expressions() +void text_placements::add_expressions(expression_set &output) { - std::set result, tmp; - tmp = properties.get_all_expressions(); - result.insert(tmp.begin(), tmp.end()); - result.insert(properties.orientation); - return result; + properties.add_expressions(output); } @@ -566,21 +561,15 @@ text_placements_list::text_placements_list() : text_placements(), list_(0) } -std::set text_placements_list::get_all_expressions() +void text_placements_list::add_expressions(expression_set &output) { - std::set result, tmp; - tmp = properties.get_all_expressions(); - result.insert(tmp.begin(), tmp.end()); - result.insert(properties.orientation); + properties.add_expressions(output); std::vector::const_iterator it; for (it=list_.begin(); it != list_.end(); it++) { - tmp = it->get_all_expressions(); - result.insert(tmp.begin(), tmp.end()); - result.insert(it->orientation); + it->add_expressions(output); } - return result; } unsigned text_placements_list::size() const diff --git a/src/text_processing.cpp b/src/text_processing.cpp index 0e829ce60..82cd34c36 100644 --- a/src/text_processing.cpp +++ b/src/text_processing.cpp @@ -75,7 +75,7 @@ node_ptr node::from_xml(boost::property_tree::ptree const& xml) } } -void node::add_expressions(std::set &expressions) const +void node::add_expressions(expression_set &output) const { //Do nothing by default } @@ -104,13 +104,13 @@ void list_node::apply(char_properties const& p, Feature const& feature, processe } -void list_node::add_expressions(std::set &expressions) const +void list_node::add_expressions(expression_set &output) const { std::vector::const_iterator itr = children_.begin(); std::vector::const_iterator end = children_.end(); for (;itr != end; itr++) { - (*itr)->add_expressions(expressions); + (*itr)->add_expressions(output); } } @@ -179,9 +179,9 @@ void text_node::apply(char_properties const& p, Feature const& feature, processe } -void text_node::add_expressions(std::set &expressions) const +void text_node::add_expressions(expression_set &output) const { - if (text_) expressions.insert(text_); + if (text_) output.insert(text_); }