annotate DEPENDENCIES/generic/include/boost/geometry/policies/relate/tupled.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_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
Chris@16 10 #define BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP
Chris@16 11
Chris@16 12
Chris@16 13 #include <string>
Chris@16 14
Chris@16 15 #include <boost/tuple/tuple.hpp>
Chris@16 16 #include <boost/geometry/strategies/side_info.hpp>
Chris@16 17
Chris@16 18 namespace boost { namespace geometry
Chris@16 19 {
Chris@16 20
Chris@16 21 namespace policies { namespace relate
Chris@16 22 {
Chris@16 23
Chris@16 24
Chris@16 25 // "tupled" to return intersection results together.
Chris@16 26 // Now with two, with some meta-programming and derivations it can also be three (or more)
Chris@101 27 template <typename Policy1, typename Policy2>
Chris@16 28 struct segments_tupled
Chris@16 29 {
Chris@16 30 typedef boost::tuple
Chris@16 31 <
Chris@16 32 typename Policy1::return_type,
Chris@16 33 typename Policy2::return_type
Chris@16 34 > return_type;
Chris@16 35
Chris@101 36 template <typename Segment1, typename Segment2, typename SegmentIntersectionInfo>
Chris@101 37 static inline return_type segments_crosses(side_info const& sides,
Chris@101 38 SegmentIntersectionInfo const& sinfo,
Chris@101 39 Segment1 const& s1, Segment2 const& s2)
Chris@16 40 {
Chris@16 41 return boost::make_tuple
Chris@16 42 (
Chris@101 43 Policy1::segments_crosses(sides, sinfo, s1, s2),
Chris@101 44 Policy2::segments_crosses(sides, sinfo, s1, s2)
Chris@16 45 );
Chris@16 46 }
Chris@16 47
Chris@101 48 template <typename Segment1, typename Segment2, typename Ratio>
Chris@101 49 static inline return_type segments_collinear(
Chris@101 50 Segment1 const& segment1, Segment2 const& segment2,
Chris@101 51 bool opposite,
Chris@101 52 int pa1, int pa2, int pb1, int pb2,
Chris@101 53 Ratio const& ra1, Ratio const& ra2,
Chris@101 54 Ratio const& rb1, Ratio const& rb2)
Chris@16 55 {
Chris@16 56 return boost::make_tuple
Chris@16 57 (
Chris@101 58 Policy1::segments_collinear(segment1, segment2,
Chris@101 59 opposite,
Chris@101 60 pa1, pa2, pb1, pb2,
Chris@101 61 ra1, ra2, rb1, rb2),
Chris@101 62 Policy2::segments_collinear(segment1, segment2,
Chris@101 63 opposite,
Chris@101 64 pa1, pa2, pb1, pb2,
Chris@101 65 ra1, ra2, rb1, rb2)
Chris@16 66 );
Chris@16 67 }
Chris@16 68
Chris@101 69 template <typename Segment>
Chris@101 70 static inline return_type degenerate(Segment const& segment,
Chris@16 71 bool a_degenerate)
Chris@16 72 {
Chris@16 73 return boost::make_tuple
Chris@16 74 (
Chris@16 75 Policy1::degenerate(segment, a_degenerate),
Chris@16 76 Policy2::degenerate(segment, a_degenerate)
Chris@16 77 );
Chris@16 78 }
Chris@16 79
Chris@101 80 template <typename Segment, typename Ratio>
Chris@101 81 static inline return_type one_degenerate(Segment const& segment,
Chris@101 82 Ratio const& ratio,
Chris@101 83 bool a_degenerate)
Chris@101 84 {
Chris@101 85 return boost::make_tuple
Chris@101 86 (
Chris@101 87 Policy1::one_degenerate(segment, ratio, a_degenerate),
Chris@101 88 Policy2::one_degenerate(segment, ratio, a_degenerate)
Chris@101 89 );
Chris@101 90 }
Chris@101 91
Chris@16 92 static inline return_type disjoint()
Chris@16 93 {
Chris@16 94 return boost::make_tuple
Chris@16 95 (
Chris@16 96 Policy1::disjoint(),
Chris@16 97 Policy2::disjoint()
Chris@16 98 );
Chris@16 99 }
Chris@16 100
Chris@16 101 static inline return_type error(std::string const& msg)
Chris@16 102 {
Chris@16 103 return boost::make_tuple
Chris@16 104 (
Chris@16 105 Policy1::error(msg),
Chris@16 106 Policy2::error(msg)
Chris@16 107 );
Chris@16 108 }
Chris@16 109
Chris@16 110 };
Chris@16 111
Chris@16 112 }} // namespace policies::relate
Chris@16 113
Chris@16 114 }} // namespace boost::geometry
Chris@16 115
Chris@16 116 #endif // BOOST_GEOMETRY_GEOMETRY_POLICIES_RELATE_TUPLED_HPP