/usr/include/boost/geometry/algorithms/detail/overlay
NameSizeModeActions
add_rings.hpp59640644editdlrm
append_no_duplicates.hpp21010644editdlrm
append_no_dups_or_spikes.hpp74340644editdlrm
assign_parents.hpp145770644editdlrm
backtrack_check_si.hpp63710644editdlrm
check_enrich.hpp53610644editdlrm
clip_linestring.hpp87180644editdlrm
cluster_exits.hpp78170644editdlrm
cluster_info.hpp10100644editdlrm
convert_ring.hpp31130644editdlrm
copy_segments.hpp114810644editdlrm
copy_segment_point.hpp111070644editdlrm
debug_turn_info.hpp19470644editdlrm
do_reverse.hpp12460644editdlrm
enrichment_info.hpp23430644editdlrm
enrich_intersection_points.hpp190080644editdlrm
follow.hpp169070644editdlrm
follow_linear_linear.hpp157110644editdlrm
get_distance_measure.hpp50920644editdlrm
get_intersection_points.hpp42650644editdlrm
get_relative_order.hpp32600644editdlrm
get_ring.hpp37000644editdlrm
get_turns.hpp420780644editdlrm
get_turn_info.hpp457460644editdlrm
get_turn_info_for_endpoint.hpp253370644editdlrm
get_turn_info_helpers.hpp197080644editdlrm
get_turn_info_la.hpp349410644editdlrm
get_turn_info_ll.hpp283800644editdlrm
handle_colocations.hpp286040644editdlrm
handle_self_turns.hpp99620644editdlrm
inconsistent_turns_exception.hpp10430644editdlrm
intersection_box_box.hpp26230644editdlrm
intersection_insert.hpp472960644editdlrm
is_self_turn.hpp16110644editdlrm
less_by_segment_ratio.hpp61610644editdlrm
linear_linear.hpp95620644editdlrm
needs_self_turns.hpp19110644editdlrm
overlay.hpp157060644editdlrm
overlay_type.hpp17460644editdlrm
pointlike_areal.hpp95930644editdlrm
pointlike_linear.hpp115470644editdlrm
pointlike_pointlike.hpp118780644editdlrm
range_in_geometry.hpp50660644editdlrm
ring_properties.hpp21350644editdlrm
segment_as_subrange.hpp14880644editdlrm
segment_identifier.hpp35550644editdlrm
select_rings.hpp123620644editdlrm
self_turn_points.hpp108140644editdlrm
sort_by_side.hpp222160644editdlrm
stream_info.hpp23830644editdlrm
traversal.hpp344320644editdlrm
traversal_info.hpp14690644editdlrm
traversal_ring_creator.hpp153190644editdlrm
traversal_switch_detector.hpp226420644editdlrm
traverse.hpp32560644editdlrm
turn_info.hpp44680644editdlrm
visit_info.hpp23500644editdlrm
Edit: /usr/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp (11878B)
// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2014-2020, Oracle and/or its affiliates. // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle // Contributed and/or modified by Adam Wulkiewicz, 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_OVERLAY_POINTLIKE_POINTLIKE_HPP #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP #include #include #include #include #include #include #include #include #include #include #include #include namespace boost { namespace geometry { #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { // struct for copying points of the pointlike geometries to output template < typename PointOut, typename GeometryIn, typename TagIn = typename tag::type > struct copy_points : not_implemented {}; template struct copy_points { template static inline void apply(PointIn const& point_in, OutputIterator& oit) { PointOut point_out; geometry::convert(point_in, point_out); *oit++ = point_out; } }; template struct copy_points { template static inline void apply(MultiPointIn const& multi_point_in, OutputIterator& oit) { for (typename boost::range_iterator::type it = boost::begin(multi_point_in); it != boost::end(multi_point_in); ++it) { PointOut point_out; geometry::convert(*it, point_out); *oit++ = point_out; } } }; // action struct for difference/intersection template struct action_selector_pl {}; template struct action_selector_pl { template < typename Point, typename OutputIterator > static inline void apply(Point const& point, bool is_common, OutputIterator& oit) { if ( is_common ) { copy_points::apply(point, oit); } } }; template struct action_selector_pl { template < typename Point, typename OutputIterator > static inline void apply(Point const& point, bool is_common, OutputIterator& oit) { if ( !is_common ) { copy_points::apply(point, oit); } } }; //=========================================================================== // difference/intersection of point-point template < typename Point1, typename Point2, typename PointOut, overlay_type OverlayType > struct point_point_point { template static inline OutputIterator apply(Point1 const& point1, Point2 const& point2, RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { action_selector_pl < PointOut, OverlayType >::apply(point1, detail::equals::equals_point_point(point1, point2, strategy), oit); return oit; } }; // difference of multipoint-point // // the apply method in the following struct is called only for // difference; for intersection the reversal will // always call the point-multipoint version template < typename MultiPoint, typename Point, typename PointOut, overlay_type OverlayType > struct multipoint_point_point { template static inline OutputIterator apply(MultiPoint const& multipoint, Point const& point, RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { BOOST_GEOMETRY_ASSERT( OverlayType == overlay_difference ); for (typename boost::range_iterator::type it = boost::begin(multipoint); it != boost::end(multipoint); ++it) { action_selector_pl < PointOut, OverlayType >::apply(*it, detail::equals::equals_point_point(*it, point, strategy), oit); } return oit; } }; // difference/intersection of point-multipoint template < typename Point, typename MultiPoint, typename PointOut, overlay_type OverlayType > struct point_multipoint_point { template static inline OutputIterator apply(Point const& point, MultiPoint const& multipoint, RobustPolicy const& , OutputIterator oit, Strategy const& strategy) { typedef action_selector_pl action; for (typename boost::range_iterator::type it = boost::begin(multipoint); it != boost::end(multipoint); ++it) { if ( detail::equals::equals_point_point(*it, point, strategy) ) { action::apply(point, true, oit); return oit; } } action::apply(point, false, oit); return oit; } }; // difference/intersection of multipoint-multipoint template < typename MultiPoint1, typename MultiPoint2, typename PointOut, overlay_type OverlayType > struct multipoint_multipoint_point { template static inline OutputIterator apply(MultiPoint1 const& multipoint1, MultiPoint2 const& multipoint2, RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { typedef geometry::less less_type; if ( OverlayType != overlay_difference && boost::size(multipoint1) > boost::size(multipoint2) ) { return multipoint_multipoint_point < MultiPoint2, MultiPoint1, PointOut, OverlayType >::apply(multipoint2, multipoint1, robust_policy, oit, strategy); } typedef typename boost::range_value::type point2_type; std::vector points2(boost::begin(multipoint2), boost::end(multipoint2)); less_type const less = less_type(); std::sort(points2.begin(), points2.end(), less); for (typename boost::range_iterator::type it1 = boost::begin(multipoint1); it1 != boost::end(multipoint1); ++it1) { bool found = std::binary_search(points2.begin(), points2.end(), *it1, less); action_selector_pl < PointOut, OverlayType >::apply(*it1, found, oit); } return oit; } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL //=========================================================================== #ifndef DOXYGEN_NO_DISPATCH namespace detail_dispatch { namespace overlay { // dispatch struct for pointlike-pointlike difference/intersection // computation template < typename PointLike1, typename PointLike2, typename PointOut, overlay_type OverlayType, typename Tag1, typename Tag2 > struct pointlike_pointlike_point : not_implemented {}; template < typename Point1, typename Point2, typename PointOut, overlay_type OverlayType > struct pointlike_pointlike_point < Point1, Point2, PointOut, OverlayType, point_tag, point_tag > : detail::overlay::point_point_point < Point1, Point2, PointOut, OverlayType > {}; template < typename Point, typename MultiPoint, typename PointOut, overlay_type OverlayType > struct pointlike_pointlike_point < Point, MultiPoint, PointOut, OverlayType, point_tag, multi_point_tag > : detail::overlay::point_multipoint_point < Point, MultiPoint, PointOut, OverlayType > {}; template < typename MultiPoint, typename Point, typename PointOut, overlay_type OverlayType > struct pointlike_pointlike_point < MultiPoint, Point, PointOut, OverlayType, multi_point_tag, point_tag > : detail::overlay::multipoint_point_point < MultiPoint, Point, PointOut, OverlayType > {}; template < typename MultiPoint1, typename MultiPoint2, typename PointOut, overlay_type OverlayType > struct pointlike_pointlike_point < MultiPoint1, MultiPoint2, PointOut, OverlayType, multi_point_tag, multi_point_tag > : detail::overlay::multipoint_multipoint_point < MultiPoint1, MultiPoint2, PointOut, OverlayType > {}; }} // namespace detail_dispatch::overlay #endif // DOXYGEN_NO_DISPATCH //=========================================================================== #ifndef DOXYGEN_NO_DETAIL namespace detail { namespace overlay { // generic pointlike-pointlike union implementation template < typename PointLike1, typename PointLike2, typename PointOut > struct union_pointlike_pointlike_point { template static inline OutputIterator apply(PointLike1 const& pointlike1, PointLike2 const& pointlike2, RobustPolicy const& robust_policy, OutputIterator oit, Strategy const& strategy) { copy_points::apply(pointlike1, oit); return detail_dispatch::overlay::pointlike_pointlike_point < PointLike2, PointLike1, PointOut, overlay_difference, typename tag::type, typename tag::type >::apply(pointlike2, pointlike1, robust_policy, oit, strategy); } }; }} // namespace detail::overlay #endif // DOXYGEN_NO_DETAIL }} // namespace boost::geometry #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_OVERLAY_POINTLIKE_POINTLIKE_HPP