Path: blob/main/contrib/llvm-project/libcxx/include/__algorithm/clamp.h
35233 views
//===----------------------------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#ifndef _LIBCPP___ALGORITHM_CLAMP_H9#define _LIBCPP___ALGORITHM_CLAMP_H1011#include <__algorithm/comp.h>12#include <__assert>13#include <__config>1415#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)16# pragma GCC system_header17#endif1819_LIBCPP_BEGIN_NAMESPACE_STD2021#if _LIBCPP_STD_VER >= 1722template <class _Tp, class _Compare>23[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp&24clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v,25_LIBCPP_LIFETIMEBOUND const _Tp& __lo,26_LIBCPP_LIFETIMEBOUND const _Tp& __hi,27_Compare __comp) {28_LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(!__comp(__hi, __lo), "Bad bounds passed to std::clamp");29return __comp(__v, __lo) ? __lo : __comp(__hi, __v) ? __hi : __v;30}3132template <class _Tp>33[[nodiscard]] inline _LIBCPP_HIDE_FROM_ABI constexpr const _Tp&34clamp(_LIBCPP_LIFETIMEBOUND const _Tp& __v,35_LIBCPP_LIFETIMEBOUND const _Tp& __lo,36_LIBCPP_LIFETIMEBOUND const _Tp& __hi) {37return std::clamp(__v, __lo, __hi, __less<>());38}39#endif4041_LIBCPP_END_NAMESPACE_STD4243#endif // _LIBCPP___ALGORITHM_CLAMP_H444546