diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /boost/geometry/algorithms/num_geometries.hpp | |
download | boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2 boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip |
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'boost/geometry/algorithms/num_geometries.hpp')
-rw-r--r-- | boost/geometry/algorithms/num_geometries.hpp | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/boost/geometry/algorithms/num_geometries.hpp b/boost/geometry/algorithms/num_geometries.hpp new file mode 100644 index 0000000000..20f35e90d2 --- /dev/null +++ b/boost/geometry/algorithms/num_geometries.hpp @@ -0,0 +1,95 @@ +// 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_ALGORITHMS_NUM_GEOMETRIES_HPP +#define BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP + +#include <cstddef> + +#include <boost/mpl/assert.hpp> + +#include <boost/geometry/core/tag.hpp> +#include <boost/geometry/core/tags.hpp> +#include <boost/geometry/core/tag_cast.hpp> + +#include <boost/geometry/geometries/concepts/check.hpp> + + +namespace boost { namespace geometry +{ + + +#ifndef DOXYGEN_NO_DISPATCH +namespace dispatch +{ + + +template <typename Tag, typename Geometry> +struct num_geometries +{ + BOOST_MPL_ASSERT_MSG + ( + false, NOT_OR_NOT_YET_IMPLEMENTED_FOR_THIS_GEOMETRY_TYPE + , (types<Geometry>) + ); +}; + + +template <typename Geometry> +struct num_geometries<single_tag, Geometry> +{ + static inline std::size_t apply(Geometry const&) + { + return 1; + } +}; + + + +} // namespace dispatch +#endif + + +/*! +\brief \brief_calc{number of geometries} +\ingroup num_geometries +\details \details_calc{num_geometries, number of geometries}. +\tparam Geometry \tparam_geometry +\param geometry \param_geometry +\return \return_calc{number of geometries} + +\qbk{[include reference/algorithms/num_geometries.qbk]} +*/ +template <typename Geometry> +inline std::size_t num_geometries(Geometry const& geometry) +{ + concept::check<Geometry const>(); + + return dispatch::num_geometries + < + typename tag_cast + < + typename tag<Geometry>::type, + single_tag, + multi_tag + >::type, + Geometry + >::apply(geometry); +} + + +}} // namespace boost::geometry + + +#endif // BOOST_GEOMETRY_ALGORITHMS_NUM_GEOMETRIES_HPP |