1 // Boost.Geometry (aka GGL, Generic Geometry Library)
2 
3 // Copyright (c) 2007-2015 Barend Gehrels, Amsterdam, the Netherlands.
4 // Copyright (c) 2008-2015 Bruno Lalande, Paris, France.
5 // Copyright (c) 2009-2015 Mateusz Loskot, London, UK.
6 
7 // This file was modified by Oracle on 2015.
8 // Modifications copyright (c) 2015, Oracle and/or its affiliates.
9 
10 // Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle
11 
12 // Distributed under the Boost Software License, Version 1.0.
13 // (See accompanying file LICENSE_1_0.txt or copy at
14 // http://www.boost.org/LICENSE_1_0.txt)
15 
16 #ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
17 #define BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
18 
19 #include <boost/geometry/core/cs.hpp>
20 #include <boost/geometry/core/tags.hpp>
21 
22 #include <boost/geometry/iterators/segment_iterator.hpp>
23 
24 #include <boost/geometry/algorithms/detail/envelope/range.hpp>
25 
26 #include <boost/geometry/algorithms/dispatch/envelope.hpp>
27 
28 
29 namespace boost { namespace geometry
30 {
31 
32 #ifndef DOXYGEN_NO_DETAIL
33 namespace detail { namespace envelope
34 {
35 
36 
37 struct envelope_linestring_on_spheroid
38 {
39     template <typename Linestring, typename Box>
applyboost::geometry::detail::envelope::envelope_linestring_on_spheroid40     static inline void apply(Linestring const& linestring, Box& mbr)
41     {
42         envelope_range::apply(geometry::segments_begin(linestring),
43                               geometry::segments_end(linestring),
44                               mbr);
45     }
46 };
47 
48 
49 }} // namespace detail::envelope
50 #endif // DOXYGEN_NO_DETAIL
51 
52 
53 #ifndef DOXYGEN_NO_DISPATCH
54 namespace dispatch
55 {
56 
57 
58 template <typename Linestring, typename CS_Tag>
59 struct envelope<Linestring, linestring_tag, CS_Tag>
60     : detail::envelope::envelope_range
61 {};
62 
63 template <typename Linestring>
64 struct envelope<Linestring, linestring_tag, spherical_equatorial_tag>
65     : detail::envelope::envelope_linestring_on_spheroid
66 {};
67 
68 
69 template <typename MultiLinestring, typename CS_Tag>
70 struct envelope
71     <
72         MultiLinestring, multi_linestring_tag, CS_Tag
73     > : detail::envelope::envelope_multi_range
74         <
75             detail::envelope::envelope_range
76         >
77 {};
78 
79 template <typename MultiLinestring>
80 struct envelope
81     <
82         MultiLinestring, multi_linestring_tag, spherical_equatorial_tag
83     > : detail::envelope::envelope_multi_range_on_spheroid
84         <
85             detail::envelope::envelope_linestring_on_spheroid
86         >
87 {};
88 
89 
90 } // namespace dispatch
91 #endif // DOXYGEN_NO_DISPATCH
92 
93 
94 }} // namespace boost::geometry
95 
96 #endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_ENVELOPE_LINEAR_HPP
97