diff options
Diffstat (limited to 'boost/geometry/geometries/concepts/multi_linestring_concept.hpp')
-rw-r--r-- | boost/geometry/geometries/concepts/multi_linestring_concept.hpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/boost/geometry/geometries/concepts/multi_linestring_concept.hpp b/boost/geometry/geometries/concepts/multi_linestring_concept.hpp new file mode 100644 index 0000000000..f13f7ac7e8 --- /dev/null +++ b/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 <boost/concept_check.hpp> +#include <boost/range/concepts.hpp> +#include <boost/range/metafunctions.hpp> + + +#include <boost/geometry/geometries/concepts/linestring_concept.hpp> + + +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 <typename Geometry> +class MultiLinestring +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value<Geometry>::type linestring_type; + + BOOST_CONCEPT_ASSERT( (concept::Linestring<linestring_type>) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) ); + + +public : + + BOOST_CONCEPT_USAGE(MultiLinestring) + { + Geometry* mls = 0; + traits::clear<Geometry>::apply(*mls); + traits::resize<Geometry>::apply(*mls, 0); + linestring_type* ls = 0; + traits::push_back<Geometry>::apply(*mls, *ls); + } +#endif +}; + + +/*! +\brief concept for multi-linestring (const version) +\ingroup const_concepts +*/ +template <typename Geometry> +class ConstMultiLinestring +{ +#ifndef DOXYGEN_NO_CONCEPT_MEMBERS + typedef typename boost::range_value<Geometry>::type linestring_type; + + BOOST_CONCEPT_ASSERT( (concept::ConstLinestring<linestring_type>) ); + BOOST_CONCEPT_ASSERT( (boost::RandomAccessRangeConcept<Geometry>) ); + + +public : + + BOOST_CONCEPT_USAGE(ConstMultiLinestring) + { + } +#endif +}; + +}}} // namespace boost::geometry::concept + + +#endif // BOOST_GEOMETRY_GEOMETRIES_CONCEPTS_MULTI_LINESTRING_CONCEPT_HPP |