1 #pragma once 2 3 // mapbox 4 #include <mapbox/geometry/point.hpp> 5 6 // stl 7 #include <vector> 8 9 namespace mapbox { 10 namespace geometry { 11 12 template <typename T, template <typename...> class Cont = std::vector> 13 struct linear_ring : Cont<point<T>> 14 { 15 using coordinate_type = T; 16 using point_type = point<T>; 17 using container_type = Cont<point_type>; 18 using size_type = typename container_type::size_type; 19 20 template <class... Args> linear_ringmapbox::geometry::linear_ring21 linear_ring(Args&&... args) : container_type(std::forward<Args>(args)...) {} linear_ringmapbox::geometry::linear_ring22 linear_ring(std::initializer_list<point_type> args) 23 : container_type(std::move(args)) {} 24 }; 25 26 template <typename T, template <typename...> class Cont = std::vector> 27 struct polygon : Cont<linear_ring<T>> 28 { 29 using coordinate_type = T; 30 using linear_ring_type = linear_ring<T>; 31 using container_type = Cont<linear_ring_type>; 32 using size_type = typename container_type::size_type; 33 34 template <class... Args> polygonmapbox::geometry::polygon35 polygon(Args&&... args) : container_type(std::forward<Args>(args)...) {} polygonmapbox::geometry::polygon36 polygon(std::initializer_list<linear_ring_type> args) 37 : container_type(std::move(args)) {} 38 }; 39 40 } // namespace geometry 41 } // namespace mapbox 42