UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EnumerateRange.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6
7#include <iterator>
8#include <type_traits>
9
10template <typename ElementType, typename SizeType = int32>
12{
13 TEnumerateRef(ElementType& InRef, SizeType InIndex)
14 : Ref (InRef)
15 , Index(InIndex)
16 {
17 }
18
19 SizeType GetIndex() const
20 {
21 return this->Index;
22 }
23
24 ElementType& operator*() const
25 {
26 return this->Ref;
27 }
28
29 ElementType* operator->() const
30 {
31 return &this->Ref;
32 }
33
35 {
36 return { Ref, Index };
37 }
38
39private:
40 ElementType& Ref;
41 SizeType Index;
42};
43
44template <typename ElementType, typename SizeType = int32>
46
47namespace UE::Core::Private
48{
49 template <typename IteratorType, typename SizeType>
50 struct TEnumerateIter
51 {
52 IteratorType Iterator;
53 SizeType Index = 0;
54
56 {
57 return { *this->Iterator, this->Index };
58 }
59
60 template <typename EndIteratorType>
61 bool operator!=(EndIteratorType End) const
62 {
63 return this->Iterator != End;
64 }
65
66 void operator++()
67 {
68 ++this->Iterator;
69 ++this->Index;
70 }
71 };
72}
73
74template <typename RangeType, typename SizeType>
76{
77 RangeType Range;
78
79 auto begin() const -> UE::Core::Private::TEnumerateIter<decltype(std::begin(Range)), SizeType>
80 {
81 return { std::begin(Range) };
82 }
83
84 auto end() const
85 {
86 return std::end(Range);
87 }
88};
89
107template <typename RangeType>
108auto EnumerateRange(RangeType&& Range) -> TEnumerateRange<RangeType, decltype(GetNum(Range))>
109{
110 return { (RangeType&&)Range };
111}
112template <typename T, SIZE_T N>
113TEnumerateRange<T(&)[N], int32> EnumerateRange(T(&Range)[N])
114{
115 static_assert(N <= MAX_int32, "Array size is not supported by Enumerate");
116 return { Range };
117}
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
auto EnumerateRange(RangeType &&Range) -> TEnumerateRange< RangeType, decltype(GetNum(Range))>
Definition EnumerateRange.h:108
#define MAX_int32
Definition NumericLimits.h:25
auto GetNum(const TStringConversion< Converter, DefaultConversionSize > &Conversion) -> decltype(Conversion.Length())
Definition StringConv.h:808
Definition Core.Build.cs:8
Definition OverriddenPropertySet.cpp:45
implementation
Definition PlayInEditorLoadingScope.h:8
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition EnumerateRange.h:76
RangeType Range
Definition EnumerateRange.h:77
auto begin() const -> UE::Core::Private::TEnumerateIter< decltype(std::begin(Range)), SizeType >
Definition EnumerateRange.h:79
auto end() const
Definition EnumerateRange.h:84
Definition EnumerateRange.h:12
ElementType & operator*() const
Definition EnumerateRange.h:24
SizeType GetIndex() const
Definition EnumerateRange.h:19
TEnumerateRef(ElementType &InRef, SizeType InIndex)
Definition EnumerateRange.h:13
ElementType * operator->() const
Definition EnumerateRange.h:29