77#include "CoreMinimal.h"
79#include "Containers/BasicArray.h"
80#include "Containers/StaticArray.h"
81#include "Containers/Deque.h"
82#include "Containers/LruCache.h"
83#include "Containers/MRUArray.h"
84#include "Containers/PagedArray.h"
85#include "Containers/RingBuffer.h"
86#include "Containers/DynamicRHIResourceArray.h"
87#include "Misc/EngineVersionComparison.h"
97template <
typename T,
typename A>
auto begin(TArray<T, A>& r) -> T* {
return r.GetData(); }
98template <
typename T,
typename A>
auto begin(TArray<T, A>
const& r) ->
const T* {
return r.GetData(); }
99template <
typename T,
typename A>
auto end (TArray<T, A>& r) -> T* {
return r.GetData() + r.Num(); }
100template <
typename T,
typename A>
auto end (TArray<T, A>
const& r) ->
const T* {
return r.GetData() + r.Num(); }
101template <
typename T,
typename A>
size_t size(TArray<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
104template <
typename T,
typename A>
auto begin(TArrayView<T, A>& r) -> T* {
return r.GetData(); }
105template <
typename T,
typename A>
auto begin(TArrayView<T, A>
const& r) ->
const T* {
return r.GetData(); }
106template <
typename T,
typename A>
auto end (TArrayView<T, A>& r) -> T* {
return r.GetData() + r.Num(); }
107template <
typename T,
typename A>
auto end (TArrayView<T, A>
const& r) ->
const T* {
return r.GetData() + r.Num(); }
108template <
typename T,
typename A>
size_t size(TArrayView<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
111template <
typename T, u
int32 N, u
int32 A>
auto begin(TStaticArray<T, N, A>& r) -> T* {
return r.GetData(); }
112template <
typename T, u
int32 N, u
int32 A>
auto begin(TStaticArray<T, N, A>
const& r) ->
const T* {
return r.GetData(); }
113template <
typename T, u
int32 N, u
int32 A>
auto end (TStaticArray<T, N, A>& r) -> T* {
return r.GetData() + r.Num(); }
114template <
typename T, u
int32 N, u
int32 A>
auto end (TStaticArray<T, N, A>
const& r) ->
const T* {
return r.GetData() + r.Num(); }
115template <
typename T, u
int32 N, u
int32 A>
size_t size(TStaticArray<T, N, A>
const& r) {
return static_cast<size_t>(r.Num()); }
125template <
typename T,
typename A>
size_t size(TIndirectArray<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
132template <
typename T,
typename K,
typename A>
size_t size(TSet<T, K, A>
const& r) {
return static_cast<size_t>(r.Num()); }
144 template <
typename K,
typename V,
typename A,
typename F>
145 static auto GetPairs(TMapBase<K, V, A, F>& map) -> TSet<TPair<K, V>, F, A>&
150 template <
typename K,
typename V,
typename A,
typename F>
151 static auto GetPairs(TMapBase<K, V, A, F>
const& map) -> TSet<TPair<K, V>, F, A>
const&
157using FMapPairsAccess = TMapBase<FMapPairsAccessTag, FMapPairsAccessTag, FMapPairsAccessTag, FMapPairsAccessTag>;
164template<
typename K,
typename V,
typename A,
typename F>
size_t size(TMap<K, V, A, F>
const& map) {
return static_cast<size_t>(map.Num()); }
170template<
typename K,
typename V,
typename A,
typename F>
size_t size(TMultiMap<K, V, A, F>
const& map) {
return static_cast<size_t>(map.Num()); }
173template <
typename CharType>
auto begin(TStringView<CharType>
const&
string) ->
const CharType* {
return string.GetData(); }
174template <
typename CharType>
auto end (TStringView<CharType>
const&
string) ->
const CharType* {
return string.GetData() +
string.Len(); }
175template <
typename CharType>
size_t size(TStringView<CharType>
const&
string) {
return static_cast<size_t>(
string.Len()); }
177FORCEINLINE
auto begin(FString&
string) ->
const TCHAR* {
return *string; }
178FORCEINLINE
auto begin(FString
const&
string) ->
const TCHAR* {
return *string; }
179FORCEINLINE
auto end (FString&
string) ->
const TCHAR* {
return *
string +
string.Len(); }
180FORCEINLINE
auto end (FString
const&
string) ->
const TCHAR* {
return *
string +
string.Len(); }
183FORCEINLINE
size_t size(FString
const&
string) {
return static_cast<size_t>(
string.Len()); }
186template <
typename T>
auto begin(TBasicArray<T>& r) -> T* {
return r.begin(); }
187template <
typename T>
auto begin(TBasicArray<T>
const& r) ->
const T* {
return r.begin(); }
188template <
typename T>
auto end (TBasicArray<T>& r) -> T* {
return r.end(); }
189template <
typename T>
auto end (TBasicArray<T>
const& r) ->
const T* {
return r.end(); }
190template <
typename T>
size_t size(TBasicArray<T>
const& r) {
return static_cast<size_t>(r.Num()); }
192#if UE_VERSION_NEWER_THAN(5, 5, -1)
198template <
typename A>
size_t size(TBitArray<A>
const& r) {
return static_cast<size_t>(r.Num()); }
206template <
typename T, u
int32 C,
typename A>
size_t size(TChunkedArray<T, C, A>
const& r) {
return static_cast<size_t>(r.Num()); }
213template <
typename T,
typename A>
size_t size(TDeque<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
216template <
typename T, u
int32 A>
auto begin(TResourceArray<T, A>& r) -> T* {
return r.GetData(); }
217template <
typename T, u
int32 A>
auto begin(TResourceArray<T, A>
const& r) ->
const T* {
return r.GetData(); }
218template <
typename T, u
int32 A>
auto end (TResourceArray<T, A>& r) -> T* {
return r.GetData() + r.Num(); }
219template <
typename T, u
int32 A>
auto end (TResourceArray<T, A>
const& r) ->
const T* {
return r.GetData() + r.Num(); }
220template <
typename T, u
int32 A>
size_t size(TResourceArray<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
234template <
typename K,
typename V,
typename C>
size_t size(TLruCache<K, V, C>
const& r) {
return static_cast<size_t>(r.Num()); }
237template <
typename T,
typename A>
auto begin(TMRUArray<T, A>& r) -> T* {
return r.GetData(); }
238template <
typename T,
typename A>
auto begin(TMRUArray<T, A>
const& r) ->
const T* {
return r.GetData(); }
239template <
typename T,
typename A>
auto end (TMRUArray<T, A>& r) -> T* {
return r.GetData() + r.Num(); }
240template <
typename T,
typename A>
auto end (TMRUArray<T, A>
const& r) ->
const T* {
return r.GetData() + r.Num(); }
241template <
typename T,
typename A>
size_t size(TMRUArray<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
248template <
typename T,
int32 P,
typename A>
size_t size(TPagedArray<T, P, A>
const& r) {
return static_cast<size_t>(r.Num()); }
255template <
typename T,
typename A>
size_t size(TRingBuffer<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
262template <
typename K,
typename V,
typename A,
typename S>
size_t size(TSortedMap<K, V, A, S>
const& r) {
return static_cast<size_t>(r.Num()); }
269template <
typename T,
typename A>
size_t size(TSparseArray<T, A>
const& r) {
return static_cast<size_t>(r.Num()); }
#define FWD(...)
Shorten forwarding expression with this macro so one may not need to specify explicit type.
auto end(TArray< T, A > &r) -> T *
size_t size(TArray< T, A > const &r)
auto begin(TArray< T, A > &r) -> T *
static auto GetPairs(TMapBase< K, V, A, F > const &map) -> TSet< TPair< K, V >, F, A > const &
static auto GetPairs(TMapBase< K, V, A, F > &map) -> TSet< TPair< K, V >, F, A > &
Extra settings for TExtendedIterator wrapper.
Allows range-v3 and std::ranges to iterate over temporary string objects and keep the string alive du...
Unreal's own iterators are not STL compliant (they are only compatible with range-for loops) so they ...