// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2014-2015, Oracle and/or its affiliates. // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Licensed under the Boost Software License version 1.0. // http://www.boost.org/users/license.html #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP #ifdef BOOST_GEOMETRY_TEST_DEBUG #include #include #include #include #include #include #include #include #include #include #include #include #endif // BOOST_GEOMETRY_TEST_DEBUG namespace boost { namespace geometry { namespace detail { namespace is_simple { #ifdef BOOST_GEOMETRY_TEST_DEBUG template ::type> struct debug_boundary_points_printer : not_implemented {}; template struct debug_boundary_points_printer { static inline void apply(Linestring const& linestring) { std::cout << "boundary points: "; std::cout << " " << geometry::dsv(range::front(linestring)); std::cout << " " << geometry::dsv(range::back(linestring)); std::cout << std::endl << std::endl; } }; template struct debug_boundary_points_printer { static inline void apply(MultiLinestring const& multilinestring) { typedef typename point_type::type point_type; typedef std::vector point_vector; point_vector boundary_points; for (typename boost::range_iterator::type it = boost::begin(multilinestring); it != boost::end(multilinestring); ++it) { if ( boost::size(*it) > 1 && !geometry::equals(range::front(*it), range::back(*it)) ) { boundary_points.push_back( range::front(*it) ); boundary_points.push_back( range::back(*it) ); } } std::sort(boundary_points.begin(), boundary_points.end(), geometry::less()); std::cout << "boundary points: "; for (typename point_vector::const_iterator pit = boundary_points.begin(); pit != boundary_points.end(); ++pit) { std::cout << " " << geometry::dsv(*pit); } std::cout << std::endl << std::endl; } }; template inline void debug_print_boundary_points(Linear const& linear) { debug_boundary_points_printer::apply(linear); } #else template inline void debug_print_boundary_points(Linear const&) { } #endif // BOOST_GEOMETRY_TEST_DEBUG }} // namespace detail::is_simple }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_SIMPLE_DEBUG_PRINT_BOUNDARY_POINTS_HPP