/* Copyright (c) Ivan Matek, Marshall Clow 2021. Distributed under 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) */ /// \file is_clamped.hpp /// \brief IsClamped algorithm /// \authors Ivan Matek, Marshall Clow /// #ifndef BOOST_ALGORITHM_IS_CLAMPED_HPP #define BOOST_ALGORITHM_IS_CLAMPED_HPP #include // for std::less #include #include // for boost::type_identity namespace boost { namespace algorithm { /// \fn is_clamped ( T const& val, /// typename boost::type_identity::type const & lo, /// typename boost::type_identity::type const & hi, Pred p ) /// \returns true if value "val" is in the range [ lo, hi ] /// using the comparison predicate p. /// If p ( val, lo ) return false. /// If p ( hi, val ) return false. /// Otherwise, returns true. /// /// \param val The value to be checked /// \param lo The lower bound of the range /// \param hi The upper bound of the range /// \param p A predicate to use to compare the values. /// p ( a, b ) returns a boolean. /// template BOOST_CXX14_CONSTEXPR bool is_clamped( T const& val, typename boost::type_identity::type const& lo, typename boost::type_identity::type const& hi, Pred p) { // assert ( !p ( hi, lo )); // Can't assert p ( lo, hi ) b/c they // might be equal return p(val, lo) ? false : p(hi, val) ? false : true; } /// \fn is_clamped ( T const& val, /// typename boost::type_identity::type const & lo, /// typename boost::type_identity::type const & hi) /// \returns true if value "val" is in the range [ lo, hi ] /// using operator < for comparison. /// If the value is less than lo, return false. /// If the value is greater than hi, return false. /// Otherwise, returns true. /// /// \param val The value to be checked /// \param lo The lower bound of the range /// \param hi The upper bound of the range /// template BOOST_CXX14_CONSTEXPR bool is_clamped ( const T& val, typename boost::type_identity::type const & lo, typename boost::type_identity::type const & hi ) { return boost::algorithm::is_clamped ( val, lo, hi, std::less()); } }} #endif // BOOST_ALGORITHM_CLAMP_HPP