176d0caaeSpatrick //===----------------------------------------------------------------------===//
276d0caaeSpatrick //
376d0caaeSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
476d0caaeSpatrick // See https://llvm.org/LICENSE.txt for license information.
576d0caaeSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
676d0caaeSpatrick //
776d0caaeSpatrick //===----------------------------------------------------------------------===//
876d0caaeSpatrick
976d0caaeSpatrick #ifndef _LIBCPP___ALGORITHM_MAX_H
1076d0caaeSpatrick #define _LIBCPP___ALGORITHM_MAX_H
1176d0caaeSpatrick
1276d0caaeSpatrick #include <__algorithm/comp.h>
13*4bdff4beSrobert #include <__algorithm/comp_ref_type.h>
1476d0caaeSpatrick #include <__algorithm/max_element.h>
15*4bdff4beSrobert #include <__config>
1676d0caaeSpatrick #include <initializer_list>
1776d0caaeSpatrick
1876d0caaeSpatrick #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
1976d0caaeSpatrick # pragma GCC system_header
2076d0caaeSpatrick #endif
2176d0caaeSpatrick
2276d0caaeSpatrick _LIBCPP_PUSH_MACROS
2376d0caaeSpatrick #include <__undef_macros>
2476d0caaeSpatrick
2576d0caaeSpatrick _LIBCPP_BEGIN_NAMESPACE_STD
2676d0caaeSpatrick
2776d0caaeSpatrick template <class _Tp, class _Compare>
2876d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline
29*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX14
3076d0caaeSpatrick const _Tp&
max(const _Tp & __a,const _Tp & __b,_Compare __comp)3176d0caaeSpatrick max(const _Tp& __a, const _Tp& __b, _Compare __comp)
3276d0caaeSpatrick {
3376d0caaeSpatrick return __comp(__a, __b) ? __b : __a;
3476d0caaeSpatrick }
3576d0caaeSpatrick
3676d0caaeSpatrick template <class _Tp>
3776d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline
38*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX14
3976d0caaeSpatrick const _Tp&
max(const _Tp & __a,const _Tp & __b)4076d0caaeSpatrick max(const _Tp& __a, const _Tp& __b)
4176d0caaeSpatrick {
4276d0caaeSpatrick return _VSTD::max(__a, __b, __less<_Tp>());
4376d0caaeSpatrick }
4476d0caaeSpatrick
4576d0caaeSpatrick #ifndef _LIBCPP_CXX03_LANG
4676d0caaeSpatrick
4776d0caaeSpatrick template<class _Tp, class _Compare>
4876d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline
49*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX14
5076d0caaeSpatrick _Tp
max(initializer_list<_Tp> __t,_Compare __comp)5176d0caaeSpatrick max(initializer_list<_Tp> __t, _Compare __comp)
5276d0caaeSpatrick {
53*4bdff4beSrobert return *_VSTD::__max_element<__comp_ref_type<_Compare> >(__t.begin(), __t.end(), __comp);
5476d0caaeSpatrick }
5576d0caaeSpatrick
5676d0caaeSpatrick template<class _Tp>
5776d0caaeSpatrick _LIBCPP_NODISCARD_EXT inline
58*4bdff4beSrobert _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_SINCE_CXX14
5976d0caaeSpatrick _Tp
max(initializer_list<_Tp> __t)6076d0caaeSpatrick max(initializer_list<_Tp> __t)
6176d0caaeSpatrick {
6276d0caaeSpatrick return *_VSTD::max_element(__t.begin(), __t.end(), __less<_Tp>());
6376d0caaeSpatrick }
6476d0caaeSpatrick
6576d0caaeSpatrick #endif // _LIBCPP_CXX03_LANG
6676d0caaeSpatrick
6776d0caaeSpatrick _LIBCPP_END_NAMESPACE_STD
6876d0caaeSpatrick
6976d0caaeSpatrick _LIBCPP_POP_MACROS
7076d0caaeSpatrick
7176d0caaeSpatrick #endif // _LIBCPP___ALGORITHM_MAX_H
72