#ifndef BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
#define BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP
-#include <boost/geometry/algorithms/not_implemented.hpp>
+#include <boost/geometry/core/coordinate_type.hpp>
+#include <boost/geometry/policies/robustness/rescale_policy_tags.hpp>
-namespace boost { namespace geometry
+#include <boost/config.hpp>
+#include <boost/mpl/if.hpp>
+
+namespace boost { namespace geometry { namespace detail
{
-// Meta-function to access segment-ratio for a policy
+// Temporary meta-function to access segment-ratio for a policy
template <typename Point, typename Policy>
-struct segment_ratio_type {}; // : not_implemented<> {};
-
-
-}} // namespace boost::geometry
+struct segment_ratio_type
+{
+ // Type in segment ratio is either the coordinate type, or for
+ // deprecated robust point types it is a long_long type
+ typedef typename boost::mpl::if_c
+ <
+ boost::is_same
+ <
+ typename rescale_policy_type<Policy>::type,
+ no_rescale_policy_tag
+ >::value,
+ typename geometry::coordinate_type<Point>::type,
+ boost::long_long_type
+ >::type coordinate_type;
+
+ // Define segment ratio based on the coordinate type
+ typedef geometry::segment_ratio<coordinate_type> type;
+};
+
+
+}}} // namespace boost::geometry::deatil
#endif // BOOST_GEOMETRY_POLICIES_ROBUSTNESS_SEGMENT_RATIO_TYPE_HPP