// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2015, 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_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP #define BOOST_GEOMETRY_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP #include namespace boost { namespace geometry { // policy that simply keeps (and can return) the failure type template class failure_type_policy { private: static inline validity_failure_type transform_failure_type(validity_failure_type failure) { if (AllowDuplicates && failure == failure_duplicate_points) { return no_failure; } return failure; } static inline validity_failure_type transform_failure_type(validity_failure_type failure, bool is_linear) { if (is_linear && AllowSpikes && failure == failure_spikes) { return no_failure; } return transform_failure_type(failure); } public: failure_type_policy() : m_failure(no_failure) {} template inline bool apply() { m_failure = transform_failure_type(Failure); return m_failure == no_failure; } template inline bool apply(Data const&) { return apply(); } template inline bool apply(Data1 const& data1, Data2 const&) { m_failure = transform_failure_type(Failure, data1); return m_failure == no_failure; } validity_failure_type failure() const { return m_failure; } private: validity_failure_type m_failure; }; }} // namespace boost::geometry #endif // BOOST_GEOMETRY_POLICIES_IS_VALID_FAILURE_TYPE_POLICY_HPP