diff options
Diffstat (limited to 'boost/geometry/algorithms/detail/is_valid/interface.hpp')
-rw-r--r-- | boost/geometry/algorithms/detail/is_valid/interface.hpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/boost/geometry/algorithms/detail/is_valid/interface.hpp b/boost/geometry/algorithms/detail/is_valid/interface.hpp new file mode 100644 index 0000000000..4b232fd436 --- /dev/null +++ b/boost/geometry/algorithms/detail/is_valid/interface.hpp @@ -0,0 +1,78 @@ +// Boost.Geometry (aka GGL, Generic Geometry Library) + +// Copyright (c) 2014, Oracle and/or its affiliates. + +// Contributed and/or modified by Menelaos Karavelas, on behalf of Oracle + +// Licensed under the Boost Software License version 1.0. +// http://www.boost.org/users/license.html + +#ifndef BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP +#define BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP + +#include <boost/variant/static_visitor.hpp> +#include <boost/variant/apply_visitor.hpp> +#include <boost/variant/variant_fwd.hpp> + +#include <boost/geometry/geometries/concepts/check.hpp> + +#include <boost/geometry/algorithms/dispatch/is_valid.hpp> + + +namespace boost { namespace geometry +{ + + +namespace resolve_variant { + +template <typename Geometry> +struct is_valid +{ + static inline bool apply(Geometry const& geometry) + { + concept::check<Geometry const>(); + return dispatch::is_valid<Geometry>::apply(geometry); + } +}; + +template <BOOST_VARIANT_ENUM_PARAMS(typename T)> +struct is_valid<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> > +{ + struct visitor : boost::static_visitor<bool> + { + template <typename Geometry> + bool operator()(Geometry const& geometry) const + { + return is_valid<Geometry>::apply(geometry); + } + }; + + static inline bool + apply(boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> const& geometry) + { + return boost::apply_visitor(visitor(), geometry); + } +}; + +} // namespace resolve_variant + + +/*! +\brief \brief_check{is valid (in the OGC sense)} +\ingroup is_valid +\tparam Geometry \tparam_geometry +\param geometry \param_geometry +\return \return_check{is valid (in the OGC sense)} + +\qbk{[include reference/algorithms/is_valid.qbk]} +*/ +template <typename Geometry> +inline bool is_valid(Geometry const& geometry) +{ + return resolve_variant::is_valid<Geometry>::apply(geometry); +} + + +}} // namespace boost::geometry + +#endif // BOOST_GEOMETRY_ALGORITHMS_DETAIL_IS_VALID_INTERFACE_HPP |