]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/geometry/strategies/geographic/azimuth.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / geometry / strategies / geographic / azimuth.hpp
index b918caccea53338a9d16c1669cd745bc141c38cb..ca280313d232b32386c09781b789fc4fd4e111ae 100644 (file)
@@ -1,6 +1,6 @@
 // Boost.Geometry (aka GGL, Generic Geometry Library)
 
-// Copyright (c) 2016-2017 Oracle and/or its affiliates.
+// Copyright (c) 2016-2020 Oracle and/or its affiliates.
 // Contributed and/or modified by Vissarion Fisikopoulos, on behalf of Oracle
 // Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
 
 #define BOOST_GEOMETRY_STRATEGIES_GEOGRAPHIC_AZIMUTH_HPP
 
 
+#include <type_traits>
+
 #include <boost/geometry/srs/spheroid.hpp>
 
 #include <boost/geometry/strategies/azimuth.hpp>
 #include <boost/geometry/strategies/geographic/parameters.hpp>
 
-#include <boost/mpl/if.hpp>
-#include <boost/type_traits/is_void.hpp>
-
 
 namespace boost { namespace geometry
 {
@@ -57,39 +56,69 @@ public :
                       T const& lon2_rad, T const& lat2_rad,
                       T& a1, T& a2) const
     {
-        typedef typename boost::mpl::if_
-            <
-                boost::is_void<CalculationType>, T, CalculationType
-            >::type calc_t;            
-
-        typedef typename FormulaPolicy::template inverse<calc_t, false, true, true, false, false> inverse_type;
-        typedef typename inverse_type::result_type inverse_result;
-        inverse_result i_res = inverse_type::apply(calc_t(lon1_rad), calc_t(lat1_rad),
-                                                   calc_t(lon2_rad), calc_t(lat2_rad),
-                                                   m_spheroid);
-        a1 = i_res.azimuth;
-        a2 = i_res.reverse_azimuth;
+        compute<true, true>(lon1_rad, lat1_rad,
+                            lon2_rad, lat2_rad,
+                            a1, a2);
     }
-
     template <typename T>
     inline void apply(T const& lon1_rad, T const& lat1_rad,
                       T const& lon2_rad, T const& lat2_rad,
                       T& a1) const
     {
-        typedef typename boost::mpl::if_
-                <
-                    boost::is_void<CalculationType>, T, CalculationType
-                >::type calc_t;
+        compute<true, false>(lon1_rad, lat1_rad,
+                             lon2_rad, lat2_rad,
+                             a1, a1);
+    }
+    template <typename T>
+    inline void apply_reverse(T const& lon1_rad, T const& lat1_rad,
+                              T const& lon2_rad, T const& lat2_rad,
+                              T& a2) const
+    {
+        compute<false, true>(lon1_rad, lat1_rad,
+                             lon2_rad, lat2_rad,
+                             a2, a2);
+    }
+
+private :
+
+    template
+    <
+        bool EnableAzimuth,
+        bool EnableReverseAzimuth,
+        typename T
+    >
+    inline void compute(T const& lon1_rad, T const& lat1_rad,
+                        T const& lon2_rad, T const& lat2_rad,
+                        T& a1, T& a2) const
+    {
+        typedef std::conditional_t
+            <
+                std::is_void<CalculationType>::value, T, CalculationType
+            > calc_t;
 
-        typedef typename FormulaPolicy::template inverse<calc_t, false, true, false, false, false> inverse_type;
+        typedef typename FormulaPolicy::template inverse
+            <
+                calc_t,
+                false,
+                EnableAzimuth,
+                EnableReverseAzimuth,
+                false,
+                false
+            > inverse_type;
         typedef typename inverse_type::result_type inverse_result;
         inverse_result i_res = inverse_type::apply(calc_t(lon1_rad), calc_t(lat1_rad),
                                                    calc_t(lon2_rad), calc_t(lat2_rad),
                                                    m_spheroid);
-        a1 = i_res.azimuth;
+        if (EnableAzimuth)
+        {
+            a1 = i_res.azimuth;
+        }
+        if (EnableReverseAzimuth)
+        {
+            a2 = i_res.reverse_azimuth;
+        }
     }
 
-private :
     Spheroid m_spheroid;
 };