Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion stl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,6 @@ set(HEADERS
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/unordered_map
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/unordered_set
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/vector
${CMAKE_CURRENT_LIST_DIR}/inc/experimental/xutility
${CMAKE_CURRENT_LIST_DIR}/inc/filesystem
${CMAKE_CURRENT_LIST_DIR}/inc/forward_list
${CMAKE_CURRENT_LIST_DIR}/inc/fstream
Expand Down
42 changes: 0 additions & 42 deletions stl/inc/algorithm
Original file line number Diff line number Diff line change
Expand Up @@ -1733,54 +1733,12 @@ _DestTy* remove_copy_if(
#endif // _ITERATOR_DEBUG_ARRAY_OVERLOADS
#endif // _HAS_CXX17

// FUNCTION TEMPLATE remove
template <class _FwdIt, class _Ty>
_NODISCARD _FwdIt remove(_FwdIt _First, const _FwdIt _Last, const _Ty& _Val) { // remove each matching _Val
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
_UFirst = _Find_unchecked(_UFirst, _ULast, _Val);
auto _UNext = _UFirst;
if (_UFirst != _ULast) {
while (++_UFirst != _ULast) {
if (!(*_UFirst == _Val)) {
*_UNext = _STD move(*_UFirst);
++_UNext;
}
}
}

_Seek_wrapped(_First, _UNext);
return _First;
}

#if _HAS_CXX17
template <class _ExPo, class _FwdIt, class _Ty, _Enable_if_execution_policy_t<_ExPo> = 0>
_NODISCARD _FwdIt remove(
_ExPo&& _Exec, const _FwdIt _First, const _FwdIt _Last, const _Ty& _Val) noexcept; // terminates
#endif // _HAS_CXX17

// FUNCTION TEMPLATE remove_if
template <class _FwdIt, class _Pr>
_NODISCARD _FwdIt remove_if(_FwdIt _First, const _FwdIt _Last, _Pr _Pred) { // remove each satisfying _Pred
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
_UFirst = _STD find_if(_UFirst, _ULast, _Pass_fn(_Pred));
auto _UNext = _UFirst;
if (_UFirst != _ULast) {
while (++_UFirst != _ULast) {
if (!_Pred(*_UFirst)) {
*_UNext = _STD move(*_UFirst);
++_UNext;
}
}
}

_Seek_wrapped(_First, _UNext);
return _First;
}

#if _HAS_CXX17
template <class _ExPo, class _FwdIt, class _Pr, _Enable_if_execution_policy_t<_ExPo> = 0>
_NODISCARD _FwdIt remove_if(_ExPo&& _Exec, _FwdIt _First, const _FwdIt _Last, _Pr _Pred) noexcept; // terminates
Expand Down
12 changes: 12 additions & 0 deletions stl/inc/deque
Original file line number Diff line number Diff line change
Expand Up @@ -1608,6 +1608,18 @@ _NODISCARD bool operator>=(const deque<_Ty, _Alloc>& _Left, const deque<_Ty, _Al
return !(_Left < _Right);
}

#if _HAS_CXX20
template <class _Ty, class _Alloc, class _Uty>
void erase(deque<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Erase_remove(_Cont, _Val);
}

template <class _Ty, class _Alloc, class _Pr>
void erase_if(deque<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Erase_remove_if(_Cont, _Pass_fn(_Pred));
}
#endif // _HAS_CXX20

#if _HAS_CXX17
namespace pmr {
template <class _Ty>
Expand Down
5 changes: 2 additions & 3 deletions stl/inc/experimental/deque
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
#if _STL_COMPILER_PREPROCESSOR

#include <deque>
#include <experimental/xutility>

#pragma pack(push, _CRT_PACKING)
#pragma warning(push, _STL_WARNING_LEVEL)
Expand All @@ -25,13 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Ty, class _Alloc, class _Pr>
void erase_if(deque<_Ty, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(deque<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Erase_remove_if(_Cont, _Pass_fn(_Pred));
}

// FUNCTION TEMPLATE erase
template <class _Ty, class _Alloc, class _Uty>
void erase(deque<_Ty, _Alloc>& _Cont, const _Uty& _Val) { // erase each element matching _Val
_DEPRECATE_EXPERIMENTAL_ERASE void erase(deque<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Erase_remove(_Cont, _Val);
}

Expand Down
4 changes: 2 additions & 2 deletions stl/inc/experimental/forward_list
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Ty, class _Alloc, class _Pr>
void erase_if(forward_list<_Ty, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(forward_list<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Cont.remove_if(_Pass_fn(_Pred));
}

// FUNCTION TEMPLATE erase
template <class _Ty, class _Alloc, class _Uty>
void erase(forward_list<_Ty, _Alloc>& _Cont, const _Uty& _Val) { // erase each element matching _Val
_DEPRECATE_EXPERIMENTAL_ERASE void erase(forward_list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Cont.remove_if([&](_Ty& _Elem) { return _Elem == _Val; });
}

Expand Down
4 changes: 2 additions & 2 deletions stl/inc/experimental/list
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Ty, class _Alloc, class _Pr>
void erase_if(list<_Ty, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(list<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Cont.remove_if(_Pass_fn(_Pred));
}

// FUNCTION TEMPLATE erase
template <class _Ty, class _Alloc, class _Uty>
void erase(list<_Ty, _Alloc>& _Cont, const _Uty& _Val) { // erase each element matching _Val
_DEPRECATE_EXPERIMENTAL_ERASE void erase(list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Cont.remove_if([&](_Ty& _Elem) { return _Elem == _Val; });
}

Expand Down
5 changes: 2 additions & 3 deletions stl/inc/experimental/map
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <map>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,12 +24,12 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Kty, class _Ty, class _Keylt, class _Alloc, class _Pr>
void erase_if(map<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(map<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

template <class _Kty, class _Ty, class _Keylt, class _Alloc, class _Pr>
void erase_if(multimap<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(multimap<_Kty, _Ty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

Expand Down
5 changes: 2 additions & 3 deletions stl/inc/experimental/set
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <set>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,12 +24,12 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Kty, class _Keylt, class _Alloc, class _Pr>
void erase_if(set<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(set<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

template <class _Kty, class _Keylt, class _Alloc, class _Pr>
void erase_if(multiset<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(multiset<_Kty, _Keylt, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

Expand Down
5 changes: 2 additions & 3 deletions stl/inc/experimental/string
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <xstring>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,13 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Elem, class _Traits, class _Alloc, class _Pr>
void erase_if(basic_string<_Elem, _Traits, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(basic_string<_Elem, _Traits, _Alloc>& _Cont, _Pr _Pred) {
_Erase_remove_if(_Cont, _Pass_fn(_Pred));
}

// FUNCTION TEMPLATE erase
template <class _Elem, class _Traits, class _Alloc, class _Uty>
void erase(basic_string<_Elem, _Traits, _Alloc>& _Cont, const _Uty& _Val) { // erase each element matching _Val
_DEPRECATE_EXPERIMENTAL_ERASE void erase(basic_string<_Elem, _Traits, _Alloc>& _Cont, const _Uty& _Val) {
_Erase_remove(_Cont, _Val);
}

Expand Down
9 changes: 4 additions & 5 deletions stl/inc/experimental/unordered_map
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <unordered_map>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,14 +24,14 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>
void erase_if(unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont,
_Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(
unordered_map<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

template <class _Kty, class _Ty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>
void erase_if(unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont,
_Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(
unordered_multimap<_Kty, _Ty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

Expand Down
8 changes: 3 additions & 5 deletions stl/inc/experimental/unordered_set
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <unordered_set>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,14 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Kty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>
void erase_if(unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont,
_Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(unordered_set<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

template <class _Kty, class _Hasher, class _Keyeq, class _Alloc, class _Pr>
void erase_if(unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont,
_Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(
unordered_multiset<_Kty, _Hasher, _Keyeq, _Alloc>& _Cont, _Pr _Pred) {
_Erase_nodes_if(_Cont, _Pass_fn(_Pred));
}

Expand Down
5 changes: 2 additions & 3 deletions stl/inc/experimental/vector
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
#include <yvals_core.h>
#if _STL_COMPILER_PREPROCESSOR

#include <experimental/xutility>
#include <vector>

#pragma pack(push, _CRT_PACKING)
Expand All @@ -25,13 +24,13 @@ namespace experimental {

// FUNCTION TEMPLATE erase_if
template <class _Ty, class _Alloc, class _Pr>
void erase_if(vector<_Ty, _Alloc>& _Cont, _Pr _Pred) { // erase each element satisfying _Pred
_DEPRECATE_EXPERIMENTAL_ERASE void erase_if(vector<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Erase_remove_if(_Cont, _Pass_fn(_Pred));
}

// FUNCTION TEMPLATE erase
template <class _Ty, class _Alloc, class _Uty>
void erase(vector<_Ty, _Alloc>& _Cont, const _Uty& _Val) { // erase each element matching _Val
_DEPRECATE_EXPERIMENTAL_ERASE void erase(vector<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Erase_remove(_Cont, _Val);
}

Expand Down
69 changes: 0 additions & 69 deletions stl/inc/experimental/xutility

This file was deleted.

12 changes: 12 additions & 0 deletions stl/inc/forward_list
Original file line number Diff line number Diff line change
Expand Up @@ -1526,6 +1526,18 @@ _NODISCARD bool operator>=(const forward_list<_Ty, _Alloc>& _Left, const forward
return !(_Left < _Right);
}

#if _HAS_CXX20
template <class _Ty, class _Alloc, class _Uty>
void erase(forward_list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Cont.remove_if([&](_Ty& _Elem) { return _Elem == _Val; });
}

template <class _Ty, class _Alloc, class _Pr>
void erase_if(forward_list<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Cont.remove_if(_Pass_fn(_Pred));
}
#endif // _HAS_CXX20

#if _HAS_CXX17
namespace pmr {
template <class _Ty>
Expand Down
12 changes: 12 additions & 0 deletions stl/inc/list
Original file line number Diff line number Diff line change
Expand Up @@ -1816,6 +1816,18 @@ _NODISCARD bool operator>=(const list<_Ty, _Alloc>& _Left, const list<_Ty, _Allo
return !(_Left < _Right);
}

#if _HAS_CXX20
template <class _Ty, class _Alloc, class _Uty>
void erase(list<_Ty, _Alloc>& _Cont, const _Uty& _Val) {
_Cont.remove_if([&](_Ty& _Elem) { return _Elem == _Val; });
}

template <class _Ty, class _Alloc, class _Pr>
void erase_if(list<_Ty, _Alloc>& _Cont, _Pr _Pred) {
_Cont.remove_if(_Pass_fn(_Pred));
}
#endif // _HAS_CXX20

#if _HAS_CXX17
namespace pmr {
template <class _Ty>
Expand Down
Loading