123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- #ifndef BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP
- #define BOOST_GEOMETRY_ALGORITHMS_MAKE_HPP
- #include <type_traits>
- #include "boost/geometry/algorithms/detail/assign_values.hpp"
- #include <boost/geometry/core/make.hpp>
- #include <boost/geometry/geometries/concepts/check.hpp>
- namespace boost { namespace geometry
- {
- #ifndef DOXYGEN_NO_DETAIL
- namespace detail { namespace make
- {
- template <typename Geometry, typename Range>
- inline Geometry make_points(Range const& range)
- {
- concepts::check<Geometry>();
- Geometry geometry;
- geometry::append(geometry, range);
- return geometry;
- }
- }}
- #endif
- template
- <
- typename Geometry,
- typename Type,
- std::enable_if_t<! traits::make<Geometry>::is_specialized, int> = 0
- >
- inline Geometry make(Type const& c1, Type const& c2)
- {
- concepts::check<Geometry>();
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2);
- return geometry;
- }
- template
- <
- typename Geometry,
- typename Type,
- std::enable_if_t<traits::make<Geometry>::is_specialized, int> = 0
- >
- constexpr inline Geometry make(Type const& c1, Type const& c2)
- {
- concepts::check<Geometry>();
-
-
- return traits::make<Geometry>::apply(c1, c2);
- }
- template
- <
- typename Geometry,
- typename Type,
- std::enable_if_t<! traits::make<Geometry>::is_specialized, int> = 0
- >
- inline Geometry make(Type const& c1, Type const& c2, Type const& c3)
- {
- concepts::check<Geometry>();
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3);
- return geometry;
- }
- template
- <
- typename Geometry,
- typename Type,
- std::enable_if_t<traits::make<Geometry>::is_specialized, int> = 0
- >
- constexpr inline Geometry make(Type const& c1, Type const& c2, Type const& c3)
- {
- concepts::check<Geometry>();
-
-
- return traits::make<Geometry>::apply(c1, c2, c3);
- }
- template <typename Geometry, typename Type>
- inline Geometry make(Type const& c1, Type const& c2, Type const& c3, Type const& c4)
- {
- concepts::check<Geometry>();
- Geometry geometry;
- dispatch::assign
- <
- typename tag<Geometry>::type,
- Geometry,
- geometry::dimension<Geometry>::type::value
- >::apply(geometry, c1, c2, c3, c4);
- return geometry;
- }
- template <typename Geometry>
- inline Geometry make_inverse()
- {
- concepts::check<Geometry>();
- Geometry geometry;
- dispatch::assign_inverse
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
- return geometry;
- }
- template <typename Geometry>
- inline Geometry make_zero()
- {
- concepts::check<Geometry>();
- Geometry geometry;
- dispatch::assign_zero
- <
- typename tag<Geometry>::type,
- Geometry
- >::apply(geometry);
- return geometry;
- }
- }}
- #endif
|