From a47fee925cbdd77e41eceffce9d52cf9d92cb3be Mon Sep 17 00:00:00 2001 From: Barend Gehrels Date: Tue, 27 Nov 2018 21:50:58 +0100 Subject: [PATCH] [get_turn_info] Make specific side calculator for other calculations done in non typical order --- .../overlay/get_turn_info_for_endpoint.hpp | 38 ++++++++++++++++++- .../detail/overlay/get_turn_info_la.hpp | 6 +-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp index 32525b79f..a7bf4936c 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp @@ -222,6 +222,40 @@ private: ip_info ips[2]; }; +template +struct side_calculator_for_endpoint +{ + inline side_calculator_for_endpoint(Pi const& pi, Pj const& pj, Pk const& pk, + Qi const& qi, Qj const& qj, Qk const& qk, + SideStrategy const& side_strategy) + : m_pi(pi), m_pj(pj), m_pk(pk) + , m_qi(qi), m_qj(qj), m_qk(qk) + , m_side_strategy(side_strategy) + {} + + inline int pk_wrt_p1() const { return m_side_strategy.apply(m_pi, m_pj, m_pk); } + inline int pk_wrt_q1() const { return m_side_strategy.apply(m_qi, m_qj, m_pk); } + inline int qk_wrt_p1() const { return m_side_strategy.apply(m_pi, m_pj, m_qk); } + inline int qk_wrt_q1() const { return m_side_strategy.apply(m_qi, m_qj, m_qk); } + + inline int pk_wrt_q2() const { return m_side_strategy.apply(m_qj, m_qk, m_pk); } + inline int qk_wrt_p2() const { return m_side_strategy.apply(m_pj, m_pk, m_qk); } + + Pi const& m_pi; + Pj const& m_pj; + Pk const& m_pk; + Qi const& m_qi; + Qj const& m_qj; + Qk const& m_qk; + + SideStrategy m_side_strategy; +}; + + template struct get_turn_info_for_endpoint { @@ -445,7 +479,7 @@ struct get_turn_info_for_endpoint } else if ( ip_j2 ) { - side_calculator @@ -499,7 +533,7 @@ struct get_turn_info_for_endpoint } else if ( ip_j2 ) { - side_calculator side_calc(ri2, rj1, ri1, ri2, rj2, rk2, inters.get_side_strategy()); diff --git a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp index 25bb5ec87..4df068e3b 100644 --- a/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp +++ b/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp @@ -777,7 +777,7 @@ struct get_turn_info_linear_areal if ( ip0.is_qj ) { - side_calculator + ov::side_calculator_for_endpoint < typename IntersectionInfo::cs_tag, rp1_type, rp2_type, @@ -797,7 +797,7 @@ struct get_turn_info_linear_areal } else { - side_calculator + ov::side_calculator_for_endpoint < typename IntersectionInfo::cs_tag, rp1_type, rp2_type, @@ -851,7 +851,7 @@ struct get_turn_info_linear_areal } else //if ( result.template get<0>().count == 1 ) { - side_calculator + ov::side_calculator_for_endpoint < typename IntersectionInfo::cs_tag, typename IntersectionInfo::robust_point1_type,