UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
RemoveIf.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "Templates/Invoke.h"
7
8namespace Algo
9{
20 template <typename RangeType, typename Predicate>
21 [[nodiscard]] int32 RemoveIf(RangeType& Range, Predicate Pred)
22 {
23 auto* First = GetData(Range);
24 auto* Last = First + GetNum(Range);
25
26 auto* IterStart = First;
27 auto* IterEnd = Last;
28 for (;;)
29 {
30 // Skip non-removed elements at the start
31 for (;;)
32 {
33 if (IterStart == IterEnd)
34 {
36 }
37
38 if (Invoke(Pred, *IterStart))
39 {
40 break;
41 }
42
43 ++IterStart;
44 }
45
46 // Skip removed elements at the end
47 for (;;)
48 {
49 --IterEnd;
50
51 if (IterStart == IterEnd)
52 {
54 }
55
56 if (!Invoke(Pred, *IterEnd))
57 {
58 break;
59 }
60 }
61
63
64 ++IterStart;
65 }
66 }
67
78 template <typename RangeType, typename Predicate>
79 [[nodiscard]] int32 StableRemoveIf(RangeType&& Range, Predicate Pred)
80 {
81 auto* First = GetData(Range);
82 auto* Last = First + GetNum(Range);
83
84 auto* IterStart = First;
85
86 // Skip non-removed elements at the start
87 for (;;)
88 {
89 if (IterStart == Last)
90 {
92 }
93
94 if (Invoke(Pred, *IterStart))
95 {
96 break;
97 }
98
99 ++IterStart;
100 }
101
102 auto* IterKeep = IterStart;
103 ++IterKeep;
104
105 for (;;)
106 {
107 if (IterKeep == Last)
108 {
110 }
111
112 if (!Invoke(Pred, *IterKeep))
113 {
115 }
116
117 ++IterKeep;
118 }
119 }
120}
#define UE_PTRDIFF_TO_INT32(argument)
Definition CoreMiscDefines.h:442
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
AUTORTFM_INFER UE_FORCEINLINE_HINT constexpr auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(((FuncType &&) Func)((ArgTypes &&) Args...))
Definition Invoke.h:44
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
auto GetData(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Get())
Definition StringConv.h:802
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ParallelSort.h:13
int32 RemoveIf(RangeType &Range, Predicate Pred)
Definition RemoveIf.h:21
int32 StableRemoveIf(RangeType &&Range, Predicate Pred)
Definition RemoveIf.h:79