1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef _LIBCPP___VECTOR_COMPARISON_H 10 #define _LIBCPP___VECTOR_COMPARISON_H 11 12 #include <__algorithm/equal.h> 13 #include <__algorithm/lexicographical_compare.h> 14 #include <__algorithm/lexicographical_compare_three_way.h> 15 #include <__compare/synth_three_way.h> 16 #include <__config> 17 #include <__fwd/vector.h> 18 19 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 20 # pragma GCC system_header 21 #endif 22 23 _LIBCPP_BEGIN_NAMESPACE_STD 24 25 template <class _Tp, class _Allocator> 26 _LIBCPP_CONSTEXPR_SINCE_CXX20 inline _LIBCPP_HIDE_FROM_ABI bool 27 operator==(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 28 const typename vector<_Tp, _Allocator>::size_type __sz = __x.size(); 29 return __sz == __y.size() && std::equal(__x.begin(), __x.end(), __y.begin()); 30 } 31 32 #if _LIBCPP_STD_VER <= 17 33 34 template <class _Tp, class _Allocator> 35 inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 36 return !(__x == __y); 37 } 38 39 template <class _Tp, class _Allocator> 40 inline _LIBCPP_HIDE_FROM_ABI bool operator<(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 41 return std::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end()); 42 } 43 44 template <class _Tp, class _Allocator> 45 inline _LIBCPP_HIDE_FROM_ABI bool operator>(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 46 return __y < __x; 47 } 48 49 template <class _Tp, class _Allocator> 50 inline _LIBCPP_HIDE_FROM_ABI bool operator>=(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 51 return !(__x < __y); 52 } 53 54 template <class _Tp, class _Allocator> 55 inline _LIBCPP_HIDE_FROM_ABI bool operator<=(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 56 return !(__y < __x); 57 } 58 59 #else // _LIBCPP_STD_VER <= 17 60 61 template <class _Tp, class _Allocator> 62 _LIBCPP_HIDE_FROM_ABI constexpr __synth_three_way_result<_Tp> 63 operator<=>(const vector<_Tp, _Allocator>& __x, const vector<_Tp, _Allocator>& __y) { 64 return std::lexicographical_compare_three_way(__x.begin(), __x.end(), __y.begin(), __y.end(), std::__synth_three_way); 65 } 66 67 #endif // _LIBCPP_STD_VER <= 17 68 69 _LIBCPP_END_NAMESPACE_STD 70 71 #endif // _LIBCPP___VECTOR_COMPARISON_H 72