From 5adf42f96a7ae751d3ee97cabd6a627edbdb9fbb Mon Sep 17 00:00:00 2001 From: Dror Atariah Date: Thu, 25 Apr 2013 09:58:02 +0200 Subject: [PATCH] Shortened the calls to object from the segment traits Instead of having lots of calls like: m_poly_traits->m_seg_traits->equal_2_object(); I added, where needed, const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); and then replaced the above line with: seg_traits->equal_2_object(); --- .../include/CGAL/Arr_polyline_traits_2.h | 118 ++++++++++-------- 1 file changed, 67 insertions(+), 51 deletions(-) diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h index 9adaf78de85..aa2a551f49b 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_polyline_traits_2.h @@ -430,16 +430,17 @@ public: unsigned int n2 = cv2.number_of_segments(); // Check the pairwise equality of the contained segments. + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); typename Segment_traits_2::Compare_x_2 compare_x = - m_poly_traits->m_seg_traits->compare_x_2_object(); + seg_traits->compare_x_2_object(); typename Segment_traits_2::Compare_y_at_x_2 compare_y_at_x = - m_poly_traits->m_seg_traits->compare_y_at_x_2_object(); + seg_traits->compare_y_at_x_2_object(); typename Segment_traits_2::Construct_min_vertex_2 min_vertex = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 max_vertex = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); Is_vertical_2 is_vertical = m_poly_traits->is_vertical_2_object(); Point_2 point1,point2; Comparison_result res_x; @@ -548,10 +549,11 @@ public: const_seg_iterator it_next = start_seg; ++it_next; + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); Construct_x_monotone_curve_2 construct_x_monotone_curve = m_poly_traits->construct_x_monotone_curve_2_object(); @@ -570,9 +572,9 @@ public: // Polyline contains at least 2 segments! typename Segment_traits_2::Compare_xy_2 comp_xy = - m_poly_traits->m_seg_traits->compare_xy_2_object(); + seg_traits->compare_xy_2_object(); typename Segment_traits_2::Is_vertical_2 is_vertical = - m_poly_traits->m_seg_traits->is_vertical_2_object(); + seg_traits->is_vertical_2_object(); const_seg_iterator it_start = start_seg; const_seg_iterator it_curr = start_seg; @@ -634,12 +636,14 @@ public: { int num_seg = cv.number_of_segments(); CGAL_precondition(num_seg > 1); + + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); int last_seg = num_seg-1; @@ -666,12 +670,13 @@ public: { int num_seg = cv.number_of_segments(); + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); // cv is empty if (num_seg == 0) @@ -706,13 +711,14 @@ public: CGAL_precondition(num_seg > 0); + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); CGAL_precondition_code( typename Segment_traits_2::Compare_x_2 comp_x = - m_seg_traits->compare_x_2_object(); - CGAL_precondition_code(comp_x(get_max_v(cv[num_seg-1]),p)==LARGER); + seg_traits->compare_x_2_object(); + CGAL_precondition(comp_x(get_max_v(cv[num_seg-1]),p)==LARGER); ); cv.push_back(Segment_2(get_max_v(cv[num_seg-1]),p)); } @@ -735,14 +741,15 @@ public: return; } + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Compare_x_2 comp_x = - m_poly_traits->m_seg_traits->compare_x_2_object(); + seg_traits->compare_x_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); CGAL_precondition_code( if (num_seg == 1); @@ -782,12 +789,13 @@ public: void operator()(const X_monotone_curve_2& cv, const Point_2& p, X_monotone_curve_2& c1, X_monotone_curve_2& c2) const { + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 min_vertex = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 max_vertex = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); // Make sure the split point is not one of the curve endpoints. CGAL_precondition(!equal(min_vertex(cv[0]), p)); @@ -860,18 +868,19 @@ public: const X_monotone_curve_2& cv2, OutputIterator oi) { + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 min_vertex = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 max_vertex = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); typename Segment_traits_2::Compare_xy_2 compare_xy = - m_poly_traits->m_seg_traits->compare_xy_2_object(); + seg_traits->compare_xy_2_object(); typename Segment_traits_2::Intersect_2 intersect = - m_poly_traits->m_seg_traits->intersect_2_object(); + seg_traits->intersect_2_object(); typename Segment_traits_2::Compare_y_at_x_2 compare_y_at_x = - m_poly_traits->m_seg_traits->compare_y_at_x_2_object(); + seg_traits->compare_y_at_x_2_object(); const unsigned int n1 = cv1.number_of_segments(); const unsigned int n2 = cv2.number_of_segments(); @@ -1057,14 +1066,15 @@ public: bool operator()(const X_monotone_curve_2& cv1, const X_monotone_curve_2& cv2) const { + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 min_vertex = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 max_vertex = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); typename Segment_traits_2::Is_vertical_2 is_vertical = - m_poly_traits->m_seg_traits->is_vertical_2_object(); + seg_traits->is_vertical_2_object(); const unsigned int n1 = cv1.number_of_segments(); const unsigned int n2 = cv2.number_of_segments(); @@ -1203,12 +1213,13 @@ public: * independently from the SegmentTraits in use, as we do not allow * a polyline with degenerated segments. */ + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); CGAL_precondition_msg(!equal(get_min_v(seg),get_max_v(seg)), "Cannot construct a degenerated segment"); @@ -1285,14 +1296,15 @@ public: CGAL_precondition_code ( + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Compare_xy_2 comp_xy = - m_poly_traits->m_seg_traits->compare_xy_2_object(); + seg_traits->compare_xy_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); ); if (++next == end) @@ -1376,12 +1388,13 @@ public: * independently from the SegmentTraits in use, as we do not allow * a polyline with degenerated segments. */ + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); CGAL_precondition_msg(!equal(get_min_v(seg),get_max_v(seg)), "Cannot construct a degenerated segment"); @@ -1420,12 +1433,14 @@ public: ++pt; CGAL_precondition (pt != end); + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); + // Initialize two comparison functors CGAL_precondition_code(typename Segment_traits_2::Compare_x_2 compare_x = - m_poly_traits->m_seg_traits->compare_x_2_object(); + seg_traits->compare_x_2_object(); ); typename Segment_traits_2::Compare_xy_2 compare_xy = - m_poly_traits->m_seg_traits->compare_xy_2_object(); + seg_traits->compare_xy_2_object(); // Make sure there is no change of directions as we traverse the polyline. // Save the comp_x between the first two points @@ -1481,19 +1496,20 @@ public: "one segment"); // Functors that have to be used always + const Segment_traits_2* seg_traits = m_poly_traits->segment_traits_2(); typename Segment_traits_2::Construct_min_vertex_2 get_min_v = - m_poly_traits->m_seg_traits->construct_min_vertex_2_object(); + seg_traits->construct_min_vertex_2_object(); typename Segment_traits_2::Construct_max_vertex_2 get_max_v = - m_poly_traits->m_seg_traits->construct_max_vertex_2_object(); + seg_traits->construct_max_vertex_2_object(); typename Segment_traits_2::Equal_2 equal = - m_poly_traits->m_seg_traits->equal_2_object(); + seg_traits->equal_2_object(); CGAL_precondition_code ( // A functor which is used only when validity tests of the // input have to be ran. typename Segment_traits_2::Is_vertical_2 is_vertical = - m_poly_traits->m_seg_traits->is_vertical_2_object(); + seg_traits->is_vertical_2_object(); InputIterator curr = begin; // Ensure that the first segment does not degenerate to a point.