Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r76813 - sandbox/gtl/boost/polygon
From: sydorchuk.andriy_at_[hidden]
Date: 2012-01-31 15:53:05


Author: asydorchuk
Date: 2012-01-31 15:53:05 EST (Tue, 31 Jan 2012)
New Revision: 76813
URL: http://svn.boost.org/trac/boost/changeset/76813

Log:
Minor optimizations to the voronoi of segments algorithm.
Text files modified:
   sandbox/gtl/boost/polygon/voronoi_builder.hpp | 24 ++++++++++++++----------
   1 files changed, 14 insertions(+), 10 deletions(-)

Modified: sandbox/gtl/boost/polygon/voronoi_builder.hpp
==============================================================================
--- sandbox/gtl/boost/polygon/voronoi_builder.hpp (original)
+++ sandbox/gtl/boost/polygon/voronoi_builder.hpp 2012-01-31 15:53:05 EST (Tue, 31 Jan 2012)
@@ -263,7 +263,7 @@
                  edge_type *edge = output->insert_new_edge(*it_first, *it_second).first;
 
                  // Insert a new bisector into the beach line.
- beach_line_.insert(
+ beach_line_.insert(beach_line_.end(),
                      std::pair<key_type, value_type>(new_node, value_type(edge)));
 
                  // Update iterators.
@@ -301,14 +301,14 @@
                        last->is_segment() && last->point0() == site_event.point0())
                     ++last;
             }
+
+ // Find the node in the binary search tree with left arc
+ // lying above the new site point.
+ key_type new_key(*site_event_iterator_);
+ beach_line_iterator right_it = beach_line_.lower_bound(new_key);
+
             for (; site_event_iterator_ != last; ++site_event_iterator_) {
                 site_event = *site_event_iterator_;
- // Create degenerate node.
- key_type new_key(site_event);
-
- // Find the node in the binary search tree with left arc
- // lying above the new site point.
- beach_line_iterator right_it = beach_line_.lower_bound(new_key);
                 beach_line_iterator left_it = right_it;
 
                 // Do further processing depending on the above node position.
@@ -336,7 +336,7 @@
                     const site_event_type &site_arc = right_it->first.left_site();
 
                     // Insert new nodes into the beach line. Update the output.
- insert_new_arc(site_arc, site_arc, site_event, right_it, output);
+ left_it = insert_new_arc(site_arc, site_arc, site_event, right_it, output);
 
                     // If the site event is a segment, update its direction.
                     if (site_event.is_segment()) {
@@ -348,6 +348,7 @@
                     // a new bisector and the one on the right.
                     activate_circle_event(site_event, right_it->first.left_site(),
                                           right_it->first.right_site(), right_it);
+ right_it = left_it;
                 } else {
                     // The above arc corresponds neither to the first,
                     // nor to the last site in the beach line.
@@ -376,6 +377,7 @@
                     }
                     activate_circle_event(site_event, site_arc2, site3,
                                           right_it);
+ right_it = new_node_it;
                 }
             }
         }
@@ -483,8 +485,10 @@
                 end_points_.push(std::make_pair(site_event.point1(), position));
             }
 
- return beach_line_.insert(position,
- typename beach_line_type::value_type(new_left_node, value_type(edges.first)));
+ position = beach_line_.insert(position,
+ beach_line_type::value_type(new_left_node, value_type(edges.first)));
+
+ return position;
         }
 
         // Add a new circle event to the event queue.


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk