diff --git a/include/boost/geometry/geometries/concepts/check.hpp b/include/boost/geometry/geometries/concepts/check.hpp index 8bd4c30d2..07ef84f4a 100644 --- a/include/boost/geometry/geometries/concepts/check.hpp +++ b/include/boost/geometry/geometries/concepts/check.hpp @@ -18,13 +18,17 @@ #include #include - #include +#include #include +#include #include #include +#include +#include +#include #include #include #include @@ -32,8 +36,6 @@ #include -#include - namespace boost { namespace geometry { @@ -138,6 +140,42 @@ struct check {}; +template +struct check + : detail::concept_check::check > +{}; + + +template +struct check + : detail::concept_check::check > +{}; + + +template +struct check + : detail::concept_check::check > +{}; + + +template +struct check + : detail::concept_check::check > +{}; + + +template +struct check + : detail::concept_check::check > +{}; + + +template +struct check + : detail::concept_check::check > +{}; + + } // namespace dispatch #endif diff --git a/include/boost/geometry/geometries/concepts/multi_linestring_concept.hpp b/include/boost/geometry/geometries/concepts/multi_linestring_concept.hpp new file mode 100644 index 000000000..f13f7ac7e --- /dev/null +++ b/include/boost/geometry/geometries/concepts/multi_linestring_concept.hpp @@ -0,0 +1,91 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP +#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP + + +#include +#include +#include + + +#include + + +namespace boost { namespace geometry { namespace concept +{ + + +/*! +\brief multi-linestring concept +\ingroup concepts +\par Formal definition: +The multi linestring concept is defined as following: +- there must be a specialization of traits::tag defining multi_linestring_tag as + type +- it must behave like a Boost.Range +- its range value must fulfil the Linestring concept + +*/ +template +class MultiLinestring +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type linestring_type; + + BOOST_CONCEPT_ASSERT( (concept::Linestring) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(MultiLinestring) + { + Geometry* mls = 0; + traits::clear::apply(*mls); + traits::resize::apply(*mls, 0); + linestring_type* ls = 0; + traits::push_back::apply(*mls, *ls); + } +#endif +}; + + +/*! +\brief concept for multi-linestring (const version) +\ingroup const_concepts +*/ +template +class ConstMultiLinestring +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type linestring_type; + + BOOST_CONCEPT_ASSERT( (concept::ConstLinestring) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(ConstMultiLinestring) + { + } +#endif +}; + +}}} // namespace boost::geometry::concept + + +#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP diff --git a/include/boost/geometry/geometries/concepts/multi_point_concept.hpp b/include/boost/geometry/geometries/concepts/multi_point_concept.hpp new file mode 100644 index 000000000..81c087166 --- /dev/null +++ b/include/boost/geometry/geometries/concepts/multi_point_concept.hpp @@ -0,0 +1,90 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP +#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP + + +#include +#include +#include + + +#include + + +namespace boost { namespace geometry { namespace concept +{ + + +/*! +\brief MultiPoint concept +\ingroup concepts +\par Formal definition: +The multi point concept is defined as following: +- there must be a specialization of traits::tag defining multi_point_tag as type +- it must behave like a Boost.Range +- its range value must fulfil the Point concept + +*/ +template +class MultiPoint +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type point_type; + + BOOST_CONCEPT_ASSERT( (concept::Point) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(MultiPoint) + { + Geometry* mp = 0; + traits::clear::apply(*mp); + traits::resize::apply(*mp, 0); + point_type* point = 0; + traits::push_back::apply(*mp, *point); + } +#endif +}; + + +/*! +\brief concept for multi-point (const version) +\ingroup const_concepts +*/ +template +class ConstMultiPoint +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type point_type; + + BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(ConstMultiPoint) + { + } +#endif +}; + +}}} // namespace boost::geometry::concept + + +#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP diff --git a/include/boost/geometry/geometries/concepts/multi_polygon_concept.hpp b/include/boost/geometry/geometries/concepts/multi_polygon_concept.hpp new file mode 100644 index 000000000..b13d330f3 --- /dev/null +++ b/include/boost/geometry/geometries/concepts/multi_polygon_concept.hpp @@ -0,0 +1,91 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP +#define BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP + + +#include +#include +#include + +#include + + +namespace boost { namespace geometry { namespace concept +{ + + +/*! +\brief multi-polygon concept +\ingroup concepts +\par Formal definition: +The multi polygon concept is defined as following: +- there must be a specialization of traits::tag defining multi_polygon_tag + as type +- it must behave like a Boost.Range +- its range value must fulfil the Polygon concept + +*/ +template +class MultiPolygon +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type polygon_type; + + BOOST_CONCEPT_ASSERT( (concept::Polygon) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(MultiPolygon) + { + Geometry* mp = 0; + traits::clear::apply(*mp); + traits::resize::apply(*mp, 0); + polygon_type* poly = 0; + traits::push_back::apply(*mp, *poly); + } +#endif +}; + + +/*! +\brief concept for multi-polygon (const version) +\ingroup const_concepts +*/ +template +class ConstMultiPolygon +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value::type polygon_type; + + BOOST_CONCEPT_ASSERT( (concept::ConstPolygon) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); + + +public : + + BOOST_CONCEPT_USAGE(ConstMultiPolygon) + { + } +#endif +}; + + +}}} // namespace boost::geometry::concept + + +#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP diff --git a/include/boost/geometry/geometries/geometries.hpp b/include/boost/geometry/geometries/geometries.hpp index cda55c1d2..de9e2b1fd 100644 --- a/include/boost/geometry/geometries/geometries.hpp +++ b/include/boost/geometry/geometries/geometries.hpp @@ -18,6 +18,10 @@ #include #include +#include +#include +#include + #include #include #include diff --git a/include/boost/geometry/geometries/multi_linestring.hpp b/include/boost/geometry/geometries/multi_linestring.hpp new file mode 100644 index 000000000..2ba8e7196 --- /dev/null +++ b/include/boost/geometry/geometries/multi_linestring.hpp @@ -0,0 +1,80 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP +#define BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP + +#include +#include + +#include + +#include +#include + + +namespace boost { namespace geometry +{ + + +namespace model +{ + +/*! +\brief multi_line, a collection of linestring +\details Multi-linestring can be used to group lines belonging to each other, + e.g. a highway (with interruptions) +\ingroup geometries + +\qbk{before.synopsis, +[heading Model of] +[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept] +} +*/ +template +< + typename LineString, + template class Container = std::vector, + template class Allocator = std::allocator +> +class multi_linestring : public Container > +{ + BOOST_CONCEPT_ASSERT( (concept::Linestring) ); +}; + + +} // namespace model + + +#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS +namespace traits +{ + +template +< + typename LineString, + template class Container, + template class Allocator +> +struct tag< model::multi_linestring > +{ + typedef multi_linestring_tag type; +}; + +} // namespace traits +#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS + + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_LINESTRING_HPP diff --git a/include/boost/geometry/geometries/multi_point.hpp b/include/boost/geometry/geometries/multi_point.hpp new file mode 100644 index 000000000..d0a782a1d --- /dev/null +++ b/include/boost/geometry/geometries/multi_point.hpp @@ -0,0 +1,94 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP +#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP + +#include +#include + +#include + +#include +#include + + +namespace boost { namespace geometry +{ + +namespace model +{ + + +/*! +\brief multi_point, a collection of points +\ingroup geometries +\tparam Point \tparam_point +\tparam Container \tparam_container +\tparam Allocator \tparam_allocator +\details Multipoint can be used to group points belonging to each other, + e.g. a constellation, or the result set of an intersection +\qbk{before.synopsis, +[heading Model of] +[link geometry.reference.concepts.concept_multi_point MultiPoint Concept] +} +*/ +template +< + typename Point, + template class Container = std::vector, + template class Allocator = std::allocator +> +class multi_point : public Container > +{ + BOOST_CONCEPT_ASSERT( (concept::Point) ); + + typedef Container > base_type; + +public : + /// \constructor_default{multi_point} + inline multi_point() + : base_type() + {} + + /// \constructor_begin_end{multi_point} + template + inline multi_point(Iterator begin, Iterator end) + : base_type(begin, end) + {} +}; + +} // namespace model + + +#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS +namespace traits +{ + +template +< + typename Point, + template class Container, + template class Allocator +> +struct tag< model::multi_point > +{ + typedef multi_point_tag type; +}; + +} // namespace traits +#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POINT_HPP diff --git a/include/boost/geometry/geometries/multi_polygon.hpp b/include/boost/geometry/geometries/multi_polygon.hpp new file mode 100644 index 000000000..228074cd3 --- /dev/null +++ b/include/boost/geometry/geometries/multi_polygon.hpp @@ -0,0 +1,77 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP +#define BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP + +#include +#include + +#include + +#include +#include + +namespace boost { namespace geometry +{ + +namespace model +{ + +/*! +\brief multi_polygon, a collection of polygons +\details Multi-polygon can be used to group polygons belonging to each other, + e.g. Hawaii +\ingroup geometries + +\qbk{before.synopsis, +[heading Model of] +[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept] +} +*/ +template +< + typename Polygon, + template class Container = std::vector, + template class Allocator = std::allocator +> +class multi_polygon : public Container > +{ + BOOST_CONCEPT_ASSERT( (concept::Polygon) ); +}; + + +} // namespace model + + +#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS +namespace traits +{ + +template +< + typename Polygon, + template class Container, + template class Allocator +> +struct tag< model::multi_polygon > +{ + typedef multi_polygon_tag type; +}; + +} // namespace traits +#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_GEOMETRIES_MULTI_POLYGON_HPP diff --git a/include/boost/geometry/geometries/register/multi_linestring.hpp b/include/boost/geometry/geometries/register/multi_linestring.hpp new file mode 100644 index 000000000..ad11289d1 --- /dev/null +++ b/include/boost/geometry/geometries/register/multi_linestring.hpp @@ -0,0 +1,59 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP +#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP + +#include +#include + +/*! +\brief \brief_macro{multi_linestring} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The + multi_linestring may contain template parameters, which must be specified then. +\param MultiLineString \param_macro_type{multi_linestring} + +\qbk{ +[heading Example] +[register_multi_linestring] +[register_multi_linestring_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \ +namespace boost { namespace geometry { namespace traits { \ + template<> struct tag { typedef multi_linestring_tag type; }; \ +}}} + + +/*! +\brief \brief_macro{templated multi_linestring} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring} + \details_macro_templated{multi_linestring, linestring} +\param MultiLineString \param_macro_type{multi_linestring (without template parameters)} + +\qbk{ +[heading Example] +[register_multi_linestring_templated] +[register_multi_linestring_templated_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \ +namespace boost { namespace geometry { namespace traits { \ + template struct tag< MultiLineString > { typedef multi_linestring_tag type; }; \ +}}} + + +#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP diff --git a/include/boost/geometry/geometries/register/multi_point.hpp b/include/boost/geometry/geometries/register/multi_point.hpp new file mode 100644 index 000000000..4e875ae0c --- /dev/null +++ b/include/boost/geometry/geometries/register/multi_point.hpp @@ -0,0 +1,59 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP +#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP + +#include +#include + +/*! +\brief \brief_macro{multi_point} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The + multi_point may contain template parameters, which must be specified then. +\param MultiPoint \param_macro_type{multi_point} + +\qbk{ +[heading Example] +[register_multi_point] +[register_multi_point_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \ +namespace boost { namespace geometry { namespace traits { \ + template<> struct tag { typedef multi_point_tag type; }; \ +}}} + + +/*! +\brief \brief_macro{templated multi_point} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point} + \details_macro_templated{multi_point, point} +\param MultiPoint \param_macro_type{multi_point (without template parameters)} + +\qbk{ +[heading Example] +[register_multi_point_templated] +[register_multi_point_templated_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \ +namespace boost { namespace geometry { namespace traits { \ + template struct tag< MultiPoint > { typedef multi_point_tag type; }; \ +}}} + + +#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POINT_HPP diff --git a/include/boost/geometry/geometries/register/multi_polygon.hpp b/include/boost/geometry/geometries/register/multi_polygon.hpp new file mode 100644 index 000000000..1c3818b55 --- /dev/null +++ b/include/boost/geometry/geometries/register/multi_polygon.hpp @@ -0,0 +1,59 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. +// Copyright (c) 2008-2012 Bruno Lalande, Paris, France. +// Copyright (c) 2009-2012 Mateusz Loskot, London, UK. + +// Parts of Boost.Geometry are redesigned from Geodan's Geographic Library +// (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. + +// Use, modification and distribution is subject to the Boost Software License, +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + + +#ifndef BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP +#define BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP + +#include +#include + +/*! +\brief \brief_macro{multi_polygon} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The + multi_polygon may contain template parameters, which must be specified then. +\param MultiPolygon \param_macro_type{multi_polygon} + +\qbk{ +[heading Example] +[register_multi_polygon] +[register_multi_polygon_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \ +namespace boost { namespace geometry { namespace traits { \ + template<> struct tag { typedef multi_polygon_tag type; }; \ +}}} + + +/*! +\brief \brief_macro{templated multi_polygon} +\ingroup register +\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon} + \details_macro_templated{multi_polygon, polygon} +\param MultiPolygon \param_macro_type{multi_polygon (without template parameters)} + +\qbk{ +[heading Example] +[register_multi_polygon_templated] +[register_multi_polygon_templated_output] +} +*/ +#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \ +namespace boost { namespace geometry { namespace traits { \ + template struct tag< MultiPolygon > { typedef multi_polygon_tag type; }; \ +}}} + + +#endif // BOOST_GEOMETRY_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP diff --git a/include/boost/geometry/multi/geometries/concepts/check.hpp b/include/boost/geometry/multi/geometries/concepts/check.hpp index 61afc913c..c741afd79 100644 --- a/include/boost/geometry/multi/geometries/concepts/check.hpp +++ b/include/boost/geometry/multi/geometries/concepts/check.hpp @@ -16,68 +16,7 @@ #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP - -#include - -#include - #include -#include -#include -#include - - -namespace boost { namespace geometry -{ - - - -#ifndef DOXYGEN_NO_DISPATCH -namespace dispatch -{ - - -template -struct check - : detail::concept_check::check > -{}; - - -template -struct check - : detail::concept_check::check > -{}; - - -template -struct check - : detail::concept_check::check > -{}; - - -template -struct check - : detail::concept_check::check > -{}; - - -template -struct check - : detail::concept_check::check > -{}; - - -template -struct check - : detail::concept_check::check > -{}; - - -} // namespace dispatch -#endif - - -}} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_CHECK_HPP diff --git a/include/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp b/include/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp index 3e67afbdf..9a9438efc 100644 --- a/include/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp +++ b/include/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp @@ -16,76 +16,7 @@ #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP -#include -#include -#include - - -#include - - -namespace boost { namespace geometry { namespace concept -{ - - -/*! -\brief multi-linestring concept -\ingroup concepts -\par Formal definition: -The multi linestring concept is defined as following: -- there must be a specialization of traits::tag defining multi_linestring_tag as - type -- it must behave like a Boost.Range -- its range value must fulfil the Linestring concept - -*/ -template -class MultiLinestring -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type linestring_type; - - BOOST_CONCEPT_ASSERT( (concept::Linestring) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(MultiLinestring) - { - Geometry* mls = 0; - traits::clear::apply(*mls); - traits::resize::apply(*mls, 0); - linestring_type* ls = 0; - traits::push_back::apply(*mls, *ls); - } -#endif -}; - - -/*! -\brief concept for multi-linestring (const version) -\ingroup const_concepts -*/ -template -class ConstMultiLinestring -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type linestring_type; - - BOOST_CONCEPT_ASSERT( (concept::ConstLinestring) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(ConstMultiLinestring) - { - } -#endif -}; - -}}} // namespace boost::geometry::concept +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP diff --git a/include/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp b/include/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp index ca1112f26..14c1d25e5 100644 --- a/include/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp +++ b/include/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp @@ -16,75 +16,7 @@ #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP -#include -#include -#include - - -#include - - -namespace boost { namespace geometry { namespace concept -{ - - -/*! -\brief MultiPoint concept -\ingroup concepts -\par Formal definition: -The multi point concept is defined as following: -- there must be a specialization of traits::tag defining multi_point_tag as type -- it must behave like a Boost.Range -- its range value must fulfil the Point concept - -*/ -template -class MultiPoint -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type point_type; - - BOOST_CONCEPT_ASSERT( (concept::Point) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(MultiPoint) - { - Geometry* mp = 0; - traits::clear::apply(*mp); - traits::resize::apply(*mp, 0); - point_type* point = 0; - traits::push_back::apply(*mp, *point); - } -#endif -}; - - -/*! -\brief concept for multi-point (const version) -\ingroup const_concepts -*/ -template -class ConstMultiPoint -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type point_type; - - BOOST_CONCEPT_ASSERT( (concept::ConstPoint) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(ConstMultiPoint) - { - } -#endif -}; - -}}} // namespace boost::geometry::concept +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POINT_CONCEPT_HPP diff --git a/include/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp b/include/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp index ec37ef15a..5e46fb753 100644 --- a/include/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp +++ b/include/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp @@ -16,76 +16,7 @@ #define BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP -#include -#include -#include - -#include - - -namespace boost { namespace geometry { namespace concept -{ - - -/*! -\brief multi-polygon concept -\ingroup concepts -\par Formal definition: -The multi polygon concept is defined as following: -- there must be a specialization of traits::tag defining multi_polygon_tag - as type -- it must behave like a Boost.Range -- its range value must fulfil the Polygon concept - -*/ -template -class MultiPolygon -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type polygon_type; - - BOOST_CONCEPT_ASSERT( (concept::Polygon) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(MultiPolygon) - { - Geometry* mp = 0; - traits::clear::apply(*mp); - traits::resize::apply(*mp, 0); - polygon_type* poly = 0; - traits::push_back::apply(*mp, *poly); - } -#endif -}; - - -/*! -\brief concept for multi-polygon (const version) -\ingroup const_concepts -*/ -template -class ConstMultiPolygon -{ -#ifndef DOXYGEN_NO_CONCEPT_MEMBERS - typedef typename boost::range_value::type polygon_type; - - BOOST_CONCEPT_ASSERT( (concept::ConstPolygon) ); - BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept) ); - - -public : - - BOOST_CONCEPT_USAGE(ConstMultiPolygon) - { - } -#endif -}; - - -}}} // namespace boost::geometry::concept +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_CONCEPTS_MULTI_POLYGON_CONCEPT_HPP diff --git a/include/boost/geometry/multi/geometries/multi_linestring.hpp b/include/boost/geometry/multi/geometries/multi_linestring.hpp index 67d4da06b..696d907dc 100644 --- a/include/boost/geometry/multi/geometries/multi_linestring.hpp +++ b/include/boost/geometry/multi/geometries/multi_linestring.hpp @@ -11,70 +11,11 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) -#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP -#define BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP - -#include -#include - -#include - -#include - -#include - -namespace boost { namespace geometry -{ +#ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP +#define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP -namespace model -{ - -/*! -\brief multi_line, a collection of linestring -\details Multi-linestring can be used to group lines belonging to each other, - e.g. a highway (with interruptions) -\ingroup geometries - -\qbk{before.synopsis, -[heading Model of] -[link geometry.reference.concepts.concept_multi_linestring MultiLineString Concept] -} -*/ -template -< - typename LineString, - template class Container = std::vector, - template class Allocator = std::allocator -> -class multi_linestring : public Container > -{ - BOOST_CONCEPT_ASSERT( (concept::Linestring) ); -}; +#include -} // namespace model - - -#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS -namespace traits -{ - -template -< - typename LineString, - template class Container, - template class Allocator -> -struct tag< model::multi_linestring > -{ - typedef multi_linestring_tag type; -}; - -} // namespace traits -#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS - - -}} // namespace boost::geometry - -#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_LINESTRING_HPP +#endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_LINESTRING_HPP diff --git a/include/boost/geometry/multi/geometries/multi_point.hpp b/include/boost/geometry/multi/geometries/multi_point.hpp index 002d8f8a4..750ad7802 100644 --- a/include/boost/geometry/multi/geometries/multi_point.hpp +++ b/include/boost/geometry/multi/geometries/multi_point.hpp @@ -14,81 +14,8 @@ #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP -#include -#include -#include +#include -#include - -#include - -namespace boost { namespace geometry -{ - -namespace model -{ - - -/*! -\brief multi_point, a collection of points -\ingroup geometries -\tparam Point \tparam_point -\tparam Container \tparam_container -\tparam Allocator \tparam_allocator -\details Multipoint can be used to group points belonging to each other, - e.g. a constellation, or the result set of an intersection -\qbk{before.synopsis, -[heading Model of] -[link geometry.reference.concepts.concept_multi_point MultiPoint Concept] -} -*/ -template -< - typename Point, - template class Container = std::vector, - template class Allocator = std::allocator -> -class multi_point : public Container > -{ - BOOST_CONCEPT_ASSERT( (concept::Point) ); - - typedef Container > base_type; - -public : - /// \constructor_default{multi_point} - inline multi_point() - : base_type() - {} - - /// \constructor_begin_end{multi_point} - template - inline multi_point(Iterator begin, Iterator end) - : base_type(begin, end) - {} -}; - -} // namespace model - - -#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS -namespace traits -{ - -template -< - typename Point, - template class Container, - template class Allocator -> -struct tag< model::multi_point > -{ - typedef multi_point_tag type; -}; - -} // namespace traits -#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS - -}} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POINT_HPP diff --git a/include/boost/geometry/multi/geometries/multi_polygon.hpp b/include/boost/geometry/multi/geometries/multi_polygon.hpp index af8d04287..06fefc785 100644 --- a/include/boost/geometry/multi/geometries/multi_polygon.hpp +++ b/include/boost/geometry/multi/geometries/multi_polygon.hpp @@ -14,65 +14,8 @@ #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP -#include -#include -#include +#include -#include - -#include - -namespace boost { namespace geometry -{ - -namespace model -{ - -/*! -\brief multi_polygon, a collection of polygons -\details Multi-polygon can be used to group polygons belonging to each other, - e.g. Hawaii -\ingroup geometries - -\qbk{before.synopsis, -[heading Model of] -[link geometry.reference.concepts.concept_multi_polygon MultiPolygon Concept] -} -*/ -template -< - typename Polygon, - template class Container = std::vector, - template class Allocator = std::allocator -> -class multi_polygon : public Container > -{ - BOOST_CONCEPT_ASSERT( (concept::Polygon) ); -}; - - -} // namespace model - - -#ifndef DOXYGEN_NO_TRAITS_SPECIALIZATIONS -namespace traits -{ - -template -< - typename Polygon, - template class Container, - template class Allocator -> -struct tag< model::multi_polygon > -{ - typedef multi_polygon_tag type; -}; - -} // namespace traits -#endif // DOXYGEN_NO_TRAITS_SPECIALIZATIONS - -}} // namespace boost::geometry #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_MULTI_POLYGON_HPP diff --git a/include/boost/geometry/multi/geometries/register/multi_linestring.hpp b/include/boost/geometry/multi/geometries/register/multi_linestring.hpp index 9e96def31..2783a8455 100644 --- a/include/boost/geometry/multi/geometries/register/multi_linestring.hpp +++ b/include/boost/geometry/multi/geometries/register/multi_linestring.hpp @@ -15,45 +15,8 @@ #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP -#include -#include -/*! -\brief \brief_macro{multi_linestring} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING, multi_linestring} The - multi_linestring may contain template parameters, which must be specified then. -\param MultiLineString \param_macro_type{multi_linestring} - -\qbk{ -[heading Example] -[register_multi_linestring] -[register_multi_linestring_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING(MultiLineString) \ -namespace boost { namespace geometry { namespace traits { \ - template<> struct tag { typedef multi_linestring_tag type; }; \ -}}} - - -/*! -\brief \brief_macro{templated multi_linestring} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED, templated multi_linestring} - \details_macro_templated{multi_linestring, linestring} -\param MultiLineString \param_macro_type{multi_linestring (without template parameters)} - -\qbk{ -[heading Example] -[register_multi_linestring_templated] -[register_multi_linestring_templated_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED(MultiLineString) \ -namespace boost { namespace geometry { namespace traits { \ - template struct tag< MultiLineString > { typedef multi_linestring_tag type; }; \ -}}} +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_LINESTRING_HPP diff --git a/include/boost/geometry/multi/geometries/register/multi_point.hpp b/include/boost/geometry/multi/geometries/register/multi_point.hpp index b5a7cf236..6063492c2 100644 --- a/include/boost/geometry/multi/geometries/register/multi_point.hpp +++ b/include/boost/geometry/multi/geometries/register/multi_point.hpp @@ -15,45 +15,8 @@ #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP -#include -#include -/*! -\brief \brief_macro{multi_point} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT, multi_point} The - multi_point may contain template parameters, which must be specified then. -\param MultiPoint \param_macro_type{multi_point} - -\qbk{ -[heading Example] -[register_multi_point] -[register_multi_point_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_POINT(MultiPoint) \ -namespace boost { namespace geometry { namespace traits { \ - template<> struct tag { typedef multi_point_tag type; }; \ -}}} - - -/*! -\brief \brief_macro{templated multi_point} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED, templated multi_point} - \details_macro_templated{multi_point, point} -\param MultiPoint \param_macro_type{multi_point (without template parameters)} - -\qbk{ -[heading Example] -[register_multi_point_templated] -[register_multi_point_templated_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED(MultiPoint) \ -namespace boost { namespace geometry { namespace traits { \ - template struct tag< MultiPoint > { typedef multi_point_tag type; }; \ -}}} +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POINT_HPP diff --git a/include/boost/geometry/multi/geometries/register/multi_polygon.hpp b/include/boost/geometry/multi/geometries/register/multi_polygon.hpp index 6d2138331..6a3e47e3d 100644 --- a/include/boost/geometry/multi/geometries/register/multi_polygon.hpp +++ b/include/boost/geometry/multi/geometries/register/multi_polygon.hpp @@ -15,45 +15,8 @@ #ifndef BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP #define BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP -#include -#include -/*! -\brief \brief_macro{multi_polygon} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON, multi_polygon} The - multi_polygon may contain template parameters, which must be specified then. -\param MultiPolygon \param_macro_type{multi_polygon} - -\qbk{ -[heading Example] -[register_multi_polygon] -[register_multi_polygon_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON(MultiPolygon) \ -namespace boost { namespace geometry { namespace traits { \ - template<> struct tag { typedef multi_polygon_tag type; }; \ -}}} - - -/*! -\brief \brief_macro{templated multi_polygon} -\ingroup register -\details \details_macro{BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED, templated multi_polygon} - \details_macro_templated{multi_polygon, polygon} -\param MultiPolygon \param_macro_type{multi_polygon (without template parameters)} - -\qbk{ -[heading Example] -[register_multi_polygon_templated] -[register_multi_polygon_templated_output] -} -*/ -#define BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED(MultiPolygon) \ -namespace boost { namespace geometry { namespace traits { \ - template struct tag< MultiPolygon > { typedef multi_polygon_tag type; }; \ -}}} +#include #endif // BOOST_GEOMETRY_MULTI_GEOMETRIES_REGISTER_MULTI_POLYGON_HPP