annotate DEPENDENCIES/generic/include/boost/geometry/algorithms/difference.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Boost.Geometry (aka GGL, Generic Geometry Library)
Chris@16 2
Chris@16 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
Chris@16 4
Chris@16 5 // Use, modification and distribution is subject to the Boost Software License,
Chris@16 6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8
Chris@16 9 #ifndef BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP
Chris@16 10 #define BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP
Chris@16 11
Chris@16 12 #include <algorithm>
Chris@16 13
Chris@16 14 #include <boost/geometry/algorithms/detail/overlay/intersection_insert.hpp>
Chris@101 15 #include <boost/geometry/policies/robustness/get_rescale_policy.hpp>
Chris@16 16
Chris@16 17 namespace boost { namespace geometry
Chris@16 18 {
Chris@16 19
Chris@16 20 #ifndef DOXYGEN_NO_DETAIL
Chris@16 21 namespace detail { namespace difference
Chris@16 22 {
Chris@16 23
Chris@16 24 /*!
Chris@16 25 \brief_calc2{difference} \brief_strategy
Chris@16 26 \ingroup difference
Chris@16 27 \details \details_calc2{difference_insert, spatial set theoretic difference}
Chris@16 28 \brief_strategy. \details_inserter{difference}
Chris@16 29 \tparam GeometryOut output geometry type, must be specified
Chris@16 30 \tparam Geometry1 \tparam_geometry
Chris@16 31 \tparam Geometry2 \tparam_geometry
Chris@16 32 \tparam OutputIterator output iterator
Chris@16 33 \tparam Strategy \tparam_strategy_overlay
Chris@16 34 \param geometry1 \param_geometry
Chris@16 35 \param geometry2 \param_geometry
Chris@16 36 \param out \param_out{difference}
Chris@16 37 \param strategy \param_strategy{difference}
Chris@16 38 \return \return_out
Chris@16 39
Chris@16 40 \qbk{distinguish,with strategy}
Chris@16 41 */
Chris@16 42 template
Chris@16 43 <
Chris@16 44 typename GeometryOut,
Chris@16 45 typename Geometry1,
Chris@16 46 typename Geometry2,
Chris@101 47 typename RobustPolicy,
Chris@16 48 typename OutputIterator,
Chris@16 49 typename Strategy
Chris@16 50 >
Chris@16 51 inline OutputIterator difference_insert(Geometry1 const& geometry1,
Chris@101 52 Geometry2 const& geometry2,
Chris@101 53 RobustPolicy const& robust_policy,
Chris@101 54 OutputIterator out,
Chris@16 55 Strategy const& strategy)
Chris@16 56 {
Chris@16 57 concept::check<Geometry1 const>();
Chris@16 58 concept::check<Geometry2 const>();
Chris@16 59 concept::check<GeometryOut>();
Chris@101 60
Chris@16 61 return geometry::dispatch::intersection_insert
Chris@16 62 <
Chris@16 63 Geometry1, Geometry2,
Chris@16 64 GeometryOut,
Chris@16 65 overlay_difference,
Chris@16 66 geometry::detail::overlay::do_reverse<geometry::point_order<Geometry1>::value>::value,
Chris@16 67 geometry::detail::overlay::do_reverse<geometry::point_order<Geometry2>::value, true>::value
Chris@101 68 >::apply(geometry1, geometry2, robust_policy, out, strategy);
Chris@16 69 }
Chris@16 70
Chris@16 71 /*!
Chris@16 72 \brief_calc2{difference}
Chris@16 73 \ingroup difference
Chris@16 74 \details \details_calc2{difference_insert, spatial set theoretic difference}.
Chris@16 75 \details_insert{difference}
Chris@16 76 \tparam GeometryOut output geometry type, must be specified
Chris@16 77 \tparam Geometry1 \tparam_geometry
Chris@16 78 \tparam Geometry2 \tparam_geometry
Chris@16 79 \tparam OutputIterator output iterator
Chris@16 80 \param geometry1 \param_geometry
Chris@16 81 \param geometry2 \param_geometry
Chris@16 82 \param out \param_out{difference}
Chris@16 83 \return \return_out
Chris@16 84
Chris@16 85 \qbk{[include reference/algorithms/difference_insert.qbk]}
Chris@16 86 */
Chris@16 87 template
Chris@16 88 <
Chris@16 89 typename GeometryOut,
Chris@16 90 typename Geometry1,
Chris@16 91 typename Geometry2,
Chris@101 92 typename RobustPolicy,
Chris@16 93 typename OutputIterator
Chris@16 94 >
Chris@16 95 inline OutputIterator difference_insert(Geometry1 const& geometry1,
Chris@101 96 Geometry2 const& geometry2,
Chris@101 97 RobustPolicy const& robust_policy,
Chris@101 98 OutputIterator out)
Chris@16 99 {
Chris@16 100 concept::check<Geometry1 const>();
Chris@16 101 concept::check<Geometry2 const>();
Chris@16 102 concept::check<GeometryOut>();
Chris@16 103
Chris@16 104 typedef strategy_intersection
Chris@16 105 <
Chris@16 106 typename cs_tag<GeometryOut>::type,
Chris@16 107 Geometry1,
Chris@16 108 Geometry2,
Chris@101 109 typename geometry::point_type<GeometryOut>::type,
Chris@101 110 RobustPolicy
Chris@16 111 > strategy;
Chris@16 112
Chris@16 113 return difference_insert<GeometryOut>(geometry1, geometry2,
Chris@101 114 robust_policy, out, strategy());
Chris@16 115 }
Chris@16 116
Chris@16 117
Chris@16 118 }} // namespace detail::difference
Chris@16 119 #endif // DOXYGEN_NO_DETAIL
Chris@16 120
Chris@16 121
Chris@16 122
Chris@16 123 /*!
Chris@16 124 \brief_calc2{difference}
Chris@16 125 \ingroup difference
Chris@16 126 \details \details_calc2{difference, spatial set theoretic difference}.
Chris@16 127 \tparam Geometry1 \tparam_geometry
Chris@16 128 \tparam Geometry2 \tparam_geometry
Chris@16 129 \tparam Collection \tparam_output_collection
Chris@16 130 \param geometry1 \param_geometry
Chris@16 131 \param geometry2 \param_geometry
Chris@16 132 \param output_collection the output collection
Chris@16 133
Chris@16 134 \qbk{[include reference/algorithms/difference.qbk]}
Chris@16 135 */
Chris@16 136 template
Chris@16 137 <
Chris@16 138 typename Geometry1,
Chris@16 139 typename Geometry2,
Chris@16 140 typename Collection
Chris@16 141 >
Chris@16 142 inline void difference(Geometry1 const& geometry1,
Chris@16 143 Geometry2 const& geometry2, Collection& output_collection)
Chris@16 144 {
Chris@16 145 concept::check<Geometry1 const>();
Chris@16 146 concept::check<Geometry2 const>();
Chris@16 147
Chris@16 148 typedef typename boost::range_value<Collection>::type geometry_out;
Chris@16 149 concept::check<geometry_out>();
Chris@16 150
Chris@101 151 typedef typename geometry::rescale_overlay_policy_type
Chris@101 152 <
Chris@101 153 Geometry1,
Chris@101 154 Geometry2
Chris@101 155 >::type rescale_policy_type;
Chris@101 156
Chris@101 157 rescale_policy_type robust_policy
Chris@101 158 = geometry::get_rescale_policy<rescale_policy_type>(geometry1, geometry2);
Chris@101 159
Chris@16 160 detail::difference::difference_insert<geometry_out>(
Chris@101 161 geometry1, geometry2, robust_policy,
Chris@16 162 std::back_inserter(output_collection));
Chris@16 163 }
Chris@16 164
Chris@16 165
Chris@16 166 }} // namespace boost::geometry
Chris@16 167
Chris@16 168
Chris@16 169 #endif // BOOST_GEOMETRY_ALGORITHMS_DIFFERENCE_HPP