diff --git a/include/boost/geometry/formulas/area_formulas.hpp b/include/boost/geometry/formulas/area_formulas.hpp index 6a0b525e2..9243c7f74 100644 --- a/include/boost/geometry/formulas/area_formulas.hpp +++ b/include/boost/geometry/formulas/area_formulas.hpp @@ -1,8 +1,9 @@ // Boost.Geometry -// Copyright (c) 2015-2016 Oracle and/or its affiliates. +// Copyright (c) 2015-2017 Oracle and/or its affiliates. // Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle +// Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at @@ -540,12 +541,11 @@ public: return result; } - // Keep track whenever a segment crosses the prime meridian + // Check whenever a segment crosses the prime meridian // First normalize to [0,360) - template - static inline int crosses_prime_meridian(PointOfSegment const& p1, - PointOfSegment const& p2, - StateType& state) + template + static inline bool crosses_prime_meridian(PointOfSegment const& p1, + PointOfSegment const& p2) { CT const pi = geometry::math::pi(); @@ -562,12 +562,7 @@ public: CT max_lon = (std::max)(p1_lon, p2_lon); CT min_lon = (std::min)(p1_lon, p2_lon); - if(max_lon > pi && min_lon < pi && max_lon - min_lon > pi) - { - state.m_crosses_prime_meridian++; - } - - return state.m_crosses_prime_meridian; + return max_lon > pi && min_lon < pi && max_lon - min_lon > pi; } }; diff --git a/include/boost/geometry/strategies/geographic/area.hpp b/include/boost/geometry/strategies/geographic/area.hpp index 7b03abf4f..40d6c8243 100644 --- a/include/boost/geometry/strategies/geographic/area.hpp +++ b/include/boost/geometry/strategies/geographic/area.hpp @@ -174,8 +174,10 @@ public : state.m_correction_sum += result.ellipsoidal_term; // Keep track whenever a segment crosses the prime meridian - geometry::formula::area_formulas - ::crosses_prime_meridian(p1, p2, state); + if (area_formulas::crosses_prime_meridian(p1, p2)) + { + state.m_crosses_prime_meridian++; + } } } diff --git a/include/boost/geometry/strategies/spherical/area.hpp b/include/boost/geometry/strategies/spherical/area.hpp index 206b73454..1ab61b644 100644 --- a/include/boost/geometry/strategies/spherical/area.hpp +++ b/include/boost/geometry/strategies/spherical/area.hpp @@ -127,14 +127,15 @@ public : { if (! geometry::math::equals(get<0>(p1), get<0>(p2))) { + typedef geometry::formula::area_formulas area_formulas; - state.m_sum += geometry::formula::area_formulas - ::template spherical(p1, p2); + state.m_sum += area_formulas::template spherical(p1, p2); // Keep track whenever a segment crosses the prime meridian - geometry::formula::area_formulas - ::crosses_prime_meridian(p1, p2, state); - + if (area_formulas::crosses_prime_meridian(p1, p2)) + { + state.m_crosses_prime_meridian++; + } } }