Ark Server API (ASE) - Wiki
Loading...
Searching...
No Matches
Set.h
Go to the documentation of this file.
1// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "../BasicTypes.h"
6#include "../Templates/UnrealTypeTraits.h"
7#include "../Templates/UnrealTemplate.h"
9#include "TArray.h"
10#include "../Templates/Function.h"
11#include <initializer_list>
12#include "../Templates/AreTypesEqual.h"
13#include "../Templates/Decay.h"
14#include "../Templates/TypeHash.h"
15#include "SparseArray.h"
16#include "../Misc/StructBuilder.h"
17
18/**
19 * The base KeyFuncs type with some useful definitions for all KeyFuncs; meant to be derived from instead of used directly.
20 * bInAllowDuplicateKeys=true is slightly faster because it allows the TSet to skip validating that
21 * there isn't already a duplicate entry in the TSet.
22 */
23template<typename ElementType,typename InKeyType,bool bInAllowDuplicateKeys = false>
25{
26 typedef InKeyType KeyType;
27 typedef typename TCallTraits<InKeyType>::ParamType KeyInitType;
28 typedef typename TCallTraits<ElementType>::ParamType ElementInitType;
29
30 enum { bAllowDuplicateKeys = bInAllowDuplicateKeys };
31};
32
33/**
34 * A default implementation of the KeyFuncs used by TSet which uses the element as a key.
35 */
36template<typename ElementType,bool bInAllowDuplicateKeys = false>
37struct DefaultKeyFuncs : BaseKeyFuncs<ElementType,ElementType,bInAllowDuplicateKeys>
38{
39 typedef typename TCallTraits<ElementType>::ParamType KeyInitType;
40 typedef typename TCallTraits<ElementType>::ParamType ElementInitType;
41
42 /**
43 * @return The key used to index the given element.
44 */
45 static FORCEINLINE KeyInitType GetSetKey(ElementInitType Element)
46 {
47 return Element;
48 }
49
50 /**
51 * @return True if the keys match.
52 */
53 static FORCEINLINE bool Matches(KeyInitType A,KeyInitType B)
54 {
55 return A == B;
56 }
57
58 /** Calculates a hash index for a key. */
59 static FORCEINLINE uint32 GetKeyHash(KeyInitType Key)
60 {
61 return GetTypeHash(Key);
62 }
63};
64
65// Forward declaration.
66template<
67 typename InElementType,
68 typename KeyFuncs = DefaultKeyFuncs<InElementType>,
69 typename Allocator = FDefaultSetAllocator
70 >
71class TSet;
72
73/** This is used to provide type specific behavior for a move which will destroy B. */
74/** Should be in UnrealTemplate but isn't for Clang build reasons - will move later */
75template<typename T>
76FORCEINLINE void MoveByRelocate(T& A, T& B)
77{
78 // Destruct the previous value of A.
79 A.~T();
80
81 // Relocate B into the 'hole' left by the destruction of A, leaving a hole in B instead.
82 RelocateConstructItems<T>(&A, &B, 1);
83}
84
85/** Either NULL or an identifier for an element of a set. */
87{
88public:
89
90 template<typename,typename,typename>
91 friend class TSet;
92
93 friend class FScriptSet;
94
95 /** Default constructor. */
96 FORCEINLINE FSetElementId():
98 {}
99
100 /** @return a boolean value representing whether the id is NULL. */
101 FORCEINLINE bool IsValidId() const
102 {
103 return Index != INDEX_NONE;
104 }
105
106 /** Comparison operator. */
107 FORCEINLINE friend bool operator==(const FSetElementId& A,const FSetElementId& B)
108 {
109 return A.Index == B.Index;
110 }
111
112 FORCEINLINE int32 AsInteger() const
113 {
114 return Index;
115 }
116
117 FORCEINLINE static FSetElementId FromInteger(int32 Integer)
118 {
119 return FSetElementId(Integer);
120 }
121
122private:
123
124 /** The index of the element in the set's element array. */
125 int32 Index;
126
127 /** Initialization constructor. */
128 FORCEINLINE FSetElementId(int32 InIndex):
129 Index(InIndex)
130 {}
131
132 /** Implicit conversion to the element index. */
133 FORCEINLINE operator int32() const
134 {
135 return Index;
136 }
137};
138
139/** An element in the set. */
140template <typename InElementType>
142{
143public:
144 typedef InElementType ElementType;
145
146 /** The element's value. */
148
149 /** The id of the next element in the same hash bucket. */
151
152 /** The hash bucket that the element is currently linked to. */
153 mutable int32 HashIndex;
154
155 /** Default constructor. */
156 FORCEINLINE TSetElement()
157 {}
158
159 /** Initialization constructor. */
160 template <typename InitType, typename = typename TEnableIf<!TAreTypesEqual<TSetElement, typename TDecay<InitType>::Type>::Value>::Type> explicit FORCEINLINE TSetElement(InitType&& InValue) : Value(Forward<InitType>(InValue)) {}
161
162 /** Copy/move constructors */
165
166 /** Copy/move assignment */
167 FORCEINLINE TSetElement& operator=(const TSetElement& Rhs) { Value = Rhs.Value ; HashNextId = Rhs.HashNextId ; HashIndex = Rhs.HashIndex; return *this; }
169
170 // Comparison operators
171 FORCEINLINE bool operator==(const TSetElement& Other) const
172 {
173 return Value == Other.Value;
174 }
175 FORCEINLINE bool operator!=(const TSetElement& Other) const
176 {
177 return Value != Other.Value;
178 }
179};
180
181/**
182 * A set with an optional KeyFuncs parameters for customizing how the elements are compared and searched.
183 * E.g. You can specify a mapping from elements to keys if you want to find elements by specifying a subset of
184 * the element type. It uses a TSparseArray of the elements, and also links the elements into a hash with a
185 * number of buckets proportional to the number of elements. Addition, removal, and finding are O(1).
186 *
187 **/
188template<
189 typename InElementType,
190 typename KeyFuncs /*= DefaultKeyFuncs<ElementType>*/,
191 typename Allocator /*= FDefaultSetAllocator*/
192 >
193class TSet
194{
195 friend struct TContainerTraits<TSet>;
196 friend class FScriptSet;
197
198 typedef typename KeyFuncs::KeyInitType KeyInitType;
199 typedef typename KeyFuncs::ElementInitType ElementInitType;
200
201 typedef TSetElement<InElementType> SetElementType;
202
203public:
204 typedef InElementType ElementType;
205
206 /** Initialization constructor. */
207 FORCEINLINE TSet()
208 : HashSize(0)
209 {}
210
211 /** Copy constructor. */
212 FORCEINLINE TSet(const TSet& Copy)
213 : HashSize(0)
214 {
215 *this = Copy;
216 }
217
218 FORCEINLINE explicit TSet(const TArray<ElementType>& InArray)
219 : HashSize(0)
220 {
222 }
223
224 FORCEINLINE explicit TSet(TArray<ElementType>&& InArray)
225 : HashSize(0)
226 {
228 }
229
230 /** Destructor. */
231 FORCEINLINE ~TSet()
232 {
233 HashSize = 0;
234 }
235
236 /** Assignment operator. */
237 TSet& operator=(const TSet& Copy)
238 {
239 if(this != &Copy)
240 {
241 Empty(Copy.Num());
243 {
244 Add(*CopyIt);
245 }
246 }
247 return *this;
248 }
249
250private:
251 template <typename SetType>
252 static FORCEINLINE typename TEnableIf<TContainerTraits<SetType>::MoveWillEmptyContainer>::Type MoveOrCopy(SetType& ToSet, SetType& FromSet)
253 {
255
257
259 FromSet.HashSize = 0;
260 }
261
262 template <typename SetType>
263 static FORCEINLINE typename TEnableIf<!TContainerTraits<SetType>::MoveWillEmptyContainer>::Type MoveOrCopy(SetType& ToSet, SetType& FromSet)
264 {
265 ToSet = FromSet;
266 }
267
268public:
269 /** Initializer list constructor. */
270 TSet(std::initializer_list<ElementType> InitList)
271 : HashSize(0)
272 {
274 }
275
276 /** Move constructor. */
277 TSet(TSet&& Other)
278 : HashSize(0)
279 {
280 MoveOrCopy(*this, Other);
281 }
282
283 /** Move assignment operator. */
284 TSet& operator=(TSet&& Other)
285 {
286 if (this != &Other)
287 {
288 MoveOrCopy(*this, Other);
289 }
290
291 return *this;
292 }
293
294 /** Constructor for moving elements from a TSet with a different SetAllocator */
295 template<typename OtherAllocator>
296 TSet(TSet<ElementType, KeyFuncs, OtherAllocator>&& Other)
297 : HashSize(0)
298 {
300 }
301
302 /** Constructor for copying elements from a TSet with a different SetAllocator */
303 template<typename OtherAllocator>
304 TSet(const TSet<ElementType, KeyFuncs, OtherAllocator>& Other)
305 : HashSize(0)
306 {
307 Append(Other);
308 }
309
310 /** Assignment operator for moving elements from a TSet with a different SetAllocator */
311 template<typename OtherAllocator>
312 TSet& operator=(TSet<ElementType, KeyFuncs, OtherAllocator>&& Other)
313 {
314 Reset();
316 return *this;
317 }
318
319 /** Assignment operator for copying elements from a TSet with a different SetAllocator */
320 template<typename OtherAllocator>
321 TSet& operator=(const TSet<ElementType, KeyFuncs, OtherAllocator>& Other)
322 {
323 Reset();
324 Append(Other);
325 return *this;
326 }
327
328 /** Initializer list assignment operator */
329 TSet& operator=(std::initializer_list<ElementType> InitList)
330 {
331 Reset();
333 return *this;
334 }
335
336 /**
337 * Removes all elements from the set, potentially leaving space allocated for an expected number of elements about to be added.
338 * @param ExpectedNumElements - The number of elements about to be added to the set.
339 */
340 void Empty(int32 ExpectedNumElements = 0)
341 {
342 // Empty the elements array, and reallocate it for the expected number of elements.
344
345 // Resize the hash to the desired size for the expected number of elements.
347 {
348 // If the hash was already the desired size, clear the references to the elements that have now been removed.
350 {
352 }
353 }
354 }
355
356 /** Efficiently empties out the set but preserves all allocations and capacities */
357 void Reset()
358 {
359 // Reset the elements array.
360 Elements.Reset();
361
362 // Clear the references to the elements that have now been removed.
364 {
366 }
367 }
368
369 /** Shrinks the set's element storage to avoid slack. */
370 FORCEINLINE void Shrink()
371 {
373 Relax();
374 }
375
376 /** Compacts the allocated elements into a contiguous range. */
377 FORCEINLINE void Compact()
378 {
379 if (Elements.Compact())
380 {
381 Rehash();
382 }
383 }
384
385 /** Compacts the allocated elements into a contiguous range. Does not change the iteration order of the elements. */
386 FORCEINLINE void CompactStable()
387 {
389 {
390 Rehash();
391 }
392 }
393
394 /** Preallocates enough memory to contain Number elements */
395 FORCEINLINE void Reserve(int32 Number)
396 {
397 // makes sense only when Number > Elements.Num() since TSparseArray::Reserve
398 // does any work only if that's the case
399 if (Number > Elements.Num())
400 {
402 }
403 }
404
405 /** Relaxes the set's hash to a size strictly bounded by the number of elements in the set. */
406 FORCEINLINE void Relax()
407 {
409 }
410
411 /**
412 * Helper function to return the amount of memory allocated by this container
413 * @return number of bytes allocated by this container
414 */
415 FORCEINLINE uint32 GetAllocatedSize( void ) const
416 {
417 return Elements.GetAllocatedSize() + (HashSize * sizeof(FSetElementId));
418 }
419
420 /** @return the number of elements. */
421 FORCEINLINE int32 Num() const
422 {
423 return Elements.Num();
424 }
425
426 /**
427 * Checks whether an element id is valid.
428 * @param Id - The element id to check.
429 * @return true if the element identifier refers to a valid element in this set.
430 */
431 FORCEINLINE bool IsValidId(FSetElementId Id) const
432 {
433 return Id.IsValidId() &&
434 Id >= 0 &&
435 Id < Elements.GetMaxIndex() &&
437 }
438
439 /** Accesses the identified element's value. */
441 {
442 return Elements[Id].Value;
443 }
444
445 /** Accesses the identified element's value. */
446 FORCEINLINE const ElementType& operator[](FSetElementId Id) const
447 {
448 return Elements[Id].Value;
449 }
450
451 /**
452 * Adds an element to the set.
453 *
454 * @param InElement Element to add to set
455 * @param bIsAlreadyInSetPtr [out] Optional pointer to bool that will be set depending on whether element is already in set
456 * @return A pointer to the element stored in the set.
457 */
458 FORCEINLINE FSetElementId Add(const InElementType& InElement, bool* bIsAlreadyInSetPtr = NULL) { return Emplace((InElement), bIsAlreadyInSetPtr); }
459 FORCEINLINE FSetElementId Add( InElementType&& InElement, bool* bIsAlreadyInSetPtr = NULL) { return Emplace(MoveTempIfPossible(InElement), bIsAlreadyInSetPtr); }
460
461#pragma warning(push)
462#pragma warning(disable : 4291)
463
464 /**
465 * Adds an element to the set.
466 *
467 * @param Args The argument(s) to be forwarded to the set element's constructor.
468 * @param bIsAlreadyInSetPtr [out] Optional pointer to bool that will be set depending on whether element is already in set
469 * @return A pointer to the element stored in the set.
470 */
471 template <typename ArgsType>
472 FSetElementId Emplace(ArgsType&& Args,bool* bIsAlreadyInSetPtr = NULL)
473 {
474 // Create a new element.
478
479 bool bIsAlreadyInSet = false;
481 {
482 // If the set doesn't allow duplicate keys, check for an existing element with the same key as the element being added.
483
484 // Don't bother searching for a duplicate if this is the first element we're adding
485 if (Elements.Num() != 1)
486 {
489 if (bIsAlreadyInSet)
490 {
491 // If there's an existing element with the same key as the new element, replace the existing element with the new element.
493
494 // Then remove the new element.
496
497 // Then point the return value at the replaced element.
499 }
500 }
501 }
502
503 if (!bIsAlreadyInSet)
504 {
505 // Check if the hash needs to be resized.
507 {
508 // If the rehash didn't add the new element to the hash, add it.
510 }
511 }
512
514 {
516 }
517
518 return ElementId;
519 }
520
521#pragma warning(pop)
522
523 template<typename ArrayAllocator>
524 void Append(const TArray<ElementType, ArrayAllocator>& InElements)
525 {
527 for (const ElementType& Element : InElements)
528 {
529 Add(Element);
530 }
531 }
532
533 template<typename ArrayAllocator>
534 void Append(TArray<ElementType, ArrayAllocator>&& InElements)
535 {
538 {
540 }
542 }
543
544 /**
545 * Add all items from another set to our set (union without creating a new set)
546 * @param OtherSet - The other set of items to add.
547 */
548 template<typename OtherAllocator>
549 void Append(const TSet<ElementType, KeyFuncs, OtherAllocator>& OtherSet)
550 {
552 for (const ElementType& Element : OtherSet)
553 {
554 Add(Element);
555 }
556 }
557
558 template<typename OtherAllocator>
559 void Append(TSet<ElementType, KeyFuncs, OtherAllocator>&& OtherSet)
560 {
563 {
565 }
566 OtherSet.Reset();
567 }
568
569 void Append(std::initializer_list<ElementType> InitList)
570 {
572 for (const ElementType& Element : InitList)
573 {
574 Add(Element);
575 }
576 }
577
578 /**
579 * Removes an element from the set.
580 * @param Element - A pointer to the element in the set, as returned by Add or Find.
581 */
582 void Remove(FSetElementId ElementId)
583 {
584 if (Elements.Num())
585 {
587
588 // Remove the element from the hash.
592 {
594 {
596 break;
597 }
598 }
599 }
600
601 // Remove the element from the elements array.
603 }
604
605 /**
606 * Finds an element with the given key in the set.
607 * @param Key - The key to search for.
608 * @return The id of the set element matching the given key, or the NULL id if none matches.
609 */
611 {
612 if (Elements.Num())
613 {
617 {
619 {
620 // Return the first match, regardless of whether the set has multiple matches for the key or not.
621 return ElementId;
622 }
623 }
624 }
625 return FSetElementId();
626 }
627
628 /**
629 * Finds an element with the given key in the set.
630 * @param Key - The key to search for.
631 * @return A pointer to an element with the given key. If no element in the set has the given key, this will return NULL.
632 */
633 FORCEINLINE ElementType* Find(KeyInitType Key)
634 {
636 if(ElementId.IsValidId())
637 {
638 return &Elements[ElementId].Value;
639 }
640 else
641 {
642 return NULL;
643 }
644 }
645
646 /**
647 * Finds an element with the given key in the set.
648 * @param Key - The key to search for.
649 * @return A const pointer to an element with the given key. If no element in the set has the given key, this will return NULL.
650 */
651 FORCEINLINE const ElementType* Find(KeyInitType Key) const
652 {
654 if(ElementId.IsValidId())
655 {
656 return &Elements[ElementId].Value;
657 }
658 else
659 {
660 return NULL;
661 }
662 }
663
664 /**
665 * Removes all elements from the set matching the specified key.
666 * @param Key - The key to match elements against.
667 * @return The number of elements removed.
668 */
670 {
672
673 if (Elements.Num())
674 {
676 while(NextElementId->IsValidId())
677 {
680 {
681 // This element matches the key, remove it from the set. Note that Remove sets *NextElementId to point to the next
682 // element after the removed element in the hash bucket.
685
687 {
688 // If the hash disallows duplicate keys, we're done removing after the first matched key.
689 break;
690 }
691 }
692 else
693 {
695 }
696 }
697 }
698
699 return NumRemovedElements;
700 }
701
702 /**
703 * Checks if the element contains an element with the given key.
704 * @param Key - The key to check for.
705 * @return true if the set contains an element with the given key.
706 */
707 FORCEINLINE bool Contains(KeyInitType Key) const
708 {
709 return FindId(Key).IsValidId();
710 }
711
712 /**
713 * Sorts the set's elements using the provided comparison class.
714 */
715 template <typename PREDICATE_CLASS>
716 void Sort( const PREDICATE_CLASS& Predicate )
717 {
718 // Sort the elements according to the provided comparison class.
720
721 // Rehash.
722 Rehash();
723 }
724
726 {
727 bool bResult=true;
728 if (Elements.Num())
729 {
730 // iterate over all elements for the hash entry of the given key
731 // and verify that the ids are valid
733 while( ElementId.IsValidId() )
734 {
735 if( !IsValidId(ElementId) )
736 {
737 bResult=false;
738 break;
739 }
741 }
742 }
743 return bResult;
744 }
745
746 // Legacy comparison operators. Note that these also test whether the set's elements were added in the same order!
747 friend bool LegacyCompareEqual(const TSet& A,const TSet& B)
748 {
749 return A.Elements == B.Elements;
750 }
751 friend bool LegacyCompareNotEqual(const TSet& A,const TSet& B)
752 {
753 return A.Elements != B.Elements;
754 }
755
756 /** @return the intersection of two sets. (A AND B)*/
757 TSet Intersect(const TSet& OtherSet) const
758 {
759 const bool bOtherSmaller = (Num() > OtherSet.Num());
760 const TSet& A = (bOtherSmaller ? OtherSet : *this);
761 const TSet& B = (bOtherSmaller ? *this : OtherSet);
762
763 TSet Result;
764 Result.Reserve(A.Num()); // Worst case is everything in smaller is in larger
765
767 {
769 {
770 Result.Add(*SetIt);
771 }
772 }
773 return Result;
774 }
775
776 /** @return the union of two sets. (A OR B)*/
777 TSet Union(const TSet& OtherSet) const
778 {
779 TSet Result;
780 Result.Reserve(Num() + OtherSet.Num()); // Worst case is 2 totally unique Sets
781
782 for(TConstIterator SetIt(*this);SetIt;++SetIt)
783 {
784 Result.Add(*SetIt);
785 }
787 {
788 Result.Add(*SetIt);
789 }
790 return Result;
791 }
792
793 /** @return the complement of two sets. (A not in B where A is this and B is Other)*/
794 TSet Difference(const TSet& OtherSet) const
795 {
796 TSet Result;
797 Result.Reserve(Num()); // Worst case is no elements of this are in Other
798
799 for(TConstIterator SetIt(*this);SetIt;++SetIt)
800 {
802 {
803 Result.Add(*SetIt);
804 }
805 }
806 return Result;
807 }
808
809 /**
810 * Determine whether the specified set is entirely included within this set
811 *
812 * @param OtherSet Set to check
813 *
814 * @return True if the other set is entirely included in this set, false if it is not
815 */
816 bool Includes(const TSet<ElementType,KeyFuncs,Allocator>& OtherSet) const
817 {
818 bool bIncludesSet = true;
819 if (OtherSet.Num() <= Num())
820 {
822 {
824 {
825 bIncludesSet = false;
826 break;
827 }
828 }
829 }
830 else
831 {
832 // Not possible to include if it is bigger than us
833 bIncludesSet = false;
834 }
835 return bIncludesSet;
836 }
837
838 /** @return a TArray of the elements */
840 {
842 Result.Reserve(Num());
843 for(TConstIterator SetIt(*this);SetIt;++SetIt)
844 {
845 Result.Add(*SetIt);
846 }
847 return Result;
848 }
849
850 /**
851 * Checks that the specified address is not part of an element within the container. Used for implementations
852 * to check that reference arguments aren't going to be invalidated by possible reallocation.
853 *
854 * @param Addr The address to check.
855 */
856 FORCEINLINE void CheckAddress(const ElementType* Addr) const
857 {
859 }
860
861private:
862 /** Extracts the element value from the set's element structure and passes it to the user provided comparison class. */
863 template <typename PREDICATE_CLASS>
865 {
867
868 public:
869 FORCEINLINE FElementCompareClass( const PREDICATE_CLASS& InPredicate )
871 {}
872
873 FORCEINLINE bool operator()( const SetElementType& A,const SetElementType& B ) const
874 {
875 return Predicate( A.Value, B.Value );
876 }
877 };
878
879 typedef TSparseArray<SetElementType,typename Allocator::SparseArrayAllocator> ElementArrayType;
880 typedef typename Allocator::HashAllocator::template ForElementType<FSetElementId> HashType;
881
883
884 mutable HashType Hash;
885 mutable int32 HashSize;
886
887 FORCEINLINE FSetElementId& GetTypedHash(int32 HashIndex) const
888 {
889 return ((FSetElementId*)Hash.GetAllocation())[HashIndex & (HashSize - 1)];
890 }
891
892 /**
893 * Accesses an element in the set.
894 * This is needed because the iterator classes aren't friends of FSetElementId and so can't access the element index.
895 */
897 {
898 return Elements[Id];
899 }
901 {
902 return Elements[Id];
903 }
904
905 /**
906 * Translates an element index into an element ID.
907 * This is needed because the iterator classes aren't friends of FSetElementId and so can't access the FSetElementId private constructor.
908 */
909 static FORCEINLINE FSetElementId IndexToId(int32 Index)
910 {
911 return FSetElementId(Index);
912 }
913
914 /** Adds an element to the hash. */
915 FORCEINLINE void HashElement(FSetElementId ElementId,const SetElementType& Element) const
916 {
917 // Compute the hash bucket the element goes in.
919
920 // Link the element into the hash bucket.
923 }
924
925 /**
926 * Checks if the hash has an appropriate number of buckets, and if not resizes it.
927 * @param NumHashedElements - The number of elements to size the hash for.
928 * @param bAllowShrinking - true if the hash is allowed to shrink.
929 * @return true if the set was rehashed.
930 */
931 bool ConditionalRehash(int32 NumHashedElements,bool bAllowShrinking = false) const
932 {
933 // Calculate the desired hash size for the specified number of elements.
935
936 // If the hash hasn't been created yet, or is smaller than the desired hash size, rehash.
937 if(NumHashedElements > 0 &&
938 (!HashSize ||
941 {
943 Rehash();
944 return true;
945 }
946 else
947 {
948 return false;
949 }
950 }
951
952 /** Resizes the hash. */
953 void Rehash() const
954 {
955 // Free the old hash.
957
959 if (LocalHashSize)
960 {
961 // Allocate the new hash.
962 checkSlow(FMath::IsPowerOfTwo(HashSize));
965 {
967 }
968
969 // Add the existing elements to the new hash.
971 {
973 }
974 }
975 }
976
977 /** The base type of whole set iterators. */
978 template<bool bConst, bool bRangedFor = false>
980 {
981 private:
982 friend class TSet;
983
984 typedef typename TChooseClass<bConst,const ElementType,ElementType>::Result ItElementType;
985
986 public:
987 typedef typename TChooseClass<
988 bConst,
989 typename TChooseClass<bRangedFor, typename ElementArrayType::TRangedForConstIterator, typename ElementArrayType::TConstIterator>::Result,
990 typename TChooseClass<bRangedFor, typename ElementArrayType::TRangedForIterator, typename ElementArrayType::TIterator >::Result
992
993 FORCEINLINE TBaseIterator(const ElementItType& InElementIt)
995 {
996 }
997
998 /** Advances the iterator to the next element. */
999 FORCEINLINE TBaseIterator& operator++()
1000 {
1001 ++ElementIt;
1002 return *this;
1003 }
1004
1005 /** conversion to "bool" returning true if the iterator is valid. */
1006 FORCEINLINE explicit operator bool() const
1007 {
1008 return !!ElementIt;
1009 }
1010 /** inverse of the "bool" operator */
1011 FORCEINLINE bool operator !() const
1012 {
1013 return !(bool)*this;
1014 }
1015
1016 // Accessors.
1017 FORCEINLINE FSetElementId GetId() const
1018 {
1019 return TSet::IndexToId(ElementIt.GetIndex());
1020 }
1021 FORCEINLINE ItElementType* operator->() const
1022 {
1023 return &ElementIt->Value;
1024 }
1025 FORCEINLINE ItElementType& operator*() const
1026 {
1027 return ElementIt->Value;
1028 }
1029
1030 FORCEINLINE friend bool operator==(const TBaseIterator& Lhs, const TBaseIterator& Rhs) { return Lhs.ElementIt == Rhs.ElementIt; }
1031 FORCEINLINE friend bool operator!=(const TBaseIterator& Lhs, const TBaseIterator& Rhs) { return Lhs.ElementIt != Rhs.ElementIt; }
1032
1034 };
1035
1036 /** The base type of whole set iterators. */
1037 template<bool bConst>
1039 {
1040 private:
1041 typedef typename TChooseClass<bConst,const TSet,TSet>::Result SetType;
1042 typedef typename TChooseClass<bConst,const ElementType,ElementType>::Result ItElementType;
1043
1044 public:
1045 /** Initialization constructor. */
1046 FORCEINLINE TBaseKeyIterator(SetType& InSet,KeyInitType InKey)
1047 : Set(InSet)
1048 , Key(InKey)
1049 , Id()
1050 {
1051 // The set's hash needs to be initialized to find the elements with the specified key.
1053 if(Set.HashSize)
1054 {
1056 ++(*this);
1057 }
1058 }
1059
1060 /** Advances the iterator to the next element. */
1062 {
1063 Id = NextId;
1064
1065 while(Id.IsValidId())
1066 {
1068 checkSlow(Id != NextId);
1069
1071 {
1072 break;
1073 }
1074
1075 Id = NextId;
1076 }
1077 return *this;
1078 }
1079
1080 /** conversion to "bool" returning true if the iterator is valid. */
1081 FORCEINLINE explicit operator bool() const
1082 {
1083 return Id.IsValidId();
1084 }
1085 /** inverse of the "bool" operator */
1086 FORCEINLINE bool operator !() const
1087 {
1088 return !(bool)*this;
1089 }
1090
1091 // Accessors.
1092 FORCEINLINE ItElementType* operator->() const
1093 {
1094 return &Set[Id];
1095 }
1096 FORCEINLINE ItElementType& operator*() const
1097 {
1098 return Set[Id];
1099 }
1100
1101 protected:
1103 typename TTypeTraits<typename KeyFuncs::KeyType>::ConstPointerType Key;
1106 };
1107
1108public:
1109
1110 /** Used to iterate over the elements of a const TSet. */
1111 class TConstIterator : public TBaseIterator<true>
1112 {
1113 friend class TSet;
1114
1115 public:
1116 FORCEINLINE TConstIterator(const TSet& InSet)
1118 {
1119 }
1120 };
1121
1122 /** Used to iterate over the elements of a TSet. */
1123 class TIterator : public TBaseIterator<false>
1124 {
1125 friend class TSet;
1126
1127 public:
1128 FORCEINLINE TIterator(TSet& InSet)
1130 , Set (InSet)
1131 {
1132 }
1133
1134 /** Removes the current element from the set. */
1135 FORCEINLINE void RemoveCurrent()
1136 {
1137 Set.Remove(TBaseIterator<false>::GetId());
1138 }
1139
1140 private:
1142 };
1143
1144 using TRangedForConstIterator = TBaseIterator<true, true>;
1145 using TRangedForIterator = TBaseIterator<false, true>;
1146
1147 /** Used to iterate over the elements of a const TSet. */
1149 {
1150 public:
1151 FORCEINLINE TConstKeyIterator(const TSet& InSet,KeyInitType InKey):
1153 {}
1154 };
1155
1156 /** Used to iterate over the elements of a TSet. */
1157 class TKeyIterator : public TBaseKeyIterator<false>
1158 {
1159 public:
1160 FORCEINLINE TKeyIterator(TSet& InSet,KeyInitType InKey)
1161 : TBaseKeyIterator<false>(InSet,InKey)
1162 , Set(InSet)
1163 {}
1164
1165 /** Removes the current element from the set. */
1166 FORCEINLINE void RemoveCurrent()
1167 {
1168 Set.Remove(TBaseKeyIterator<false>::Id);
1169 TBaseKeyIterator<false>::Id = FSetElementId();
1170 }
1171 private:
1173 };
1174
1175 /** Creates an iterator for the contents of this set */
1177 {
1178 return TIterator(*this);
1179 }
1180
1181 /** Creates a const iterator for the contents of this set */
1183 {
1184 return TConstIterator(*this);
1185 }
1186
1187private:
1188 /**
1189 * DO NOT USE DIRECTLY
1190 * STL-like iterators to enable range-based for loop support.
1191 */
1192 FORCEINLINE friend TRangedForIterator begin( TSet& Set) { return TRangedForIterator (begin(Set.Elements)); }
1193 FORCEINLINE friend TRangedForConstIterator begin(const TSet& Set) { return TRangedForConstIterator(begin(Set.Elements)); }
1194 FORCEINLINE friend TRangedForIterator end ( TSet& Set) { return TRangedForIterator (end (Set.Elements)); }
1195 FORCEINLINE friend TRangedForConstIterator end (const TSet& Set) { return TRangedForConstIterator(end (Set.Elements)); }
1196};
1197
1198template<typename ElementType, typename KeyFuncs, typename Allocator>
1199struct TContainerTraits<TSet<ElementType, KeyFuncs, Allocator> > : public TContainerTraitsBase<TSet<ElementType, KeyFuncs, Allocator> >
1200{
1201 enum { MoveWillEmptyContainer =
1202 TContainerTraits<typename TSet<ElementType, KeyFuncs, Allocator>::ElementArrayType>::MoveWillEmptyContainer &&
1203 TAllocatorTraits<typename Allocator::HashAllocator>::SupportsMove };
1204};
1205
1207{
1211 int32 Size;
1212
1214};
1215
1216// Untyped set type for accessing TSet data, like FScriptArray for TArray.
1217// Must have the same memory representation as a TSet.
1219{
1220public:
1221 static FScriptSetLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
1222 {
1223 FScriptSetLayout Result;
1224
1225 // TSetElement<TPair<Key, Value>>
1226 FStructBuilder SetElementStruct;
1227 Result.ElementOffset = SetElementStruct.AddMember(ElementSize, ElementAlignment);
1228 Result.HashNextIdOffset = SetElementStruct.AddMember(sizeof(FSetElementId), alignof(FSetElementId));
1229 Result.HashIndexOffset = SetElementStruct.AddMember(sizeof(int32), alignof(int32));
1230 Result.Size = SetElementStruct.GetSize();
1232
1233 return Result;
1234 }
1235
1237 : HashSize(0)
1238 {
1239 }
1240
1241 bool IsValidIndex(int32 Index) const
1242 {
1243 return Elements.IsValidIndex(Index);
1244 }
1245
1246 int32 Num() const
1247 {
1248 return Elements.Num();
1249 }
1250
1251 int32 GetMaxIndex() const
1252 {
1254 }
1255
1256 void* GetData(int32 Index, const FScriptSetLayout& Layout)
1257 {
1258 return Elements.GetData(Index, Layout.SparseArrayLayout);
1259 }
1260
1261 const void* GetData(int32 Index, const FScriptSetLayout& Layout) const
1262 {
1263 return Elements.GetData(Index, Layout.SparseArrayLayout);
1264 }
1265
1266 void Empty(int32 Slack, const FScriptSetLayout& Layout)
1267 {
1268 // Empty the elements array, and reallocate it for the expected number of elements.
1270
1271 // Calculate the desired hash size for the specified number of elements.
1272 const int32 DesiredHashSize = Allocator::GetNumberOfHashBuckets(Slack);
1273
1274 // If the hash hasn't been created yet, or is smaller than the desired hash size, rehash.
1275 if (Slack != 0 && (HashSize == 0 || HashSize != DesiredHashSize))
1276 {
1277 HashSize = DesiredHashSize;
1278
1279 // Free the old hash.
1281 }
1282
1283 for (auto* It = (FSetElementId*)Hash.GetAllocation(), *End = It + HashSize; It != End; ++It)
1284 {
1285 *It = FSetElementId();
1286 }
1287 }
1288
1289 void RemoveAt(int32 Index, const FScriptSetLayout& Layout)
1290 {
1291 void* ElementBeingRemoved = Elements.GetData(Index, Layout.SparseArrayLayout);
1292
1293 // Remove the element from the hash.
1294 for (FSetElementId* NextElementId = &GetTypedHash(GetHashIndexRef(ElementBeingRemoved, Layout)); NextElementId->IsValidId(); NextElementId = &GetHashNextIdRef(Elements.GetData(NextElementId->AsInteger(), Layout.SparseArrayLayout), Layout))
1295 {
1296 if (NextElementId->AsInteger() == Index)
1297 {
1298 *NextElementId = GetHashNextIdRef(ElementBeingRemoved, Layout);
1299 break;
1300 }
1301 }
1302
1303 // Remove the element from the elements array.
1305 }
1306
1307 /**
1308 * Adds an uninitialized object to the set.
1309 * The set will need rehashing at some point after this call to make it valid.
1310 *
1311 * @return The index of the added element.
1312 */
1314 {
1316 return Result;
1317 }
1318
1319 void Rehash(const FScriptSetLayout& Layout, TFunctionRef<uint32 (const void*)> GetKeyHash)
1320 {
1321 // Free the old hash.
1323
1325 if (HashSize)
1326 {
1327 // Allocate the new hash.
1329 for (int32 HashIndex = 0; HashIndex < HashSize; ++HashIndex)
1330 {
1332 }
1333
1334 // Add the existing elements to the new hash.
1335 int32 Index = 0;
1336 int32 Count = Elements.Num();
1337 while (Count)
1338 {
1339 if (Elements.IsValidIndex(Index))
1340 {
1341 FSetElementId ElementId(Index);
1342
1343 void* Element = (uint8*)Elements.GetData(Index, Layout.SparseArrayLayout);
1344
1345 // Compute the hash bucket the element goes in.
1346 uint32 ElementHash = GetKeyHash(Element);
1347 int32 HashIndex = ElementHash & (HashSize - 1);
1348 GetHashIndexRef(Element, Layout) = ElementHash & (HashSize - 1);
1349
1350 // Link the element into the hash bucket.
1351 GetHashNextIdRef(Element, Layout) = GetTypedHash(HashIndex);
1352 GetTypedHash(HashIndex) = ElementId;
1353
1354 --Count;
1355 }
1356
1357 ++Index;
1358 }
1359 }
1360 }
1361
1362 int32 FindIndex(const void* Element, const FScriptSetLayout& Layout, TFunctionRef<uint32 (const void*)> GetKeyHash, TFunctionRef<bool (const void*, const void*)> EqualityFn)
1363 {
1364 if (Elements.Num())
1365 {
1366 const uint32 ElementHash = GetKeyHash(Element);
1367 const int32 HashIndex = ElementHash & (HashSize - 1);
1368
1369 uint8* CurrentElement = nullptr;
1370 for (FSetElementId ElementId = GetTypedHash(HashIndex);
1371 ElementId.IsValidId();
1372 ElementId = GetHashNextIdRef(CurrentElement, Layout))
1373 {
1374 CurrentElement = (uint8*)Elements.GetData(ElementId, Layout.SparseArrayLayout);
1375 if (EqualityFn(Element, CurrentElement))
1376 {
1377 return ElementId;
1378 }
1379 }
1380 }
1381
1382 return INDEX_NONE;
1383 }
1384
1385 void Add(const void* Element, const FScriptSetLayout& Layout, TFunctionRef<uint32(const void*)> GetKeyHash, TFunctionRef<bool(const void*, const void*)> EqualityFn, TFunctionRef<void(void*)> ConstructFn, TFunctionRef<void(void*)> DestructFn)
1386 {
1387 // Minor efficiency concern: we hash the element both here and in the FindIndex() call
1388 uint32 ElementHash = GetKeyHash(Element);
1389
1390 int32 NewElementIndex = FindIndex(Element, Layout, GetKeyHash, EqualityFn);
1391 if (NewElementIndex != INDEX_NONE)
1392 {
1393 void* ElementPtr = Elements.GetData(NewElementIndex, Layout.SparseArrayLayout);
1394
1395 DestructFn(ElementPtr);
1396 ConstructFn(ElementPtr);
1397
1398 // We don't update the hash because we don't need to - the new element
1399 // should have the same hash, but let's just check.
1400 }
1401 else
1402 {
1403 NewElementIndex = Elements.AddUninitialized(Layout.SparseArrayLayout);
1404
1405 void* ElementPtr = Elements.GetData(NewElementIndex, Layout.SparseArrayLayout);
1406 ConstructFn(ElementPtr);
1407
1408 const int32 DesiredHashSize = FDefaultSetAllocator::GetNumberOfHashBuckets(Num());
1409 if (!HashSize || HashSize < DesiredHashSize)
1410 {
1411 // rehash, this will link in our new element if needed:
1412 Rehash(Layout, GetKeyHash);
1413 }
1414 else
1415 {
1416 // link the new element into the set:
1417 int32 HashIndex = ElementHash & (HashSize - 1);
1418 FSetElementId& TypedHash = GetTypedHash(HashIndex);
1419 GetHashIndexRef(ElementPtr, Layout) = HashIndex;
1420 GetHashNextIdRef(ElementPtr, Layout) = TypedHash;
1421 TypedHash = FSetElementId(NewElementIndex);
1422 }
1423 }
1424 }
1425
1426private:
1429
1432 mutable int32 HashSize;
1433
1434 FORCEINLINE FSetElementId& GetTypedHash(int32 HashIndex) const
1435 {
1436 return ((FSetElementId*)Hash.GetAllocation())[HashIndex & (HashSize - 1)];
1437 }
1438
1439 static FSetElementId& GetHashNextIdRef(const void* Element, const FScriptSetLayout& Layout)
1440 {
1441 return *(FSetElementId*)((uint8*)Element + Layout.HashNextIdOffset);
1442 }
1443
1444 static int32& GetHashIndexRef(const void* Element, const FScriptSetLayout& Layout)
1445 {
1446 return *(int32*)((uint8*)Element + Layout.HashIndexOffset);
1447 }
1448
1449 // This function isn't intended to be called, just to be compiled to validate the correctness of the type.
1450 static void CheckConstraints()
1451 {
1452 typedef FScriptSet ScriptType;
1453 typedef TSet<int32> RealType;
1454
1455 // Check that the class footprint is the same
1456 static_assert(sizeof (ScriptType) == sizeof (RealType), "FScriptSet's size doesn't match TSet");
1457 static_assert(alignof(ScriptType) == alignof(RealType), "FScriptSet's alignment doesn't match TSet");
1458
1459 // Check member sizes
1460 static_assert(sizeof(DeclVal<ScriptType>().Elements) == sizeof(DeclVal<RealType>().Elements), "FScriptSet's Elements member size does not match TSet's");
1461 static_assert(sizeof(DeclVal<ScriptType>().Hash) == sizeof(DeclVal<RealType>().Hash), "FScriptSet's Hash member size does not match TSet's");
1462 static_assert(sizeof(DeclVal<ScriptType>().HashSize) == sizeof(DeclVal<RealType>().HashSize), "FScriptSet's HashSize member size does not match TSet's");
1463
1464 // Check member offsets
1465 static_assert(STRUCT_OFFSET(ScriptType, Elements) == STRUCT_OFFSET(RealType, Elements), "FScriptSet's Elements member offset does not match TSet's");
1466 static_assert(STRUCT_OFFSET(ScriptType, Hash) == STRUCT_OFFSET(RealType, Hash), "FScriptSet's Hash member offset does not match TSet's");
1467 static_assert(STRUCT_OFFSET(ScriptType, HashSize) == STRUCT_OFFSET(RealType, HashSize), "FScriptSet's FirstFreeIndex member offset does not match TSet's");
1468 }
1469
1470public:
1471 // These should really be private, because they shouldn't be called, but there's a bunch of code
1472 // that needs to be fixed first.
1473 FScriptSet(const FScriptSet&) { check(false); }
1474 void operator=(const FScriptSet&) { check(false); }
1475};
1476
1477template <>
1479{
1480 enum { Value = true };
1481};
EBlueprintType
Definition Enums.h:3920
T AlignArbitrary(const T Ptr, uint32 Alignment)
static FORCEINLINE bool IsAligned(const volatile void *Ptr, const uint32 Alignment)
CONSTEXPR T AlignDown(const T Ptr, int32 Alignment)
CONSTEXPR T Align(const T Ptr, int32 Alignment)
static unsigned int GetBuildUniqueId()
Definition Atlas.h:30
ARK_API LPVOID GetDataAddress(const std::string &name)
Definition Base.cpp:15
ARK_API BitField GetBitField(LPVOID base, const std::string &name)
Definition Base.cpp:25
ARK_API BitField GetBitField(const void *base, const std::string &name)
Definition Base.cpp:20
#define ARK_API
Definition Base.h:9
ARK_API DWORD64 GetAddress(const void *base, const std::string &name)
Definition Base.cpp:5
ARK_API LPVOID GetAddress(const std::string &name)
Definition Base.cpp:10
FPlatformTypes::CHAR16 UCS2CHAR
A 16-bit character containing a UCS2 (Unicode, 16-bit, fixed-width) code unit, used for compatibility...
Definition BasicTypes.h:124
#define checkSlow(expr)
Definition BasicTypes.h:15
@ INDEX_NONE
Definition BasicTypes.h:144
FWindowsPlatformTypes FPlatformTypes
Definition BasicTypes.h:94
#define PLATFORM_LITTLE_ENDIAN
Definition BasicTypes.h:12
FPlatformTypes::CHAR8 UTF8CHAR
An 8-bit character containing a UTF8 (Unicode, 8-bit, variable-width) code unit.
Definition BasicTypes.h:122
ENoInit
Definition BasicTypes.h:151
@ NoInit
Definition BasicTypes.h:151
#define check(expr)
Definition BasicTypes.h:14
#define FORCENOINLINE
Definition BasicTypes.h:6
#define MS_ALIGN(n)
Definition BasicTypes.h:21
#define GCC_ALIGN(n)
Definition BasicTypes.h:22
#define PLATFORM_COMPILER_HAS_DEFAULTED_FUNCTIONS
Definition BasicTypes.h:11
#define checkf(...)
Definition BasicTypes.h:16
#define ensureMsgf(Expr, Expr2)
Definition BasicTypes.h:19
#define RESTRICT
Definition BasicTypes.h:5
FPlatformTypes::CHAR16 UTF16CHAR
A 16-bit character containing a UTF16 (Unicode, 16-bit, variable-width) code unit.
Definition BasicTypes.h:126
#define CONSTEXPR
Definition BasicTypes.h:7
EForceInit
Definition BasicTypes.h:147
@ ForceInitToZero
Definition BasicTypes.h:149
@ ForceInit
Definition BasicTypes.h:148
FPlatformTypes::CHAR32 UTF32CHAR
A 32-bit character containing a UTF32 (Unicode, 32-bit, fixed-width) code unit.
Definition BasicTypes.h:128
static FORCEINLINE int32 BYTESWAP_ORDER32(int32 val)
Definition ByteSwap.h:30
static FORCEINLINE uint16 BYTESWAP_ORDER16(uint16 val)
Definition ByteSwap.h:12
static FORCEINLINE void BYTESWAP_ORDER_TCHARARRAY(TCHAR *str)
Definition ByteSwap.h:72
static FORCEINLINE uint32 BYTESWAP_ORDER32(uint32 val)
Definition ByteSwap.h:25
#define BYTESWAP_ORDER16_unsigned(x)
Definition ByteSwap.h:8
static FORCEINLINE float BYTESWAP_ORDERF(float val)
Definition ByteSwap.h:38
static FORCEINLINE int16 BYTESWAP_ORDER16(int16 val)
Definition ByteSwap.h:17
static FORCEINLINE uint64 BYTESWAP_ORDER64(uint64 Value)
Definition ByteSwap.h:46
static FORCEINLINE int64 BYTESWAP_ORDER64(int64 Value)
Definition ByteSwap.h:58
#define BYTESWAP_ORDER32_unsigned(x)
Definition ByteSwap.h:9
TCString< ANSICHAR > FCStringAnsi
Definition CString.h:336
TCString< WIDECHAR > FCStringWide
Definition CString.h:337
TCString< TCHAR > FCString
Definition CString.h:335
TChar< WIDECHAR > FCharWide
Definition Char.h:143
#define LITERAL(CharType, StringLiteral)
Definition Char.h:30
TChar< ANSICHAR > FCharAnsi
Definition Char.h:144
TChar< TCHAR > FChar
Definition Char.h:142
static const float OneOver255
Definition Color.h:527
EGammaSpace
Definition Color.h:20
FORCEINLINE FLinearColor operator*(float Scalar, const FLinearColor &Color)
Definition Color.h:364
FORCEINLINE int32 DefaultCalculateSlackShrink(int32 NumElements, int32 NumAllocatedElements, SIZE_T BytesPerElement, bool bAllowQuantize, uint32 Alignment=DEFAULT_ALIGNMENT)
#define NumBitsPerDWORD
#define DEFAULT_MIN_NUMBER_OF_HASHED_ELEMENTS
#define DEFAULT_NUMBER_OF_ELEMENTS_PER_HASH_BUCKET
#define DEFAULT_BASE_NUMBER_OF_HASH_BUCKETS
FORCEINLINE int32 DefaultCalculateSlackGrow(int32 NumElements, int32 NumAllocatedElements, SIZE_T BytesPerElement, bool bAllowQuantize, uint32 Alignment=DEFAULT_ALIGNMENT)
FORCEINLINE int32 DefaultCalculateSlackReserve(int32 NumElements, SIZE_T BytesPerElement, bool bAllowQuantize, uint32 Alignment=DEFAULT_ALIGNMENT)
ClassCastFlags
Definition Enums.h:873
int32 FindMatchingClosingParenthesis(const FString &TargetString, const int32 StartSearch)
Definition FString.h:3011
int32 HexToBytes(const FString &HexString, uint8 *OutBytes)
Definition FString.h:1803
const TCHAR * GetData(const FString &String)
Definition FString.h:1672
const uint8 TCharToNibble(const TCHAR Char)
Definition FString.h:1783
const bool CheckTCharIsHex(const TCHAR Char)
Definition FString.h:1773
FORCEINLINE uint32 GetTypeHash(const FString &Thing)
Definition FString.h:1646
TCHAR * GetData(FString &String)
Definition FString.h:1667
SIZE_T GetNum(const FString &String)
Definition FString.h:1677
void ByteToHex(uint8 In, FString &Result)
Definition FString.h:1743
static const uint32 MaxSupportedEscapeChars
Definition FString.h:2924
FString BytesToHex(const uint8 *In, int32 Count)
Definition FString.h:1755
int32 StringToBytes(const FString &String, uint8 *OutBytes, int32 MaxBufferSize)
Definition FString.h:1714
static const TCHAR * CharToEscapeSeqMap[][2]
Definition FString.h:2913
TCHAR NibbleToTChar(uint8 Num)
Definition FString.h:1729
FString BytesToString(const uint8 *In, int32 Count)
Definition FString.h:1688
FORCEINLINE bool operator==(TYPE_OF_NULLPTR, const TFunction< FuncType > &Func)
Definition Function.h:665
#define ENABLE_TFUNCTIONREF_VISUALIZATION
Definition Function.h:18
void * operator new(size_t Size, UE4Function_Private::FFunctionStorage &Storage)
Definition Function.h:133
FORCEINLINE bool operator!=(TYPE_OF_NULLPTR, const TFunction< FuncType > &Func)
Definition Function.h:683
FORCEINLINE bool operator!=(const TFunction< FuncType > &Func, TYPE_OF_NULLPTR)
Definition Function.h:692
FORCEINLINE bool operator==(const TFunction< FuncType > &Func, TYPE_OF_NULLPTR)
Definition Function.h:674
FORCEINLINE auto Invoke(ReturnType ObjType::*pdm, CallableType &&Callable) -> decltype(UE4Invoke_Private::DereferenceIfNecessary< ObjType >(Forward< CallableType >(Callable)).*pdm)
Definition Invoke.h:48
FORCEINLINE auto Invoke(FuncType &&Func, ArgTypes &&... Args) -> decltype(Forward< FuncType >(Func)(Forward< ArgTypes >(Args)...))
Definition Invoke.h:41
FORCEINLINE auto Invoke(ReturnType(ObjType::*PtrMemFun)(PMFArgTypes...), CallableType &&Callable, ArgTypes &&... Args) -> decltype((UE4Invoke_Private::DereferenceIfNecessary< ObjType >(Forward< CallableType >(Callable)).*PtrMemFun)(Forward< ArgTypes >(Args)...))
Definition Invoke.h:55
ARK_API std::vector< spdlog::sink_ptr > &APIENTRY GetLogSinks()
Definition Logger.cpp:31
FORCEINLINE TEnableIf<!TIsTriviallyCopyAssignable< ElementType >::Value >::Type CopyAssignItems(ElementType *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:149
FORCEINLINE TEnableIf< UE4MemoryOps_Private::TCanBitwiseRelocate< DestinationElementType, SourceElementType >::Value >::Type RelocateConstructItems(void *Dest, const SourceElementType *Source, int32 Count)
Definition MemoryOps.h:192
FORCEINLINE TEnableIf< TIsZeroConstructType< ElementType >::Value >::Type DefaultConstructItems(void *Elements, int32 Count)
Definition MemoryOps.h:56
FORCEINLINE TEnableIf<!TIsTriviallyCopyConstructible< ElementType >::Value >::Type MoveConstructItems(void *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:213
FORCEINLINE TEnableIf< TIsTriviallyCopyConstructible< ElementType >::Value >::Type MoveConstructItems(void *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:225
FORCEINLINE TEnableIf<!TIsZeroConstructType< ElementType >::Value >::Type DefaultConstructItems(void *Address, int32 Count)
Definition MemoryOps.h:43
FORCEINLINE TEnableIf<!TIsTriviallyDestructible< ElementType >::Value >::Type DestructItem(ElementType *Element)
Definition MemoryOps.h:70
FORCEINLINE TEnableIf< TTypeTraits< ElementType >::IsBytewiseComparable, bool >::Type CompareItems(const ElementType *A, const ElementType *B, int32 Count)
Definition MemoryOps.h:256
FORCEINLINE TEnableIf< TIsTriviallyCopyAssignable< ElementType >::Value >::Type MoveAssignItems(ElementType *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:250
FORCEINLINE TEnableIf< TIsTriviallyDestructible< ElementType >::Value >::Type DestructItem(ElementType *Element)
Definition MemoryOps.h:80
FORCEINLINE TEnableIf<!TIsTriviallyDestructible< ElementType >::Value >::Type DestructItems(ElementType *Element, int32 Count)
Definition MemoryOps.h:94
FORCEINLINE TEnableIf<!TIsTriviallyCopyAssignable< ElementType >::Value >::Type MoveAssignItems(ElementType *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:238
FORCEINLINE TEnableIf<!TTypeTraits< ElementType >::IsBytewiseComparable, bool >::Type CompareItems(const ElementType *A, const ElementType *B, int32 Count)
Definition MemoryOps.h:263
FORCEINLINE TEnableIf<!TIsBitwiseConstructible< DestinationElementType, SourceElementType >::Value >::Type ConstructItems(void *Dest, const SourceElementType *Source, int32 Count)
Definition MemoryOps.h:122
FORCEINLINE TEnableIf<!UE4MemoryOps_Private::TCanBitwiseRelocate< DestinationElementType, SourceElementType >::Value >::Type RelocateConstructItems(void *Dest, const SourceElementType *Source, int32 Count)
Definition MemoryOps.h:177
FORCEINLINE TEnableIf< TIsTriviallyDestructible< ElementType >::Value >::Type DestructItems(ElementType *Elements, int32 Count)
Definition MemoryOps.h:109
FORCEINLINE TEnableIf< TIsTriviallyCopyAssignable< ElementType >::Value >::Type CopyAssignItems(ElementType *Dest, const ElementType *Source, int32 Count)
Definition MemoryOps.h:162
FORCEINLINE TEnableIf< TIsBitwiseConstructible< DestinationElementType, SourceElementType >::Value >::Type ConstructItems(void *Dest, const SourceElementType *Source, int32 Count)
Definition MemoryOps.h:135
FMicrosoftPlatformString FPlatformString
#define WIN32_LEAN_AND_MEAN
Definition Requests.cpp:2
FORCEINLINE FRotator operator*(float Scale, const FRotator &R)
Definition Rotator.h:363
FORCEINLINE void MoveByRelocate(T &A, T &B)
Definition Set.h:76
FORCEINLINE SharedPointerInternals::FRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject, DeleterType &&InDeleter)
FORCEINLINE bool operator==(TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE bool operator!=(TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
FORCEINLINE bool operator!=(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE TSharedPtr< CastToType, Mode > StaticCastSharedPtr(TSharedPtr< CastFromType, Mode > const &InSharedPtr)
FORCEINLINE bool operator==(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE bool operator==(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, decltype(nullptr))
FORCEINLINE bool operator==(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
FORCEINLINE bool operator==(TSharedRef< ObjectTypeA, Mode > const &InSharedRef, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr)
FORCEINLINE bool operator==(TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
FORCEINLINE bool operator==(TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
FORCEINLINE void CleanupPointerMap(TMap< TWeakPtr< KeyType >, ValueType > &PointerMap)
FORCEINLINE bool operator!=(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
FORCEINLINE bool operator!=(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
FORCEINLINE bool operator!=(TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr, TSharedRef< ObjectTypeA, Mode > const &InSharedRef)
FORCEINLINE void CleanupPointerArray(TArray< TWeakPtr< Type > > &PointerArray)
FORCEINLINE bool operator!=(TSharedRef< ObjectTypeA, Mode > const &InSharedRefA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
FORCEINLINE bool operator!=(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, decltype(nullptr))
FORCEINLINE TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
FORCEINLINE SharedPointerInternals::FRawPtrProxy< ObjectType > MakeShareable(ObjectType *InObject)
FORCEINLINE bool operator==(decltype(nullptr), TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE bool operator!=(TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtrB)
FORCEINLINE TSharedRef< CastToType, Mode > ConstCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
FORCEINLINE bool operator==(TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE bool operator!=(decltype(nullptr), TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE TSharedPtr< CastToType, Mode > ConstCastSharedPtr(TSharedPtr< CastFromType, Mode > const &InSharedPtr)
FORCEINLINE bool operator==(TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr, TSharedRef< ObjectTypeA, Mode > const &InSharedRef)
FORCEINLINE bool operator!=(TSharedPtr< ObjectTypeA, Mode > const &InSharedPtrA, TWeakPtr< ObjectTypeB, Mode > const &InWeakPtrB)
FORCEINLINE bool operator!=(TSharedRef< ObjectTypeA, Mode > const &InSharedRef, TSharedPtr< ObjectTypeB, Mode > const &InSharedPtr)
FORCEINLINE bool operator==(TWeakPtr< ObjectTypeA, Mode > const &InWeakPtrA, TSharedRef< ObjectTypeB, Mode > const &InSharedRefB)
void StableSort(T **First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:385
void StableSort(T *First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:371
void StableSortInternal(T *First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:356
void Sort(T **First, const int32 Num)
Definition Sorting.h:117
void StableSort(T *First, const int32 Num)
Definition Sorting.h:400
void StableSort(T **First, const int32 Num)
Definition Sorting.h:413
void Merge(T *Out, T *In, const int32 Mid, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:134
void Sort(T **First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:90
void Sort(T *First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:76
void Sort(T *First, const int32 Num)
Definition Sorting.h:104
#define TARRAY_RANGED_FOR_CHECKS
Definition TArray.h:15
FORCEINLINE TIndexedContainerIterator< ContainerType, ElementType, IndexType > operator+(int32 Offset, TIndexedContainerIterator< ContainerType, ElementType, IndexType > RHS)
Definition TArray.h:141
void * operator new(size_t Size, TArray< T, Allocator > &Array, int32 Index)
Definition TArray.h:2152
void * operator new(size_t Size, TArray< T, Allocator > &Array)
Definition TArray.h:2146
#define IMPLEMENT_ALIGNED_STORAGE(Align)
int GetStructSize()
Definition UE.h:1024
EResourceSizeMode
Definition UE.h:798
@ Exclusive
Definition UE.h:799
@ Open
Definition UE.h:801
@ Inclusive
Definition UE.h:800
int GetObjectClassSize()
Definition UE.h:1005
FORCEINLINE uint32 GetTypeHash(const FName &name)
Definition UE.h:63
TWeakObjectPtr< T > GetWeakReference(T *object)
Definition UE.h:203
#define THRESH_VECTOR_NORMALIZED
#define THRESH_NORMALS_ARE_PARALLEL
#define THRESH_POINTS_ARE_SAME
#define DELTA
#define SMALL_NUMBER
#define THRESH_POINT_ON_PLANE
#define PI
#define THRESH_NORMALS_ARE_ORTHOGONAL
#define KINDA_SMALL_NUMBER
#define BIG_NUMBER
#define FASTASIN_HALF_PI
#define HALF_PI
#define INV_PI
@ MIN_ALIGNMENT
@ DEFAULT_ALIGNMENT
CONSTEXPR SIZE_T GetNum(T(&Container)[N])
FORCEINLINE T && Forward(typename TRemoveReference< T >::Type &&Obj)
FORCEINLINE TRemoveReference< T >::Type && MoveTempIfPossible(T &&Obj)
auto GetData(T &&Container) -> decltype(Container.GetData())
TEnableIf< TUseBitwiseSwap< T >::Value >::Type Swap(T &A, T &B)
ForwardIt MaxElement(ForwardIt First, ForwardIt Last, PredicateType Predicate)
ForwardIt MinElement(ForwardIt First, ForwardIt Last, PredicateType Predicate)
SIZE_T GetNum(T &&Container)
#define ARRAY_COUNT(array)
FORCEINLINE ReferencedType * IfPThenAElseB(PredicateType Predicate, ReferencedType *A, ReferencedType *B)
FORCEINLINE T && CopyTemp(T &&Val)
void Exchange(T &A, T &B)
FORCEINLINE T CopyTemp(T &Val)
T && DeclVal()
FORCEINLINE TRemoveReference< T >::Type && MoveTemp(T &&Obj)
CONSTEXPR T * GetData(T(&Container)[N])
FORCEINLINE T && Forward(typename TRemoveReference< T >::Type &Obj)
FORCEINLINE void Move(T &A, typename TMoveSupportTraits< T >::Copy B)
FORCEINLINE TEnableIf< TAreTypesEqual< T, uint32 >::Value, T >::Type ReverseBits(T Bits)
FORCEINLINE ReferencedType * IfAThenAElseB(ReferencedType *A, ReferencedType *B)
#define STRUCT_OFFSET(struc, member)
bool XOR(bool A, bool B)
FORCEINLINE T CopyTemp(const T &Val)
ForwardIt MaxElement(ForwardIt First, ForwardIt Last)
ForwardIt MinElement(ForwardIt First, ForwardIt Last)
FORCEINLINE void Move(T &A, typename TMoveSupportTraits< T >::Move B)
TEnableIf<!TUseBitwiseSwap< T >::Value >::Type Swap(T &A, T &B)
FORCEINLINE T StaticCast(ArgType &&Arg)
#define Expose_TNameOf(type)
#define Expose_TFormatSpecifier(type, format)
FORCEINLINE FVector2D operator*(float Scale, const FVector2D &V)
Definition Vector2D.h:467
FORCEINLINE float ComputeSquaredDistanceFromBoxToPoint(const FVector &Mins, const FVector &Maxs, const FVector &Point)
Definition Vector.h:893
FORCEINLINE FVector ClampVector(const FVector &V, const FVector &Min, const FVector &Max)
Definition Vector.h:1646
FORCEINLINE FVector operator*(float Scale, const FVector &V)
Definition Vector.h:870
ApiUtils & operator=(ApiUtils &&)=delete
ApiUtils()=default
void SetCheatManager(UShooterCheatManager *cheatmanager)
Definition ApiUtils.cpp:44
void SetWorld(UWorld *uworld)
Definition ApiUtils.cpp:9
ApiUtils & operator=(const ApiUtils &)=delete
void SetShooterGameMode(AShooterGameMode *shooter_game_mode)
Definition ApiUtils.cpp:21
std::unordered_map< uint64, AShooterPlayerController * > steam_id_map_
Definition ApiUtils.h:38
UShooterCheatManager * GetCheatManager() const override
Returns a point to URCON CheatManager.
Definition ApiUtils.cpp:93
UWorld * u_world_
Definition ApiUtils.h:34
ApiUtils(ApiUtils &&)=delete
AShooterGameMode * shooter_game_mode_
Definition ApiUtils.h:35
AShooterGameMode * GetShooterGameMode() const override
Returns a pointer to AShooterGameMode.
Definition ApiUtils.cpp:26
void RemovePlayerController(AShooterPlayerController *player_controller)
Definition ApiUtils.cpp:62
UShooterCheatManager * cheatmanager_
Definition ApiUtils.h:37
void SetPlayerController(AShooterPlayerController *player_controller)
Definition ApiUtils.cpp:49
ServerStatus GetStatus() const override
Returns the current server status.
Definition ApiUtils.cpp:38
ServerStatus status_
Definition ApiUtils.h:36
AShooterPlayerController * FindPlayerFromSteamId_Internal(uint64 steam_id) const override
Definition ApiUtils.cpp:75
~ApiUtils() override=default
void SetStatus(ServerStatus status)
Definition ApiUtils.cpp:33
UWorld * GetWorld() const override
Returns a pointer to UWorld.
Definition ApiUtils.cpp:14
ApiUtils(const ApiUtils &)=delete
static FString GetSteamName(AController *player_controller)
Returns the steam name of player.
static FORCEINLINE FString GetItemBlueprint(UPrimalItem *item)
Returns blueprint from UPrimalItem.
static FVector GetPosition(APlayerController *player_controller)
Returns the position of a player.
uint64 GetSteamIDForPlayerID(int player_id) const
static FORCEINLINE FString GetClassBlueprint(UClass *the_class)
Returns blueprint path from any UClass.
void SendServerMessageToAll(FLinearColor msg_color, const T *msg, Args &&... args)
Sends server message to all players. Using fmt::format.
virtual UShooterCheatManager * GetCheatManager() const =0
Returns a point to URCON CheatManager.
UPrimalGameData * GetGameData()
Returns pointer to Primal Game Data.
static bool IsRidingDino(AShooterPlayerController *player_controller)
Returns true if character is riding a dino, false otherwise.
AShooterGameState * GetGameState()
Get Shooter Game State.
virtual ~IApiUtils()=default
AShooterPlayerController * FindPlayerFromSteamName(const FString &steam_name) const
Finds player from the given steam name.
static UShooterCheatManager * GetCheatManagerByPC(AShooterPlayerController *SPC)
Get UShooterCheatManager* of player controller.
static uint64 GetPlayerID(AController *controller)
static bool IsPlayerDead(AShooterPlayerController *player)
Returns true if player is dead, false otherwise.
void SendNotificationToAll(FLinearColor color, float display_scale, float display_time, UTexture2D *icon, const T *msg, Args &&... args)
Sends notification (on-screen message) to all players. Using fmt::format.
APrimalDinoCharacter * SpawnDino(AShooterPlayerController *player, FString blueprint, FVector *location, int lvl, bool force_tame, bool neutered) const
Spawns a dino near player or at specific coordinates.
TArray< AShooterPlayerController * > FindPlayerFromCharacterName(const FString &character_name, ESearchCase::Type search, bool full_match) const
Finds all matching players from the given character name.
static FORCEINLINE FString GetBlueprint(UObjectBase *object)
Returns blueprint path from any UObject.
static FString GetCharacterName(AShooterPlayerController *player_controller, bool include_first_name=true, bool include_last_name=true)
Returns the character name of player.
TArray< AActor * > GetAllActorsInRange(FVector location, float radius, EServerOctreeGroup::Type ActorType)
Gets all actors in radius at location.
void SendChatMessageToAll(const FString &sender_name, const T *msg, Args &&... args)
Sends chat message to all players. Using fmt::format.
TArray< AActor * > GetAllActorsInRange(FVector location, float radius, EServerOctreeGroup::Type ActorType, TArray< AActor * > ignores)
Gets all actors in radius at location, with ignore actors.
virtual AShooterGameMode * GetShooterGameMode() const =0
Returns a pointer to AShooterGameMode.
static uint64 GetSteamIdFromController(AController *controller)
Returns Steam ID from player controller.
virtual UWorld * GetWorld() const =0
Returns a pointer to UWorld.
static bool TeleportToPos(AShooterPlayerController *player_controller, const FVector &pos)
Teleports player to the given position.
void SendNotification(AShooterPlayerController *player_controller, FLinearColor color, float display_scale, float display_time, UTexture2D *icon, const T *msg, Args &&... args)
Sends notification (on-screen message) to the specific player. Using fmt::format.
static uint64 GetPlayerID(APrimalCharacter *character)
virtual AShooterPlayerController * FindPlayerFromSteamId_Internal(uint64 steam_id) const =0
AShooterPlayerController * FindControllerFromCharacter(AShooterCharacter *character) const
Finds player controller from the given player character.
static APrimalDinoCharacter * GetRidingDino(AShooterPlayerController *player_controller)
Returns the dino the character is riding.
static FString GetIPAddress(AShooterPlayerController *player_controller)
Returns IP address of player.
AShooterPlayerController * FindPlayerFromSteamId(uint64 steam_id) const
Finds player from the given steam id.
virtual ServerStatus GetStatus() const =0
Returns the current server status.
void SendServerMessage(AShooterPlayerController *player_controller, FLinearColor msg_color, const T *msg, Args &&... args)
Sends server message to the specific player. Using fmt::format.
static std::optional< FString > TeleportToPlayer(AShooterPlayerController *me, AShooterPlayerController *him, bool check_for_dino, float max_dist)
Teleport one player to another.
static int GetInventoryItemCount(AShooterPlayerController *player_controller, const FString &item_name)
Counts a specific items quantity.
void SendChatMessage(AShooterPlayerController *player_controller, const FString &sender_name, const T *msg, Args &&... args)
Sends chat message to the specific player. Using fmt::format.
void Set(RT other)
Definition Fields.h:144
BitFieldValue & operator=(RT other)
Definition Fields.h:133
void * parent_
Definition Fields.h:150
std::string field_name_
Definition Fields.h:151
RT operator()() const
Definition Fields.h:128
RT Get() const
Definition Fields.h:139
T * value_
Definition Fields.h:116
void Set(const T &other)
Definition Fields.h:110
T & Get() const
Definition Fields.h:105
DataValue & operator=(const T &other)
Definition Fields.h:99
T & operator()() const
Definition Fields.h:94
static const FColor MediumSlateBlue
Definition ColorList.h:69
static const FColor Orange
Definition ColorList.h:81
static const FColor DarkGreenCopper
Definition ColorList.h:34
static const FColor BronzeII
Definition ColorList.h:26
static const FColor Yellow
Definition ColorList.h:17
static const FColor Magenta
Definition ColorList.h:15
static const FColor IndianRed
Definition ColorList.h:54
static const FColor SummerSky
Definition ColorList.h:100
static const FColor SpringGreen
Definition ColorList.h:98
static const FColor Grey
Definition ColorList.h:50
static const FColor CornFlowerBlue
Definition ColorList.h:31
static const FColor Cyan
Definition ColorList.h:16
static const FColor Blue
Definition ColorList.h:14
static const FColor GreenCopper
Definition ColorList.h:51
static const FColor MediumGoldenrod
Definition ColorList.h:66
static const FColor LimeGreen
Definition ColorList.h:60
static const FColor LightSteelBlue
Definition ColorList.h:58
static const FColor DarkOliveGreen
Definition ColorList.h:35
static const FColor Quartz
Definition ColorList.h:87
static const FColor SteelBlue
Definition ColorList.h:99
static const FColor DarkPurple
Definition ColorList.h:37
static const FColor Turquoise
Definition ColorList.h:103
static const FColor Black
Definition ColorList.h:18
static const FColor Maroon
Definition ColorList.h:62
static const FColor MediumOrchid
Definition ColorList.h:67
static const FColor NewTan
Definition ColorList.h:79
static const FColor NeonBlue
Definition ColorList.h:76
static const FColor MediumWood
Definition ColorList.h:73
static const FColor DarkSlateBlue
Definition ColorList.h:38
static const FColor White
Definition ColorList.h:11
static const FColor MandarianOrange
Definition ColorList.h:61
static const FColor Tan
Definition ColorList.h:101
static const FColor Scarlet
Definition ColorList.h:90
static const FColor SeaGreen
Definition ColorList.h:91
static const FColor Aquamarine
Definition ColorList.h:19
static const FColor Wheat
Definition ColorList.h:108
static const FColor VeryDarkBrown
Definition ColorList.h:104
static const FColor Thistle
Definition ColorList.h:102
static const FColor BlueViolet
Definition ColorList.h:21
static const FColor Violet
Definition ColorList.h:106
static const FColor MediumSpringGreen
Definition ColorList.h:70
static const FColor NavyBlue
Definition ColorList.h:75
static const FColor CoolCopper
Definition ColorList.h:28
static const FColor DarkTan
Definition ColorList.h:40
static const FColor Firebrick
Definition ColorList.h:46
static const FColor GreenYellow
Definition ColorList.h:52
static const FColor DarkOrchid
Definition ColorList.h:36
static const FColor Plum
Definition ColorList.h:86
static const FColor SemiSweetChocolate
Definition ColorList.h:92
static const FColor SpicyPink
Definition ColorList.h:97
static const FColor OldGold
Definition ColorList.h:80
static const FColor DarkTurquoise
Definition ColorList.h:41
static const FColor PaleGreen
Definition ColorList.h:84
static const FColor BrightGold
Definition ColorList.h:23
static const FColor CadetBlue
Definition ColorList.h:27
static const FColor BakerChocolate
Definition ColorList.h:20
static const FColor DarkGreen
Definition ColorList.h:33
static const FColor Coral
Definition ColorList.h:30
static const FColor OrangeRed
Definition ColorList.h:82
static const FColor HunterGreen
Definition ColorList.h:53
static const FColor VeryLightGrey
Definition ColorList.h:105
static const FColor MediumVioletRed
Definition ColorList.h:72
static const FColor Silver
Definition ColorList.h:94
static const FColor MediumSeaGreen
Definition ColorList.h:68
static const FColor DarkSlateGrey
Definition ColorList.h:39
static const FColor Khaki
Definition ColorList.h:55
static const FColor DustyRose
Definition ColorList.h:44
static const FColor Red
Definition ColorList.h:12
static const FColor Bronze
Definition ColorList.h:25
static const FColor MediumBlue
Definition ColorList.h:64
static const FColor Goldenrod
Definition ColorList.h:49
static const FColor Feldspar
Definition ColorList.h:45
static const FColor LightBlue
Definition ColorList.h:56
static const FColor Pink
Definition ColorList.h:85
static const FColor DimGrey
Definition ColorList.h:43
static const FColor Brown
Definition ColorList.h:24
static const FColor VioletRed
Definition ColorList.h:107
static const FColor Orchid
Definition ColorList.h:83
static const FColor LightWood
Definition ColorList.h:59
static const FColor SlateBlue
Definition ColorList.h:96
static const FColor DarkWood
Definition ColorList.h:42
static const FColor NeonPink
Definition ColorList.h:77
static const FColor MediumTurquoise
Definition ColorList.h:71
static const FColor MediumForestGreen
Definition ColorList.h:65
static const FColor Salmon
Definition ColorList.h:89
static const FColor Brass
Definition ColorList.h:22
static const FColor ForestGreen
Definition ColorList.h:47
static const FColor Sienna
Definition ColorList.h:93
static const FColor MediumAquamarine
Definition ColorList.h:63
static const FColor YellowGreen
Definition ColorList.h:109
static const FColor Green
Definition ColorList.h:13
static const FColor RichBlue
Definition ColorList.h:88
static const FColor MidnightBlue
Definition ColorList.h:74
static const FColor LightGrey
Definition ColorList.h:57
static const FColor SkyBlue
Definition ColorList.h:95
static const FColor NewMidnightBlue
Definition ColorList.h:78
static const FColor DarkBrown
Definition ColorList.h:32
static const FColor Gold
Definition ColorList.h:48
static const FColor Copper
Definition ColorList.h:29
void MoveToEmpty(ForElementType &Other)
int32 CalculateSlackGrow(int32 NumElements, int32 CurrentNumSlackElements, SIZE_T NumBytesPerElement) const
int32 CalculateSlack(int32 NumElements, int32 CurrentNumSlackElements, SIZE_T NumBytesPerElement) const
int32 CalculateSlackShrink(int32 NumElements, int32 CurrentNumSlackElements, SIZE_T NumBytesPerElement) const
SIZE_T GetAllocatedSize(int32 NumAllocatedElements, SIZE_T NumBytesPerElement) const
void ResizeAllocation(int32 PreviousNumElements, int32 NumElements, SIZE_T NumBytesPerElement)
ForElementType< FScriptContainerElement > ForAnyElementType
static int32 GCD(int32 A, int32 B)
Definition Sorting.h:171
FORCEINLINE FScriptContainerElement * GetAllocation() const
FORCEINLINE void ResizeAllocation(int32 PreviousNumElements, int32 NumElements, SIZE_T NumBytesPerElement)
FORCEINLINE int32 CalculateSlackGrow(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
SIZE_T GetAllocatedSize(int32 NumAllocatedElements, SIZE_T NumBytesPerElement) const
ForAnyElementType & operator=(const ForAnyElementType &)
ForAnyElementType(const ForAnyElementType &)
FORCEINLINE int32 CalculateSlackReserve(int32 NumElements, int32 NumBytesPerElement) const
FORCEINLINE int32 CalculateSlackShrink(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
FORCEINLINE void MoveToEmpty(ForAnyElementType &Other)
FORCEINLINE ElementType * GetAllocation() const
FNoncopyable(const FNoncopyable &)
FNoncopyable & operator=(const FNoncopyable &)
int32 FindPairIndex(const void *Key, const FScriptMapLayout &MapLayout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn)
Definition Map.h:1341
FScriptMap()
Definition Map.h:1285
FScriptSet Pairs
Definition Map.h:1407
FScriptMap(const FScriptMap &)
Definition Map.h:1429
void Empty(int32 Slack, const FScriptMapLayout &Layout)
Definition Map.h:1314
bool IsValidIndex(int32 Index) const
Definition Map.h:1289
uint8 * FindValue(const void *Key, const FScriptMapLayout &MapLayout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn)
Definition Map.h:1363
int32 AddUninitialized(const FScriptMapLayout &Layout)
Definition Map.h:1330
const void * GetData(int32 Index, const FScriptMapLayout &Layout) const
Definition Map.h:1309
void * GetData(int32 Index, const FScriptMapLayout &Layout)
Definition Map.h:1304
void Add(const void *Key, const void *Value, const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> KeyEqualityFn, TFunctionRef< void(void *)> KeyConstructAndAssignFn, TFunctionRef< void(void *)> ValueConstructAndAssignFn, TFunctionRef< void(void *)> ValueAssignFn, TFunctionRef< void(void *)> DestructKeyFn, TFunctionRef< void(void *)> DestructValueFn)
Definition Map.h:1376
void operator=(const FScriptMap &)
Definition Map.h:1430
static FScriptMapLayout GetScriptLayout(int32 KeySize, int32 KeyAlignment, int32 ValueSize, int32 ValueAlignment)
Definition Map.h:1272
int32 GetMaxIndex() const
Definition Map.h:1299
void Rehash(const FScriptMapLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition Map.h:1335
int32 Num() const
Definition Map.h:1294
void RemoveAt(int32 Index, const FScriptMapLayout &Layout)
Definition Map.h:1319
static void CheckConstraints()
Definition Map.h:1410
void Add(const void *Element, const FScriptSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn, TFunctionRef< void(void *)> ConstructFn, TFunctionRef< void(void *)> DestructFn)
Definition Set.h:1385
int32 Num() const
Definition Set.h:1246
FScriptSet()
Definition Set.h:1236
static void CheckConstraints()
Definition Set.h:1450
void * GetData(int32 Index, const FScriptSetLayout &Layout)
Definition Set.h:1256
void RemoveAt(int32 Index, const FScriptSetLayout &Layout)
Definition Set.h:1289
int32 FindIndex(const void *Element, const FScriptSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash, TFunctionRef< bool(const void *, const void *)> EqualityFn)
Definition Set.h:1362
static int32 & GetHashIndexRef(const void *Element, const FScriptSetLayout &Layout)
Definition Set.h:1444
void Rehash(const FScriptSetLayout &Layout, TFunctionRef< uint32(const void *)> GetKeyHash)
Definition Set.h:1319
static FScriptSetLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
Definition Set.h:1221
HashType Hash
Definition Set.h:1431
int32 AddUninitialized(const FScriptSetLayout &Layout)
Definition Set.h:1313
void Empty(int32 Slack, const FScriptSetLayout &Layout)
Definition Set.h:1266
int32 HashSize
Definition Set.h:1432
Allocator::HashAllocator::ForElementType< FSetElementId > HashType
Definition Set.h:1428
int32 GetMaxIndex() const
Definition Set.h:1251
static FSetElementId & GetHashNextIdRef(const void *Element, const FScriptSetLayout &Layout)
Definition Set.h:1439
FScriptSet(const FScriptSet &)
Definition Set.h:1473
const void * GetData(int32 Index, const FScriptSetLayout &Layout) const
Definition Set.h:1261
FScriptSparseArray Elements
Definition Set.h:1430
FDefaultSetAllocator Allocator
Definition Set.h:1427
void operator=(const FScriptSet &)
Definition Set.h:1474
FORCEINLINE FSetElementId & GetTypedHash(int32 HashIndex) const
Definition Set.h:1434
bool IsValidIndex(int32 Index) const
Definition Set.h:1241
bool IsValidIndex(int32 Index) const
int32 AddUninitialized(const FScriptSparseArrayLayout &Layout)
static FScriptSparseArrayLayout GetScriptLayout(int32 ElementSize, int32 ElementAlignment)
int32 GetMaxIndex() const
void Empty(int32 Slack, const FScriptSparseArrayLayout &Layout)
void * GetData(int32 Index, const FScriptSparseArrayLayout &Layout)
int32 Num() const
const void * GetData(int32 Index, const FScriptSparseArrayLayout &Layout) const
void RemoveAtUninitialized(const FScriptSparseArrayLayout &Layout, int32 Index, int32 Count=1)
friend class TSet
Definition Set.h:91
int32 Index
Definition Set.h:125
FORCEINLINE bool IsValidId() const
Definition Set.h:101
FORCEINLINE FSetElementId(int32 InIndex)
Definition Set.h:128
FORCEINLINE int32 AsInteger() const
Definition Set.h:112
FORCEINLINE FSetElementId()
Definition Set.h:96
FORCEINLINE operator int32() const
Definition Set.h:133
static FORCEINLINE FSetElementId FromInteger(int32 Integer)
Definition Set.h:117
FORCEINLINE friend bool operator==(const FSetElementId &A, const FSetElementId &B)
Definition Set.h:107
FORCEINLINE const DataType & GetCharArray() const
Definition FString.h:299
FORCEINLINE friend bool operator<=(const FString &Lhs, const CharType *Rhs)
Definition FString.h:844
FORCEINLINE void RemoveAt(int32 Index, int32 Count=1, bool bAllowShrinking=true)
Definition FString.h:435
FORCEINLINE friend FString operator+(FString &&Lhs, FString &&Rhs)
Definition FString.h:661
FORCEINLINE FString & Append(const FString &Text)
Definition FString.h:396
FORCEINLINE uint32 GetAllocatedSize() const
Definition FString.h:214
void ToUpperInline()
Definition FString.h:2097
FString TrimStart() const &
Definition FString.h:2296
int32 Find(const TCHAR *SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition FString.h:2027
FORCEINLINE friend FString operator/(const FString &Lhs, const FString &Rhs)
Definition FString.h:781
FORCEINLINE FString(const std::string &str)
Definition FString.h:129
int32 ParseIntoArray(TArray< FString > &OutArray, const TCHAR **DelimArray, int32 NumDelims, bool InCullEmpty=true) const
Definition FString.h:2702
bool IsNumeric() const
Definition FString.h:2541
FORCEINLINE friend FString operator+(const FString &Lhs, const TCHAR *Rhs)
Definition FString.h:700
FORCEINLINE friend bool operator!=(const FString &Lhs, const CharType *Rhs)
Definition FString.h:1049
FORCEINLINE int32 Find(const FString &SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart, int32 StartPosition=INDEX_NONE) const
Definition FString.h:1128
FORCEINLINE friend DataType::RangedForIteratorType end(FString &Str)
Definition FString.h:210
FORCEINLINE friend FString operator+(FString &&Lhs, const FString &Rhs)
Definition FString.h:635
FString(FString &&)=default
FORCEINLINE FString & operator=(const TCHAR *Other)
Definition FString.h:147
FORCEINLINE friend bool operator<(const CharType *Lhs, const FString &Rhs)
Definition FString.h:899
FString TrimEnd() const &
Definition FString.h:2320
void TrimStartInline()
Definition FString.h:2286
FString Replace(const TCHAR *From, const TCHAR *To, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2766
FORCEINLINE FString LeftChop(int32 Count) const
Definition FString.h:1081
FORCEINLINE bool FindChar(TCHAR InChar, int32 &Index) const
Definition FString.h:1169
FORCEINLINE friend bool operator!=(const FString &Lhs, const FString &Rhs)
Definition FString.h:1035
int32 ReplaceInline(const TCHAR *SearchText, const TCHAR *ReplacementText, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition FString.h:2805
FORCEINLINE FString Mid(int32 Start, int32 Count=INT_MAX) const
Definition FString.h:1099
FORCEINLINE FString(FString &&Other, int32 ExtraSlack)
Definition FString.h:87
static FORCEINLINE FString ConcatFStrings(typename TIdentity< LhsType >::Type Lhs, typename TIdentity< RhsType >::Type Rhs)
Definition FString.h:550
static FString Chr(TCHAR Ch)
Definition FString.h:2494
FORCEINLINE friend DataType::RangedForIteratorType begin(FString &Str)
Definition FString.h:208
FORCEINLINE friend FString operator+(const FString &Lhs, FString &&Rhs)
Definition FString.h:648
FORCEINLINE DataType & GetCharArray()
Definition FString.h:293
FORCEINLINE friend bool operator==(const FString &Lhs, const CharType *Rhs)
Definition FString.h:1008
static FORCEINLINE FString FromInt(int32 Num)
Definition FString.h:1548
FORCEINLINE FString & operator+=(const FString &Str)
Definition FString.h:500
FString & Append(const TCHAR *Text, int32 Count)
Definition FString.h:402
FORCEINLINE FString & operator/=(const FString &Str)
Definition FString.h:736
FString TrimStart() &&
Definition FString.h:2303
FORCEINLINE friend FString operator+(const FString &Lhs, const FString &Rhs)
Definition FString.h:622
FORCEINLINE int32 Compare(const FString &Other, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition FString.h:1240
FORCEINLINE friend bool operator<=(const CharType *Lhs, const FString &Rhs)
Definition FString.h:858
FORCEINLINE friend bool operator==(const FString &Lhs, const FString &Rhs)
Definition FString.h:994
FString TrimStartAndEnd() &&
Definition FString.h:2279
FORCEINLINE friend FString operator+(const TCHAR *Lhs, const FString &Rhs)
Definition FString.h:674
FORCEINLINE TIterator CreateIterator()
Definition FString.h:192
FORCEINLINE void Reserve(const uint32 CharacterCount)
Definition FString.h:1542
FString ReplaceQuotesWithEscapedQuotes() const
Definition FString.h:2880
FString & operator=(FString &&)=default
static int32 CullArray(TArray< FString > *InArray)
Definition FString.h:2361
bool MatchesWildcard(const FString &Wildcard, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2585
FString Reverse() const
Definition FString.h:2368
FString ConvertTabsToSpaces(const int32 InSpacesPerTab)
Definition FString.h:2980
bool StartsWith(const TCHAR *InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2131
FORCEINLINE friend bool operator!=(const CharType *Lhs, const FString &Rhs)
Definition FString.h:1063
static FORCEINLINE FString ConcatTCHARsToFString(const TCHAR *Lhs, typename TIdentity< RhsType >::Type Rhs)
Definition FString.h:569
FORCEINLINE FString Left(int32 Count) const
Definition FString.h:1075
static bool ToHexBlob(const FString &Source, uint8 *DestBuffer, const uint32 DestSize)
Definition FString.h:2471
int32 ParseIntoArrayLines(TArray< FString > &OutArray, bool InCullEmpty=true) const
Definition FString.h:2684
FORCEINLINE bool FindLastChar(TCHAR InChar, int32 &Index) const
Definition FString.h:1181
std::string ToString() const
Convert FString to std::string.
Definition FString.h:1611
FString TrimQuotes(bool *bQuotesRemoved=nullptr) const
Definition FString.h:2334
FORCEINLINE FString & operator+=(const TCHAR *Str)
Definition FString.h:347
void AppendInt(int32 InNum)
Definition FString.h:2415
FORCEINLINE const TCHAR * operator*() const
Definition FString.h:282
FORCEINLINE friend FString operator/(FString &&Lhs, const TCHAR *Rhs)
Definition FString.h:765
FString()=default
FORCEINLINE friend FString operator/(FString &&Lhs, const FString &Rhs)
Definition FString.h:797
FString RightPad(int32 ChCount) const
Definition FString.h:2527
FORCEINLINE friend TEnableIf< TIsCharType< CharType >::Value, FString >::Type operator+(const FString &Lhs, CharType Rhs)
Definition FString.h:519
FORCEINLINE friend DataType::RangedForConstIteratorType end(const FString &Str)
Definition FString.h:211
void PathAppend(const TCHAR *Str, int32 StrLength)
Definition FString.h:2234
FORCEINLINE bool Contains(const FString &SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition FString.h:1156
FORCEINLINE FString(const CharType *Src, typename TEnableIf< TIsCharType< CharType >::Value >::Type *Dummy=nullptr)
Definition FString.h:98
void TrimEndInline()
Definition FString.h:2310
FORCEINLINE FString RightChop(int32 Count) const
Definition FString.h:1093
FString TrimEnd() &&
Definition FString.h:2327
bool EndsWith(const FString &InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2180
FString ToLower() &&
Definition FString.h:2115
static FString ChrN(int32 NumCharacters, TCHAR Char)
Definition FString.h:2501
static FORCEINLINE FString ConcatFStringToTCHARs(typename TIdentity< LhsType >::Type Lhs, const TCHAR *Rhs)
Definition FString.h:596
FORCEINLINE friend FString operator+(const TCHAR *Lhs, FString &&Rhs)
Definition FString.h:687
FORCEINLINE TConstIterator CreateConstIterator() const
Definition FString.h:198
bool StartsWith(const FString &InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2143
FString ToUpper() const &
Definition FString.h:2084
FString(const FString &)=default
static FString FormatAsNumber(int32 InNumber)
Definition FString.h:2395
FORCEINLINE bool Equals(const FString &Other, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition FString.h:1221
FORCEINLINE bool IsValidIndex(int32 Index) const
Definition FString.h:272
FORCEINLINE friend FString operator/(const FString &Lhs, const TCHAR *Rhs)
Definition FString.h:749
void ToLowerInline()
Definition FString.h:2121
TArray< TCHAR > DataType
Definition FString.h:58
DataType Data
Definition FString.h:59
FString ToUpper() &&
Definition FString.h:2091
void TrimStartAndEndInline()
Definition FString.h:2266
int32 ParseIntoArray(TArray< FString > &OutArray, const TCHAR *pchDelim, bool InCullEmpty=true) const
Definition FString.h:2560
bool EndsWith(const TCHAR *InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase) const
Definition FString.h:2155
FORCEINLINE FString(int32 InCount, const TCHAR *InSrc)
Definition FString.h:116
FORCEINLINE friend DataType::RangedForConstIteratorType begin(const FString &Str)
Definition FString.h:209
FORCEINLINE friend bool operator>(const FString &Lhs, const CharType *Rhs)
Definition FString.h:967
FString ReplaceCharWithEscapedChar(const TArray< TCHAR > *Chars=nullptr) const
Definition FString.h:2934
static bool ToBlob(const FString &Source, uint8 *DestBuffer, const uint32 DestSize)
Definition FString.h:2448
FORCEINLINE TCHAR & operator[](int32 Index)
Definition FString.h:169
FORCEINLINE void InsertAt(int32 Index, TCHAR Character)
Definition FString.h:440
FORCEINLINE friend bool operator>=(const CharType *Lhs, const FString &Rhs)
Definition FString.h:940
FORCEINLINE friend FString operator/(const TCHAR *Lhs, const FString &Rhs)
Definition FString.h:813
FORCEINLINE void AppendChars(const TCHAR *Array, int32 Count)
Definition FString.h:322
FORCEINLINE friend TEnableIf< TIsCharType< CharType >::Value, FString >::Type operator+(FString &&Lhs, CharType Rhs)
Definition FString.h:538
FORCEINLINE void Shrink()
Definition FString.h:260
FORCEINLINE friend bool operator>(const CharType *Lhs, const FString &Rhs)
Definition FString.h:981
void ReverseString()
Definition FString.h:2375
FORCEINLINE bool IsEmpty() const
Definition FString.h:241
FORCEINLINE FString Right(int32 Count) const
Definition FString.h:1087
FORCEINLINE void InsertAt(int32 Index, const FString &Characters)
Definition FString.h:455
FORCEINLINE bool Contains(const TCHAR *SubStr, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition FString.h:1142
FORCEINLINE friend bool operator>(const FString &Lhs, const FString &Rhs)
Definition FString.h:953
FORCEINLINE friend bool operator==(const CharType *Lhs, const FString &Rhs)
Definition FString.h:1022
FORCEINLINE friend bool operator<(const FString &Lhs, const CharType *Rhs)
Definition FString.h:885
static FString Join(const TArray< T, Allocator > &Array, const TCHAR *Separator)
Definition FString.h:1587
bool RemoveFromEnd(const FString &InSuffix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition FString.h:2212
FORCEINLINE TEnableIf< TIsCharType< CharType >::Value, FString & >::Type operator+=(CharType InChar)
Definition FString.h:363
FORCEINLINE const TCHAR & operator[](int32 Index) const
Definition FString.h:180
FORCEINLINE friend bool operator<(const FString &Lhs, const FString &Rhs)
Definition FString.h:871
FORCEINLINE friend bool operator>=(const FString &Lhs, const FString &Rhs)
Definition FString.h:912
FString ToLower() const &
Definition FString.h:2108
int32 ParseIntoArrayWS(TArray< FString > &OutArray, const TCHAR *pchExtraDelim=nullptr, bool InCullEmpty=true) const
Definition FString.h:2660
bool Split(const FString &InS, FString *LeftS, FString *RightS, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase, ESearchDir::Type SearchDir=ESearchDir::FromStart) const
Definition FString.h:1262
static FString Format(const T *format, Args &&... args)
Formats text using fmt::format.
Definition FString.h:1633
FString LeftPad(int32 ChCount) const
Definition FString.h:2513
FORCEINLINE int32 FindLastCharByPredicate(Predicate Pred) const
Definition FString.h:1209
FORCEINLINE void Reset(int32 NewReservedSize=0)
Definition FString.h:251
FORCEINLINE void Empty(int32 Slack=0)
Definition FString.h:231
FORCEINLINE int32 Len() const
Definition FString.h:1069
FORCEINLINE int32 FindLastCharByPredicate(Predicate Pred, int32 Count) const
Definition FString.h:1195
void TrimToNullTerminator()
Definition FString.h:2015
bool RemoveFromStart(const FString &InPrefix, ESearchCase::Type SearchCase=ESearchCase::IgnoreCase)
Definition FString.h:2196
FORCEINLINE FString & AppendChar(const TCHAR InChar)
Definition FString.h:390
FORCEINLINE friend bool operator>=(const FString &Lhs, const CharType *Rhs)
Definition FString.h:926
FORCEINLINE friend bool operator<=(const FString &Lhs, const FString &Rhs)
Definition FString.h:830
FORCEINLINE void CheckInvariants() const
Definition FString.h:222
FORCEINLINE friend FString operator+(FString &&Lhs, const TCHAR *Rhs)
Definition FString.h:713
FString ReplaceEscapedCharWithChar(const TArray< TCHAR > *Chars=nullptr) const
Definition FString.h:2956
FORCEINLINE FString(const FString &Other, int32 ExtraSlack)
Definition FString.h:76
FORCEINLINE FString & operator/=(const TCHAR *Str)
Definition FString.h:724
FString & operator=(const FString &)=default
FString TrimStartAndEnd() const &
Definition FString.h:2272
int32 GetAlignment() const
int32 AddMember(int32 MemberSize, int32 MemberAlignment)
int32 GetSize() const
T * value_
Definition Fields.h:82
FieldArray & operator=(const T &other)=delete
T * operator()()
Definition Fields.h:69
static size_t GetSize()
Definition Fields.h:76
Definition Logger.h:9
Log()=default
~Log()=default
std::shared_ptr< spdlog::logger > logger_
Definition Logger.h:41
Log(Log &&)=delete
Log & operator=(Log &&)=delete
static std::shared_ptr< spdlog::logger > & GetLog()
Definition Logger.h:22
Log & operator=(const Log &)=delete
Log(const Log &)=delete
static Log & Get()
Definition Logger.h:16
FORCEINLINE int32 CalculateSlackReserve(int32 NumElements, int32 NumBytesPerElement) const
ForAnyElementType(const ForAnyElementType &)
SIZE_T GetAllocatedSize(int32 NumAllocatedElements, SIZE_T NumBytesPerElement) const
FORCEINLINE int32 CalculateSlackShrink(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
FORCEINLINE void MoveToEmpty(ForAnyElementType &Other)
void ResizeAllocation(int32 PreviousNumElements, int32 NumElements, SIZE_T NumBytesPerElement)
FORCEINLINE FScriptContainerElement * GetAllocation() const
ForAnyElementType & operator=(const ForAnyElementType &)
FORCEINLINE int32 CalculateSlackGrow(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
FORCEINLINE ElementType * GetAllocation() const
~TArray()
Definition TArray.h:517
FORCEINLINE bool Find(const ElementType &Item, int32 &Index) const
Definition TArray.h:760
void Sort()
Definition TArray.h:1964
void RemoveAtImpl(int32 Index, int32 Count, bool bAllowShrinking)
Definition TArray.h:1238
TArray & operator=(TArray &&Other)
Definition TArray.h:506
TCheckedPointerIterator< const ElementType > RangedForConstIteratorType
Definition TArray.h:1930
int32 AddUniqueImpl(ArgsType &&Args)
Definition TArray.h:1609
InAllocator Allocator
Definition TArray.h:275
TArray & operator=(std::initializer_list< InElementType > InitList)
Definition TArray.h:349
void SetNumUninitialized(int32 NewNum, bool bAllowShrinking=true)
Definition TArray.h:1376
FORCEINLINE int32 Num() const
Definition TArray.h:611
int32 FindLastByPredicate(Predicate Pred, int32 Count) const
Definition TArray.h:827
TIterator CreateIterator()
Definition TArray.h:1913
int32 AddZeroed(int32 Count=1)
Definition TArray.h:1578
FORCEINLINE int32 Emplace(ArgsType &&... Args)
Definition TArray.h:1526
FORCEINLINE int32 Max() const
Definition TArray.h:622
ElementAllocatorType AllocatorInstance
Definition TArray.h:2107
FORCENOINLINE void ResizeTo(int32 NewMax)
Definition TArray.h:2047
InElementType ElementType
Definition TArray.h:274
int32 RemoveAll(const PREDICATE_CLASS &Predicate)
Definition TArray.h:1726
void SetNumZeroed(int32 NewNum, bool bAllowShrinking=true)
Definition TArray.h:1359
void InsertZeroed(int32 Index, int32 Count=1)
Definition TArray.h:1102
static FORCEINLINE TEnableIf<!UE4Array_Private::TCanMoveTArrayPointersBetweenArrayTypes< FromArrayType, ToArrayType >::Value >::Type MoveOrCopy(ToArrayType &ToArray, FromArrayType &FromArray, int32 PrevMax)
Definition TArray.h:423
FORCEINLINE const ElementType & Last(int32 IndexFromTheEnd=0) const
Definition TArray.h:732
TIndexedContainerIterator< TArray, ElementType, int32 > TIterator
Definition TArray.h:1905
FORCEINLINE bool operator!=(const TArray &OtherArray) const
Definition TArray.h:1036
TCheckedPointerIterator< ElementType > RangedForIteratorType
Definition TArray.h:1929
TArray & operator+=(TArray &&Other)
Definition TArray.h:1490
static FORCEINLINE TEnableIf< UE4Array_Private::TCanMoveTArrayPointersBetweenArrayTypes< FromArrayType, ToArrayType >::Value >::Type MoveOrCopy(ToArrayType &ToArray, FromArrayType &FromArray, int32 PrevMax)
Definition TArray.h:402
void Init(const ElementType &Element, int32 Number)
Definition TArray.h:1662
FORCEINLINE friend RangedForIteratorType end(TArray &Array)
Definition TArray.h:1945
FORCEINLINE bool ContainsByPredicate(Predicate Pred) const
Definition TArray.h:1012
FORCEINLINE void CheckAddress(const ElementType *Addr) const
Definition TArray.h:1193
TIndexedContainerIterator< const TArray, const ElementType, int32 > TConstIterator
Definition TArray.h:1906
FORCEINLINE void CheckInvariants() const
Definition TArray.h:573
FORCEINLINE TArray(const TArray &Other, int32 ExtraSlack)
Definition TArray.h:338
FORCEINLINE void RemoveAt(int32 Index, CountType Count, bool bAllowShrinking=true)
Definition TArray.h:1290
void StableSort(const PREDICATE_CLASS &Predicate)
Definition TArray.h:2011
FORCEINLINE void Append(std::initializer_list< ElementType > InitList)
Definition TArray.h:1474
TArray & operator+=(const TArray &Other)
Definition TArray.h:1502
FORCEINLINE int32 Add(const ElementType &Item)
Definition TArray.h:1564
FORCEINLINE ElementType & Last(int32 IndexFromTheEnd=0)
Definition TArray.h:718
FORCENOINLINE void ResizeGrow(int32 OldNum)
Definition TArray.h:2032
FORCEINLINE void EmplaceAt(int32 Index, ArgsType &&... Args)
Definition TArray.h:1540
FORCEINLINE const ElementType & operator[](int32 Index) const
Definition TArray.h:645
TArray< ElementType > FilterByPredicate(Predicate Pred) const
Definition TArray.h:972
FORCEINLINE friend RangedForIteratorType begin(TArray &Array)
Definition TArray.h:1943
void Append(TArray< OtherElementType, OtherAllocator > &&Source)
Definition TArray.h:1433
FORCENOINLINE void ResizeForCopy(int32 NewMax, int32 PrevMax)
Definition TArray.h:2059
FORCEINLINE void RemoveAtSwap(int32 Index)
Definition TArray.h:1849
int32 Insert(const ElementType *Ptr, int32 Count, int32 Index)
Definition TArray.h:1175
FORCEINLINE int32 GetSlack() const
Definition TArray.h:564
FORCEINLINE int32 AddUnique(const ElementType &Item)
Definition TArray.h:1640
int32 Find(const ElementType &Item) const
Definition TArray.h:773
void CopyToEmpty(const OtherElementType *OtherData, int32 OtherNum, int32 PrevMax, int32 ExtraSlack)
Definition TArray.h:2084
FORCEINLINE void Shrink()
Definition TArray.h:743
void SetNumUnsafeInternal(int32 NewNum)
Definition TArray.h:1392
FORCEINLINE const ElementType & Top() const
Definition TArray.h:707
static FORCEINLINE TEnableIf< UE4Array_Private::TCanMoveTArrayPointersBetweenArrayTypes< FromArrayType, ToArrayType >::Value >::Type MoveOrCopyWithSlack(ToArrayType &ToArray, FromArrayType &FromArray, int32 PrevMax, int32 ExtraSlack)
Definition TArray.h:439
int32 RemoveSwap(const ElementType &Item)
Definition TArray.h:1822
int32 IndexOfByKey(const KeyType &Key) const
Definition TArray.h:861
void Append(const TArray< OtherElementType, OtherAllocator > &Source)
Definition TArray.h:1407
FORCEINLINE TArray(const TArray &Other)
Definition TArray.h:326
FORCEINLINE ElementType & Top()
Definition TArray.h:694
FORCEINLINE friend RangedForConstIteratorType end(const TArray &Array)
Definition TArray.h:1946
TArray(std::initializer_list< InElementType > InitList)
Definition TArray.h:302
FORCEINLINE bool FindLast(const ElementType &Item, int32 &Index) const
Definition TArray.h:794
int32 ArrayMax
Definition TArray.h:2109
FORCEINLINE int32 AddUnique(ElementType &&Item)
Definition TArray.h:1631
FORCEINLINE friend RangedForConstIteratorType begin(const TArray &Array)
Definition TArray.h:1944
int32 Insert(const ElementType &Item, int32 Index)
Definition TArray.h:1226
FORCEINLINE uint32 GetTypeSize() const
Definition TArray.h:543
TArray & operator+=(std::initializer_list< ElementType > InitList)
Definition TArray.h:1513
void Append(const ElementType *Ptr, int32 Count)
Definition TArray.h:1460
static FORCEINLINE TEnableIf<!UE4Array_Private::TCanMoveTArrayPointersBetweenArrayTypes< FromArrayType, ToArrayType >::Value >::Type MoveOrCopyWithSlack(ToArrayType &ToArray, FromArrayType &FromArray, int32 PrevMax, int32 ExtraSlack)
Definition TArray.h:457
int32 Insert(ElementType &&Item, int32 Index)
Definition TArray.h:1207
FORCEINLINE TArray(TArray &&Other)
Definition TArray.h:468
FORCENOINLINE void ResizeShrink()
Definition TArray.h:2037
FORCEINLINE void RangeCheck(int32 Index) const
Definition TArray.h:583
void Reset(int32 NewSize=0)
Definition TArray.h:1302
bool Contains(const ComparisonType &Item) const
Definition TArray.h:992
TArray(TArray< OtherElementType, Allocator > &&Other, int32 ExtraSlack)
Definition TArray.h:492
FORCEINLINE void RemoveAt(int32 Index)
Definition TArray.h:1276
int32 RemoveSingle(const ElementType &Item)
Definition TArray.h:1679
int32 FindLast(const ElementType &Item) const
Definition TArray.h:806
void RemoveAllSwap(const PREDICATE_CLASS &Predicate, bool bAllowShrinking=true)
Definition TArray.h:1774
FORCEINLINE ElementType & operator[](int32 Index)
Definition TArray.h:632
TArray & operator=(const TArray &Other)
Definition TArray.h:381
int32 Remove(const ElementType &Item)
Definition TArray.h:1709
bool operator==(const TArray &OtherArray) const
Definition TArray.h:1023
FORCEINLINE const ElementType * FindByPredicate(Predicate Pred) const
Definition TArray.h:938
FORCEINLINE TArray(const ElementType *Ptr, int32 Count)
Definition TArray.h:292
FORCEINLINE ElementType Pop(bool bAllowShrinking=true)
Definition TArray.h:657
FORCEINLINE int32 FindLastByPredicate(Predicate Pred) const
Definition TArray.h:848
FORCEINLINE TArray()
Definition TArray.h:280
void Empty(int32 Slack=0)
Definition TArray.h:1321
TChooseClass< Allocator::NeedsElementType, typenameAllocator::templateForElementType< ElementType >, typenameAllocator::ForAnyElementType >::Result ElementAllocatorType
Definition TArray.h:2105
void SetNum(int32 NewNum, bool bAllowShrinking=true)
Definition TArray.h:1340
int32 ArrayNum
Definition TArray.h:2108
FORCEINLINE const ElementType * FindByKey(const KeyType &Key) const
Definition TArray.h:903
FORCEINLINE void Push(const ElementType &Item)
Definition TArray.h:683
TConstIterator CreateConstIterator() const
Definition TArray.h:1923
FORCEINLINE void Reserve(int32 Number)
Definition TArray.h:1648
void InsertDefaulted(int32 Index, int32 Count=1)
Definition TArray.h:1116
FORCEINLINE int32 AddUninitialized(int32 Count=1)
Definition TArray.h:1051
int32 RemoveSingleSwap(const ElementType &Item, bool bAllowShrinking=true)
Definition TArray.h:1798
FORCEINLINE TArray(TArray< OtherElementType, OtherAllocator > &&Other)
Definition TArray.h:479
FORCEINLINE ElementType * GetData() const
Definition TArray.h:533
FORCEINLINE bool IsValidIndex(int32 Index) const
Definition TArray.h:600
int32 Insert(std::initializer_list< ElementType > InitList, const int32 InIndex)
Definition TArray.h:1129
FORCEINLINE uint32 GetAllocatedSize(void) const
Definition TArray.h:554
int32 Insert(const TArray< ElementType > &Items, const int32 InIndex)
Definition TArray.h:1150
FORCEINLINE int32 Add(ElementType &&Item)
Definition TArray.h:1555
FORCEINLINE void RemoveAtSwap(int32 Index, CountType Count, bool bAllowShrinking=true)
Definition TArray.h:1867
TArray & operator=(const TArray< ElementType, OtherAllocator > &Other)
Definition TArray.h:368
ElementType * FindByPredicate(Predicate Pred)
Definition TArray.h:950
FORCEINLINE TArray(const TArray< OtherElementType, OtherAllocator > &Other)
Definition TArray.h:316
void InsertUninitialized(int32 Index, int32 Count=1)
Definition TArray.h:1076
ElementType * FindByKey(const KeyType &Key)
Definition TArray.h:917
void Sort(const PREDICATE_CLASS &Predicate)
Definition TArray.h:1980
int32 AddDefaulted(int32 Count=1)
Definition TArray.h:1593
void RemoveAtSwapImpl(int32 Index, int32 Count=1, bool bAllowShrinking=true)
Definition TArray.h:1873
void StableSort()
Definition TArray.h:1994
FORCEINLINE void Push(ElementType &&Item)
Definition TArray.h:670
int32 IndexOfByPredicate(Predicate Pred) const
Definition TArray.h:881
FORCEINLINE TEnumAsByte(TEnum InValue)
Definition EnumAsByte.h:40
TEnum GetValue() const
Definition EnumAsByte.h:122
FORCEINLINE TEnumAsByte(int32 InValue)
Definition EnumAsByte.h:49
FORCEINLINE TEnumAsByte & operator=(TEnum InValue)
Definition EnumAsByte.h:81
FORCEINLINE TEnumAsByte(const TEnumAsByte &InValue)
Definition EnumAsByte.h:31
FORCEINLINE TEnumAsByte(uint8 InValue)
Definition EnumAsByte.h:58
TEnum EnumType
Definition EnumAsByte.h:21
bool operator==(TEnum InValue) const
Definition EnumAsByte.h:93
operator TEnum() const
Definition EnumAsByte.h:110
FORCEINLINE TEnumAsByte()
Definition EnumAsByte.h:24
TEnumAsByte_EnumClass< TIsEnumClass< TEnum >::Value > Check
Definition EnumAsByte.h:18
FORCEINLINE TEnumAsByte & operator=(TEnumAsByte InValue)
Definition EnumAsByte.h:70
FORCEINLINE friend uint32 GetTypeHash(const TEnumAsByte &Enum)
Definition EnumAsByte.h:133
bool operator==(TEnumAsByte InValue) const
Definition EnumAsByte.h:104
ForElementType & operator=(const ForElementType &)
TTypeCompatibleBytes< ElementType > InlineData[NumInlineElements]
FORCEINLINE ElementType * GetAllocation() const
FORCEINLINE void MoveToEmpty(ForElementType &Other)
FORCEINLINE int32 CalculateSlackReserve(int32 NumElements, SIZE_T NumBytesPerElement) const
SIZE_T GetAllocatedSize(int32 NumAllocatedElements, SIZE_T NumBytesPerElement) const
void ResizeAllocation(int32 PreviousNumElements, int32 NumElements, SIZE_T NumBytesPerElement)
FORCEINLINE int32 CalculateSlackGrow(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
ForElementType(const ForElementType &)
FORCEINLINE int32 CalculateSlackShrink(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
TFunction(const TFunction &Other)
Definition Function.h:581
TFunction(FunctorType &&InFunc)
Definition Function.h:556
UE4Function_Private::FFunctionStorage Storage
Definition Function.h:658
FORCEINLINE operator bool() const
Definition Function.h:643
TFunction(TYPE_OF_NULLPTR=nullptr)
Definition Function.h:546
UE4Function_Private::TFunctionRefBase< TFunction< FuncType >, FuncType > Super
Definition Function.h:540
TFunction & operator=(TYPE_OF_NULLPTR)
Definition Function.h:617
void * GetPtr() const
Definition Function.h:652
TFunction(TFunction &&Other)
Definition Function.h:598
~TFunctionRef()=default
TFunctionRef(const FunctorType &Functor)
Definition Function.h:404
void CopyAndReseat(const TFunctionRef &Other, void *Functor)
Definition Function.h:480
void * GetPtr() const
Definition Function.h:489
void Set(FunctorType *Functor)
Definition Function.h:467
TFunctionRef(FunctorType &Functor)
Definition Function.h:391
void * Ptr
Definition Function.h:495
UE4Function_Private::TFunctionRefBase< TFunctionRef< FuncType >, FuncType > Super
Definition Function.h:384
TFunctionRef & operator=(const TFunctionRef &) const =delete
TFunctionRef(FunctionType *Function)
Definition Function.h:417
TFunctionRef(const TFunctionRef &Other)
Definition Function.h:430
FORCEINLINE friend bool operator!=(const TIndexedContainerIterator &Lhs, const TIndexedContainerIterator &Rhs)
Definition TArray.h:130
ElementType * operator->() const
Definition TArray.h:93
FORCEINLINE friend bool operator==(const TIndexedContainerIterator &Lhs, const TIndexedContainerIterator &Rhs)
Definition TArray.h:129
IndexType GetIndex() const
Definition TArray.h:105
TIndexedContainerIterator operator+(int32 Offset) const
Definition TArray.h:71
TIndexedContainerIterator operator++(int)
Definition TArray.h:44
TIndexedContainerIterator & operator--()
Definition TArray.h:52
TIndexedContainerIterator & operator-=(int32 Offset)
Definition TArray.h:77
FORCEINLINE operator bool() const
Definition TArray.h:99
TIndexedContainerIterator(ContainerType &InContainer, IndexType StartIndex=0)
Definition TArray.h:32
ContainerType & Container
Definition TArray.h:134
TIndexedContainerIterator & operator++()
Definition TArray.h:39
TIndexedContainerIterator & operator+=(int32 Offset)
Definition TArray.h:65
TIndexedContainerIterator operator--(int)
Definition TArray.h:57
TIndexedContainerIterator operator-(int32 Offset) const
Definition TArray.h:82
ElementType & operator*() const
Definition TArray.h:88
FORCEINLINE int32 CalculateSlackReserve(int32 NumElements, SIZE_T NumBytesPerElement) const
FORCEINLINE int32 CalculateSlackShrink(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
FORCEINLINE ElementType * GetAllocation() const
TTypeCompatibleBytes< ElementType > InlineData[NumInlineElements]
ForElementType(const ForElementType &)
FORCEINLINE void MoveToEmpty(ForElementType &Other)
void ResizeAllocation(int32 PreviousNumElements, int32 NumElements, SIZE_T NumBytesPerElement)
ForElementType & operator=(const ForElementType &)
SIZE_T GetAllocatedSize(int32 NumAllocatedElements, SIZE_T NumBytesPerElement) const
FORCEINLINE int32 CalculateSlackGrow(int32 NumElements, int32 NumAllocatedElements, int32 NumBytesPerElement) const
SecondaryAllocator::template ForElementType< ElementType > SecondaryData
TInlineSparseArrayAllocator< NumInlineElements, typename SecondaryAllocator::SparseArrayAllocator > SparseArrayAllocator
static FORCEINLINE uint32 GetNumberOfHashBuckets(uint32 NumHashedElements)
TInlineAllocator< NumInlineHashBuckets, typename SecondaryAllocator::HashAllocator > HashAllocator
TInlineAllocator< NumInlineElements, typename SecondaryAllocator::ElementAllocator > ElementAllocator
TInlineAllocator< InlineBitArrayDWORDs, typename SecondaryAllocator::BitArrayAllocator > BitArrayAllocator
static void Rotate(T *First, const int32 From, const int32 To, const int32 Amount)
Definition Sorting.h:202
TRValueToLValueReference< KeyInitType >::Type Key
Definition Map.h:57
FORCEINLINE TKeyInitializer(KeyInitType InKey)
Definition Map.h:60
operator TPair< KeyType, ValueType >() const
Definition Map.h:65
TChooseClass< bConst, constKeyType, KeyType >::Result ItKeyType
Definition Map.h:540
TChooseClass< bConst, constTMapBase, TMapBase >::Result MapType
Definition Map.h:539
FORCEINLINE friend bool operator==(const TBaseIterator &Lhs, const TBaseIterator &Rhs)
Definition Map.h:567
FORCEINLINE TBaseIterator(const PairItType &InElementIt)
Definition Map.h:545
FORCEINLINE bool operator!() const
Definition Map.h:562
FORCEINLINE ItKeyType & Key() const
Definition Map.h:570
FORCEINLINE PairType & operator*() const
Definition Map.h:573
PairItType PairIt
Definition Map.h:577
FORCEINLINE friend bool operator!=(const TBaseIterator &Lhs, const TBaseIterator &Rhs)
Definition Map.h:568
FORCEINLINE TBaseIterator & operator++()
Definition Map.h:550
FORCEINLINE ItValueType & Value() const
Definition Map.h:571
TChooseClass< bConst, typenameTChooseClass< bRangedFor, typenameElementSetType::TRangedForConstIterator, typenameElementSetType::TConstIterator >::Result, typenameTChooseClass< bRangedFor, typenameElementSetType::TRangedForIterator, typenameElementSetType::TIterator >::Result >::Result PairItType
Definition Map.h:537
FORCEINLINE PairType * operator->() const
Definition Map.h:574
FORCEINLINE operator bool() const
Definition Map.h:557
TChooseClass< bConst, constValueType, ValueType >::Result ItValueType
Definition Map.h:541
TChooseClass< bConst, consttypenameElementSetType::ElementType, typenameElementSetType::ElementType >::Result PairType
Definition Map.h:542
TChooseClass< bConst, constValueType, ValueType >::Result ItValueType
Definition Map.h:587
FORCEINLINE TBaseKeyIterator(const SetItType &InSetIt)
Definition Map.h:591
FORCEINLINE operator bool() const
Definition Map.h:603
TChooseClass< bConst, constKeyType, KeyType >::Result ItKeyType
Definition Map.h:586
FORCEINLINE ItKeyType & Key() const
Definition Map.h:613
FORCEINLINE bool operator!() const
Definition Map.h:608
FORCEINLINE ItValueType & Value() const
Definition Map.h:614
FORCEINLINE TBaseKeyIterator & operator++()
Definition Map.h:596
TChooseClass< bConst, typenameElementSetType::TConstKeyIterator, typenameElementSetType::TKeyIterator >::Result SetItType
Definition Map.h:585
FORCEINLINE TConstIterator(const TMapBase &InMap)
Definition Map.h:665
FORCEINLINE TConstKeyIterator(const TMapBase &InMap, KeyInitType InKey)
Definition Map.h:678
FORCEINLINE ~TIterator()
Definition Map.h:640
TMapBase & Map
Definition Map.h:656
bool bRequiresRehashOnRemoval
Definition Map.h:658
bool bElementsHaveBeenRemoved
Definition Map.h:657
FORCEINLINE void RemoveCurrent()
Definition Map.h:649
FORCEINLINE TIterator(TMapBase &InMap, bool bInRequiresRehashOnRemoval=false)
Definition Map.h:631
FORCEINLINE void RemoveCurrent()
Definition Map.h:692
FORCEINLINE TKeyIterator(TMapBase &InMap, KeyInitType InKey)
Definition Map.h:687
FORCEINLINE ValueType & FindOrAddImpl(ArgType &&Arg)
Definition Map.h:403
FORCEINLINE friend TRangedForIterator end(TMapBase &MapBase)
Definition Map.h:729
FORCEINLINE bool Contains(KeyConstPointerType Key) const
Definition Map.h:492
TSet< ElementType, KeyFuncs, SetAllocator > ElementSetType
Definition Map.h:526
const KeyType * FindKey(ValueInitType Value) const
Definition Map.h:360
FORCEINLINE ValueType * Find(KeyConstPointerType Key)
Definition Map.h:379
FORCEINLINE ValueType & Add(KeyType &&InKey, ValueType &&InValue)
Definition Map.h:299
ElementSetType Pairs
Definition Map.h:621
void GenerateValueArray(TArray< ValueType, Allocator > &OutArray) const
Definition Map.h:516
FORCEINLINE ValueType FindRef(KeyConstPointerType Key) const
Definition Map.h:476
void GenerateKeyArray(TArray< KeyType, Allocator > &OutArray) const
Definition Map.h:502
FORCEINLINE const ValueType * Find(KeyConstPointerType Key) const
Definition Map.h:388
FORCEINLINE ValueType & Add(const KeyType &InKey)
Definition Map.h:307
friend bool LegacyCompareEqual(const TMapBase &A, const TMapBase &B)
Definition Map.h:166
FORCEINLINE TIterator CreateIterator()
Definition Map.h:699
FORCEINLINE friend TRangedForConstIterator end(const TMapBase &MapBase)
Definition Map.h:730
FORCEINLINE void Shrink()
Definition Map.h:229
FORCEINLINE void Empty(int32 ExpectedNumElements=0)
Definition Map.h:217
FORCEINLINE void Reserve(int32 Number)
Definition Map.h:247
TMapBase & operator=(const TMapBase &)=default
FORCEINLINE TConstKeyIterator CreateConstKeyIterator(KeyInitType InKey) const
Definition Map.h:717
TMapBase(const TMapBase &)=default
TMapBase(TMapBase &&)=default
TTypeTraits< KeyType >::ConstInitType KeyInitType
Definition Map.h:112
FORCEINLINE ValueType & FindOrAdd(KeyType &&Key)
Definition Map.h:421
FORCEINLINE TConstIterator CreateConstIterator() const
Definition Map.h:705
FORCEINLINE int32 Remove(KeyConstPointerType InKey)
Definition Map.h:344
TTypeTraits< ValueType >::ConstInitType ValueInitType
Definition Map.h:113
FORCEINLINE ValueType & Add(KeyType &&InKey)
Definition Map.h:308
TTypeTraits< KeyType >::ConstPointerType KeyConstPointerType
Definition Map.h:111
TMapBase & operator=(const TMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:158
FORCEINLINE TKeyIterator CreateKeyIterator(KeyInitType InKey)
Definition Map.h:711
ValueType & Emplace(InitKeyType &&InKey)
Definition Map.h:331
int32 GetKeys(TArray< KeyType, Allocator > &OutKeys) const
Definition Map.h:264
TMapBase & operator=(TMapBase &&)=default
TMapBase(TMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:138
FORCEINLINE ValueType & Add(KeyType &&InKey, const ValueType &InValue)
Definition Map.h:298
FORCEINLINE friend TRangedForIterator begin(TMapBase &MapBase)
Definition Map.h:727
bool OrderIndependentCompareEqual(const TMapBase &Other) const
Definition Map.h:183
FORCEINLINE const ValueType & FindChecked(KeyConstPointerType Key) const
Definition Map.h:450
FORCEINLINE int32 Num() const
Definition Map.h:253
FORCEINLINE void CompactStable()
Definition Map.h:241
FORCEINLINE ValueType & Add(const KeyType &InKey, const ValueType &InValue)
Definition Map.h:296
FORCEINLINE friend TRangedForConstIterator begin(const TMapBase &MapBase)
Definition Map.h:728
TMapBase()=default
FORCEINLINE void Compact()
Definition Map.h:235
FORCEINLINE ValueType & FindOrAdd(const KeyType &Key)
Definition Map.h:420
TPair< KeyType, ValueType > ElementType
Definition Map.h:114
FORCEINLINE ValueType & FindChecked(KeyConstPointerType Key)
Definition Map.h:463
FORCEINLINE ValueType & Add(const KeyType &InKey, ValueType &&InValue)
Definition Map.h:297
ValueType & Emplace(InitKeyType &&InKey, InitValueType &&InValue)
Definition Map.h:317
TMapBase(const TMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:144
FORCEINLINE uint32 GetAllocatedSize() const
Definition Map.h:284
TMapBase & operator=(TMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:150
friend bool LegacyCompareNotEqual(const TMapBase &A, const TMapBase &B)
Definition Map.h:170
FORCEINLINE void Reset()
Definition Map.h:223
Definition Map.h:856
FORCEINLINE ValueType & operator[](KeyConstPointerType Key)
Definition Map.h:985
FORCEINLINE bool RemoveAndCopyValue(KeyInitType Key, ValueType &OutRemovedValue)
Definition Map.h:923
FORCEINLINE const ValueType & operator[](KeyConstPointerType Key) const
Definition Map.h:986
TMap(const TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:894
TSortableMapBase< KeyType, ValueType, SetAllocator, KeyFuncs > Super
Definition Map.h:863
FORCEINLINE ValueType FindAndRemoveChecked(KeyConstPointerType Key)
Definition Map.h:942
void Append(const TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &OtherMap)
Definition Map.h:976
TMap & operator=(const TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:909
void Append(TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&OtherMap)
Definition Map.h:958
TMap()=default
TMap & operator=(const TMap &)=default
TMap(TMap &&)=default
TMap & operator=(TMap &&)=default
TMap & operator=(TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:901
TMap(const TMap &)=default
TMap(TMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:887
Super::KeyInitType KeyInitType
Definition Map.h:864
Super::KeyConstPointerType KeyConstPointerType
Definition Map.h:865
static void Sort(T *First, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:286
Super::KeyInitType KeyInitType
Definition Map.h:1001
TMultiMap(TMultiMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:1024
Super::ValueInitType ValueInitType
Definition Map.h:1002
Super::KeyConstPointerType KeyConstPointerType
Definition Map.h:1000
int32 Num(KeyInitType Key) const
Definition Map.h:1239
void MultiFindPointer(KeyInitType Key, TArray< const ValueType *, Allocator > &OutValues, bool bMaintainOrder=false) const
Definition Map.h:1080
int32 RemoveSingle(KeyInitType InKey, ValueInitType InValue)
Definition Map.h:1183
TMultiMap & operator=(TMultiMap &&)=default
void MultiFindPointer(KeyInitType Key, TArray< ValueType *, Allocator > &OutValues, bool bMaintainOrder=false)
Definition Map.h:1092
ValueType * FindPair(KeyInitType Key, ValueInitType Value)
Definition Map.h:1223
TMultiMap(const TMultiMap &)=default
FORCEINLINE ValueType & AddUnique(KeyType &&InKey, ValueType &&InValue)
Definition Map.h:1117
TMultiMap & operator=(TMultiMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:1038
TMultiMap(const TMultiMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:1031
FORCEINLINE int32 Num() const
Definition Map.h:1251
int32 Remove(KeyInitType InKey, ValueInitType InValue)
Definition Map.h:1160
TMultiMap & operator=(const TMultiMap &)=default
TSortableMapBase< KeyType, ValueType, SetAllocator, KeyFuncs > Super
Definition Map.h:999
FORCEINLINE const ValueType * FindPair(KeyInitType Key, ValueInitType Value) const
Definition Map.h:1210
TMultiMap & operator=(const TMultiMap< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:1046
void MultiFind(KeyInitType Key, TArray< ValueType, Allocator > &OutValues, bool bMaintainOrder=false) const
Definition Map.h:1059
FORCEINLINE ValueType & AddUnique(const KeyType &InKey, const ValueType &InValue)
Definition Map.h:1114
FORCEINLINE int32 Remove(KeyConstPointerType InKey)
Definition Map.h:1148
FORCEINLINE ValueType & AddUnique(KeyType &&InKey, const ValueType &InValue)
Definition Map.h:1116
TMultiMap()=default
ValueType & EmplaceUnique(InitKeyType &&InKey, InitValueType &&InValue)
Definition Map.h:1131
FORCEINLINE ValueType & AddUnique(const KeyType &InKey, ValueType &&InValue)
Definition Map.h:1115
TMultiMap(TMultiMap &&)=default
FORCEINLINE TPairInitializer(KeyInitType InKey, ValueInitType InValue)
Definition Map.h:30
operator TPair< KeyType, ValueType >() const
Definition Map.h:45
TRValueToLValueReference< ValueInitType >::Type Value
Definition Map.h:27
TRValueToLValueReference< KeyInitType >::Type Key
Definition Map.h:26
FORCEINLINE TPairInitializer(const TPair< KeyType, ValueType > &Pair)
Definition Map.h:38
FORCEINLINE bool operator()(T &&A, T &&B) const
TReversePredicate(const PredicateType &InPredicate)
const PredicateType & Predicate
static void Merge(T *First, const int32 Mid, const int32 Num, const PREDICATE_CLASS &Predicate)
Definition Sorting.h:245
FORCEINLINE FElementCompareClass(const PREDICATE_CLASS &InPredicate)
Definition Set.h:869
FORCEINLINE bool operator()(const SetElementType &A, const SetElementType &B) const
Definition Set.h:873
TDereferenceWrapper< ElementType, PREDICATE_CLASS > Predicate
Definition Set.h:866
TChooseClass< bConst, constElementType, ElementType >::Result ItElementType
Definition Set.h:984
FORCEINLINE ItElementType & operator*() const
Definition Set.h:1025
FORCEINLINE friend bool operator==(const TBaseIterator &Lhs, const TBaseIterator &Rhs)
Definition Set.h:1030
ElementItType ElementIt
Definition Set.h:1033
TChooseClass< bConst, typenameTChooseClass< bRangedFor, typenameElementArrayType::TRangedForConstIterator, typenameElementArrayType::TConstIterator >::Result, typenameTChooseClass< bRangedFor, typenameElementArrayType::TRangedForIterator, typenameElementArrayType::TIterator >::Result >::Result ElementItType
Definition Set.h:991
FORCEINLINE TBaseIterator & operator++()
Definition Set.h:999
FORCEINLINE friend bool operator!=(const TBaseIterator &Lhs, const TBaseIterator &Rhs)
Definition Set.h:1031
FORCEINLINE FSetElementId GetId() const
Definition Set.h:1017
FORCEINLINE TBaseIterator(const ElementItType &InElementIt)
Definition Set.h:993
FORCEINLINE ItElementType * operator->() const
Definition Set.h:1021
FORCEINLINE operator bool() const
Definition Set.h:1006
FORCEINLINE bool operator!() const
Definition Set.h:1011
FORCEINLINE ItElementType & operator*() const
Definition Set.h:1096
FORCEINLINE ItElementType * operator->() const
Definition Set.h:1092
FORCEINLINE TBaseKeyIterator(SetType &InSet, KeyInitType InKey)
Definition Set.h:1046
TTypeTraits< typenameKeyFuncs::KeyType >::ConstPointerType Key
Definition Set.h:1103
TChooseClass< bConst, constTSet, TSet >::Result SetType
Definition Set.h:1041
FSetElementId Id
Definition Set.h:1104
FORCEINLINE operator bool() const
Definition Set.h:1081
FORCEINLINE TBaseKeyIterator & operator++()
Definition Set.h:1061
FSetElementId NextId
Definition Set.h:1105
TChooseClass< bConst, constElementType, ElementType >::Result ItElementType
Definition Set.h:1042
FORCEINLINE bool operator!() const
Definition Set.h:1086
FORCEINLINE TConstIterator(const TSet &InSet)
Definition Set.h:1116
FORCEINLINE TConstKeyIterator(const TSet &InSet, KeyInitType InKey)
Definition Set.h:1151
FORCEINLINE TIterator(TSet &InSet)
Definition Set.h:1128
TSet & Set
Definition Set.h:1141
FORCEINLINE void RemoveCurrent()
Definition Set.h:1135
FORCEINLINE TKeyIterator(TSet &InSet, KeyInitType InKey)
Definition Set.h:1160
FORCEINLINE void RemoveCurrent()
Definition Set.h:1166
static FORCEINLINE uint32 GetNumberOfHashBuckets(uint32 NumHashedElements)
InSparseArrayAllocator SparseArrayAllocator
int32 HashIndex
Definition Set.h:153
FORCEINLINE TSetElement(const TSetElement &Rhs)
Definition Set.h:163
FORCEINLINE TSetElement & operator=(const TSetElement &Rhs)
Definition Set.h:167
InElementType ElementType
Definition Set.h:144
FORCEINLINE bool operator!=(const TSetElement &Other) const
Definition Set.h:175
ElementType Value
Definition Set.h:147
FORCEINLINE TSetElement()
Definition Set.h:156
FORCEINLINE TSetElement & operator=(TSetElement &&Rhs)
Definition Set.h:168
FORCEINLINE TSetElement(TSetElement &&Rhs)
Definition Set.h:164
FSetElementId HashNextId
Definition Set.h:150
FORCEINLINE bool operator==(const TSetElement &Other) const
Definition Set.h:171
FORCEINLINE ElementType * Find(KeyInitType Key)
Definition Set.h:633
FORCEINLINE FSetElementId Add(const InElementType &InElement, bool *bIsAlreadyInSetPtr=NULL)
Definition Set.h:458
FORCEINLINE TSet()
Definition Set.h:207
FORCEINLINE friend TRangedForConstIterator end(const TSet &Set)
Definition Set.h:1195
void Append(const TSet< ElementType, KeyFuncs, OtherAllocator > &OtherSet)
Definition Set.h:549
FORCEINLINE int32 Num() const
Definition Set.h:421
TSet & operator=(const TSet< ElementType, KeyFuncs, OtherAllocator > &Other)
Definition Set.h:321
TSet & operator=(TSet &&Other)
Definition Set.h:284
bool VerifyHashElementsKey(KeyInitType Key)
Definition Set.h:725
KeyFuncs::KeyInitType KeyInitType
Definition Set.h:198
static FORCEINLINE TEnableIf< TContainerTraits< SetType >::MoveWillEmptyContainer >::Type MoveOrCopy(SetType &ToSet, SetType &FromSet)
Definition Set.h:252
void Rehash() const
Definition Set.h:953
FORCEINLINE void Shrink()
Definition Set.h:370
TSet & operator=(TSet< ElementType, KeyFuncs, OtherAllocator > &&Other)
Definition Set.h:312
FORCEINLINE const ElementType & operator[](FSetElementId Id) const
Definition Set.h:446
TSet(TSet &&Other)
Definition Set.h:277
TSet(TSet< ElementType, KeyFuncs, OtherAllocator > &&Other)
Definition Set.h:296
FORCEINLINE TIterator CreateIterator()
Definition Set.h:1176
friend bool LegacyCompareNotEqual(const TSet &A, const TSet &B)
Definition Set.h:751
TSparseArray< SetElementType, typename Allocator::SparseArrayAllocator > ElementArrayType
Definition Set.h:879
FORCEINLINE void Compact()
Definition Set.h:377
FORCEINLINE FSetElementId Add(InElementType &&InElement, bool *bIsAlreadyInSetPtr=NULL)
Definition Set.h:459
FORCEINLINE uint32 GetAllocatedSize(void) const
Definition Set.h:415
FORCEINLINE void CheckAddress(const ElementType *Addr) const
Definition Set.h:856
FORCEINLINE void HashElement(FSetElementId ElementId, const SetElementType &Element) const
Definition Set.h:915
FORCEINLINE SetElementType & GetInternalElement(FSetElementId Id)
Definition Set.h:900
FORCEINLINE friend TRangedForIterator begin(TSet &Set)
Definition Set.h:1192
FORCEINLINE TSet(const TSet &Copy)
Definition Set.h:212
InElementType ElementType
Definition Set.h:204
FORCEINLINE bool IsValidId(FSetElementId Id) const
Definition Set.h:431
FORCEINLINE TSet(TArray< ElementType > &&InArray)
Definition Set.h:224
void Append(const TArray< ElementType, ArrayAllocator > &InElements)
Definition Set.h:524
TSet Intersect(const TSet &OtherSet) const
Definition Set.h:757
FORCEINLINE void Relax()
Definition Set.h:406
FSetElementId FindId(KeyInitType Key) const
Definition Set.h:610
FORCEINLINE friend TRangedForConstIterator begin(const TSet &Set)
Definition Set.h:1193
TSet & operator=(const TSet &Copy)
Definition Set.h:237
int32 HashSize
Definition Set.h:885
FSetElementId Emplace(ArgsType &&Args, bool *bIsAlreadyInSetPtr=NULL)
Definition Set.h:472
FORCEINLINE ElementType & operator[](FSetElementId Id)
Definition Set.h:440
void Append(TSet< ElementType, KeyFuncs, OtherAllocator > &&OtherSet)
Definition Set.h:559
bool ConditionalRehash(int32 NumHashedElements, bool bAllowShrinking=false) const
Definition Set.h:931
FORCEINLINE const SetElementType & GetInternalElement(FSetElementId Id) const
Definition Set.h:896
TSet Difference(const TSet &OtherSet) const
Definition Set.h:794
KeyFuncs::ElementInitType ElementInitType
Definition Set.h:199
TSet(const TSet< ElementType, KeyFuncs, OtherAllocator > &Other)
Definition Set.h:304
FORCEINLINE FSetElementId & GetTypedHash(int32 HashIndex) const
Definition Set.h:887
HashType Hash
Definition Set.h:884
FORCEINLINE void CompactStable()
Definition Set.h:386
Allocator::HashAllocator::template ForElementType< FSetElementId > HashType
Definition Set.h:880
void Append(TArray< ElementType, ArrayAllocator > &&InElements)
Definition Set.h:534
static FORCEINLINE FSetElementId IndexToId(int32 Index)
Definition Set.h:909
void Sort(const PREDICATE_CLASS &Predicate)
Definition Set.h:716
friend bool LegacyCompareEqual(const TSet &A, const TSet &B)
Definition Set.h:747
FORCEINLINE const ElementType * Find(KeyInitType Key) const
Definition Set.h:651
FORCEINLINE void Reserve(int32 Number)
Definition Set.h:395
TSet Union(const TSet &OtherSet) const
Definition Set.h:777
FORCEINLINE ~TSet()
Definition Set.h:231
void Remove(FSetElementId ElementId)
Definition Set.h:582
static FORCEINLINE TEnableIf<!TContainerTraits< SetType >::MoveWillEmptyContainer >::Type MoveOrCopy(SetType &ToSet, SetType &FromSet)
Definition Set.h:263
TSetElement< InElementType > SetElementType
Definition Set.h:201
FORCEINLINE friend TRangedForIterator end(TSet &Set)
Definition Set.h:1194
void Reset()
Definition Set.h:357
TArray< ElementType > Array() const
Definition Set.h:839
ElementArrayType Elements
Definition Set.h:882
FORCEINLINE TSet(const TArray< ElementType > &InArray)
Definition Set.h:218
FORCEINLINE TConstIterator CreateConstIterator() const
Definition Set.h:1182
bool Includes(const TSet< ElementType, KeyFuncs, Allocator > &OtherSet) const
Definition Set.h:816
void Empty(int32 ExpectedNumElements=0)
Definition Set.h:340
FORCEINLINE bool Contains(KeyInitType Key) const
Definition Set.h:707
int32 Remove(KeyInitType Key)
Definition Set.h:669
FORCEINLINE void UpdateWeakReferenceInternal(TSharedRef< SharedRefType, Mode > const *InSharedRef, OtherType *InObject) const
TSharedRef< ObjectType, Mode > AsShared()
FORCEINLINE TSharedFromThis & operator=(TSharedFromThis const &)
static FORCEINLINE TSharedRef< OtherType const, Mode > SharedThis(const OtherType *ThisPtr)
static FORCEINLINE TSharedRef< OtherType, Mode > SharedThis(OtherType *ThisPtr)
TWeakPtr< ObjectType, Mode > WeakThis
TSharedFromThis(TSharedFromThis const &)
FORCEINLINE void UpdateWeakReferenceInternal(TSharedPtr< SharedPtrType, Mode > const *InSharedPtr, OtherType *InObject) const
TSharedRef< ObjectType const, Mode > AsShared() const
FORCEINLINE bool DoesSharedInstanceExist() const
FORCEINLINE const int32 GetSharedReferenceCount() const
FORCEINLINE ObjectType * operator->() const
FORCEINLINE TSharedPtr(OtherType *InObject, DeleterType &&InDeleter)
SharedPointerInternals::FSharedReferencer< Mode > SharedReferenceCount
FORCEINLINE FMakeReferenceTo< ObjectType >::Type operator*() const
FORCEINLINE TSharedPtr(OtherType *InObject)
FORCEINLINE TSharedPtr(SharedPointerInternals::FNullTag *=nullptr)
FORCEINLINE TSharedPtr(TSharedPtr< OtherType, Mode > const &InSharedPtr)
FORCEINLINE TSharedPtr(TSharedPtr< OtherType, Mode > const &InSharedPtr, SharedPointerInternals::FStaticCastTag)
FORCEINLINE TSharedPtr & operator=(SharedPointerInternals::FNullTag *)
FORCEINLINE const bool IsValid() const
FORCEINLINE TSharedPtr(TSharedPtr< OtherType, Mode > &&OtherSharedPtr, ObjectType *InObject)
FORCEINLINE TSharedPtr(TSharedPtr< OtherType, Mode > const &OtherSharedPtr, ObjectType *InObject)
friend uint32 GetTypeHash(const TSharedPtr< ObjectType, Mode > &InSharedPtr)
FORCEINLINE const bool IsUnique() const
FORCEINLINE TSharedPtr(TSharedPtr< OtherType, Mode > const &InSharedPtr, SharedPointerInternals::FConstCastTag)
FORCEINLINE TSharedPtr(TSharedRef< OtherType, Mode > const &InSharedRef)
FORCEINLINE void Reset()
FORCEINLINE TSharedPtr & operator=(SharedPointerInternals::FRawPtrProxy< OtherType > const &InRawPtrProxy)
FORCEINLINE TSharedPtr & operator=(TSharedPtr &&InSharedPtr)
FORCEINLINE TSharedPtr(TSharedPtr &&InSharedPtr)
FORCEINLINE TSharedRef< ObjectType, Mode > ToSharedRef() const
FORCEINLINE TSharedPtr(TSharedRef< OtherType, Mode > const &OtherSharedRef, ObjectType *InObject)
FORCEINLINE TSharedPtr(SharedPointerInternals::FRawPtrProxy< OtherType > const &InRawPtrProxy)
FORCEINLINE TSharedPtr(TSharedPtr const &InSharedPtr)
ObjectType * Object
FORCEINLINE ObjectType * Get() const
FORCEINLINE TSharedPtr & operator=(TSharedPtr const &InSharedPtr)
FORCEINLINE TSharedPtr(TWeakPtr< OtherType, Mode > const &InWeakPtr)
FORCEINLINE TSharedRef & operator=(TSharedRef &&InSharedRef)
FORCEINLINE TSharedRef(TSharedPtr< OtherType, Mode > &&InSharedPtr)
FORCEINLINE ObjectType & Get() const
void Init(OtherType *InObject)
FORCEINLINE ObjectType * operator->() const
FORCEINLINE const bool IsValid() const
FORCEINLINE TSharedRef(TSharedRef &&InSharedRef)
FORCEINLINE TSharedRef & operator=(TSharedRef const &InSharedRef)
FORCEINLINE TSharedRef(OtherType *InObject, DeleterType &&InDeleter)
FORCEINLINE TSharedRef(TSharedPtr< OtherType, Mode > const &InSharedPtr)
FORCEINLINE const bool IsUnique() const
FORCEINLINE TSharedRef(TSharedRef const &InSharedRef)
FORCEINLINE ObjectType & operator*() const
FORCEINLINE TSharedRef(TSharedRef< OtherType, Mode > const &InSharedRef, SharedPointerInternals::FConstCastTag)
FORCEINLINE TSharedRef(SharedPointerInternals::FRawPtrProxy< OtherType > const &InRawPtrProxy)
FORCEINLINE const int32 GetSharedReferenceCount() const
FORCEINLINE TSharedRef(OtherType *InObject)
SharedPointerInternals::FSharedReferencer< Mode > SharedReferenceCount
FORCEINLINE TSharedRef(TSharedRef< OtherType, Mode > const &InSharedRef)
FORCEINLINE TSharedRef(TSharedRef< OtherType, Mode > const &OtherSharedRef, ObjectType *InObject)
friend uint32 GetTypeHash(const TSharedRef< ObjectType, Mode > &InSharedRef)
ObjectType * Object
FORCEINLINE TSharedRef & operator=(SharedPointerInternals::FRawPtrProxy< OtherType > const &InRawPtrProxy)
FORCEINLINE TSharedRef(TSharedRef< OtherType, Mode > const &InSharedRef, SharedPointerInternals::FStaticCastTag)
FORCEINLINE TSharedRef(ObjectType *InObject, SharedPointerInternals::FReferenceControllerBase *InSharedReferenceCount)
TDereferenceWrapper< KeyType, PREDICATE_CLASS > Predicate
Definition Map.h:818
FORCEINLINE FKeyComparisonClass(const PREDICATE_CLASS &InPredicate)
Definition Map.h:822
FORCEINLINE bool operator()(const typename Super::ElementType &A, const typename Super::ElementType &B) const
Definition Map.h:826
FORCEINLINE FValueComparisonClass(const PREDICATE_CLASS &InPredicate)
Definition Map.h:840
TDereferenceWrapper< ValueType, PREDICATE_CLASS > Predicate
Definition Map.h:836
FORCEINLINE bool operator()(const typename Super::ElementType &A, const typename Super::ElementType &B) const
Definition Map.h:844
TSortableMapBase & operator=(TSortableMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:777
TSortableMapBase & operator=(TSortableMapBase &&)=default
FORCEINLINE void ValueSort(const PREDICATE_CLASS &Predicate)
Definition Map.h:807
TSortableMapBase(TSortableMapBase &&)=default
TSortableMapBase(const TSortableMapBase &)=default
TSortableMapBase(TSortableMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &&Other)
Definition Map.h:763
TSortableMapBase()=default
TSortableMapBase & operator=(const TSortableMapBase &)=default
FORCEINLINE void KeySort(const PREDICATE_CLASS &Predicate)
Definition Map.h:797
TMapBase< KeyType, ValueType, SetAllocator, KeyFuncs > Super
Definition Map.h:741
TSortableMapBase & operator=(const TSortableMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:785
TSortableMapBase(const TSortableMapBase< KeyType, ValueType, OtherSetAllocator, KeyFuncs > &Other)
Definition Map.h:770
ObjectType * Object
friend uint32 GetTypeHash(const TWeakPtr< ObjectType, Mode > &InWeakPtr)
FORCEINLINE TSharedPtr< ObjectType, Mode > Pin() const
FORCEINLINE const bool IsValid() const
SharedPointerInternals::FWeakReferencer< Mode > WeakReferenceCount
FORCEINLINE TWeakPtr & operator=(TWeakPtr< OtherType, Mode > const &InWeakPtr)
FORCEINLINE void Reset()
FORCEINLINE TWeakPtr(TWeakPtr< OtherType, Mode > const &InWeakPtr)
FORCEINLINE TWeakPtr(TSharedRef< OtherType, Mode > const &InSharedRef)
FORCEINLINE TWeakPtr & operator=(TWeakPtr< OtherType, Mode > &&InWeakPtr)
FORCEINLINE TWeakPtr & operator=(TSharedRef< OtherType, Mode > const &InSharedRef)
FORCEINLINE TWeakPtr(TWeakPtr< OtherType, Mode > &&InWeakPtr)
FORCEINLINE TWeakPtr & operator=(TWeakPtr &&InWeakPtr)
FORCEINLINE TWeakPtr(TWeakPtr &&InWeakPtr)
FORCEINLINE TWeakPtr & operator=(TSharedPtr< OtherType, Mode > const &InSharedPtr)
FORCEINLINE TWeakPtr(TWeakPtr const &InWeakPtr)
FORCEINLINE bool HasSameObject(const void *InOtherPtr) const
FORCEINLINE TWeakPtr(SharedPointerInternals::FNullTag *=nullptr)
FORCEINLINE TWeakPtr & operator=(TWeakPtr const &InWeakPtr)
FORCEINLINE TWeakPtr & operator=(SharedPointerInternals::FNullTag *)
FORCEINLINE TWeakPtr(TSharedPtr< OtherType, Mode > const &InSharedPtr)
ArgFormatter(BasicFormatter< Char > &formatter, FormatSpec &spec, const Char *fmt)
Definition format.h:2289
uint64_t types_
Definition format.h:1567
ArgList(ULongLong types, const internal::Value *values)
Definition format.h:1591
internal::Arg::Type type(unsigned index) const
Definition format.h:1578
friend class internal::ArgMap
Definition format.h:1583
@ MAX_PACKED_ARGS
Definition format.h:1587
internal::Arg operator[](unsigned index) const
Definition format.h:1599
static internal::Arg::Type type(uint64_t types, unsigned index)
Definition format.h:1624
uint64_t types() const
Definition format.h:1596
ArgList(ULongLong types, const internal::Arg *args)
Definition format.h:1593
void report_unhandled_arg()
Definition format.h:1664
Result visit_custom(Arg::CustomValue)
Definition format.h:1744
Result visit(const Arg &arg)
Definition format.h:1756
Result visit_double(double value)
Definition format.h:1708
Result visit_uint(unsigned value)
Definition format.h:1682
Result visit_any_int(T)
Definition format.h:1703
Result visit_cstring(const char *)
Definition format.h:1724
Result visit_pointer(const void *)
Definition format.h:1739
Result visit_unhandled_arg()
Definition format.h:1666
Result visit_any_double(T)
Definition format.h:1719
Result visit_long_double(long double value)
Definition format.h:1713
Result visit_long_long(LongLong value)
Definition format.h:1677
Result visit_wstring(Arg::StringValue< wchar_t >)
Definition format.h:1734
Result visit_string(Arg::StringValue< char >)
Definition format.h:1729
Result visit_ulong_long(ULongLong value)
Definition format.h:1687
Result visit_int(int value)
Definition format.h:1672
Result visit_bool(bool value)
Definition format.h:1692
Result visit_char(int value)
Definition format.h:1697
BasicFormatter< Char, Impl > & formatter_
Definition format.h:2260
const Char * format_
Definition format.h:2261
BasicArgFormatter(BasicFormatter< Char, Impl > &formatter, Spec &spec, const Char *fmt)
Definition format.h:2272
void visit_custom(internal::Arg::CustomValue c)
Definition format.h:2278
BasicArrayWriter(Char *array, std::size_t size)
Definition format.h:3353
internal::FixedBuffer< Char > buffer_
Definition format.h:3344
BasicArrayWriter(Char(&array)[SIZE])
Definition format.h:3363
const Char * data_
Definition format.h:660
const Char * c_str() const
Definition format.h:677
BasicCStringRef(const Char *s)
Definition format.h:664
BasicFormatter(const ArgList &args, BasicWriter< Char > &w)
Definition format.h:2328
void format(BasicCStringRef< Char > format_str)
Definition format.h:4012
internal::ArgMap< Char > map_
Definition format.h:2304
internal::Arg get_arg(BasicStringRef< Char > arg_name, const char *&error)
Definition format.h:3800
const Char * format(const Char *&format_str, const internal::Arg &arg)
Definition format.h:3840
BasicWriter< Char > & writer()
Definition format.h:2332
internal::Arg parse_arg_name(const Char *&s)
Definition format.h:3825
BasicWriter< Char > & writer_
Definition format.h:2303
internal::Arg parse_arg_index(const Char *&s)
Definition format.h:3813
const Char * data_
Definition format.h:539
BasicStringRef(const Char *s)
Definition format.h:552
std::size_t size() const
Definition format.h:598
friend bool operator!=(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:612
friend bool operator<(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:615
const Char * data() const
Definition format.h:595
friend bool operator<=(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:618
friend bool operator>(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:621
std::basic_string< Char > to_string() const
Definition format.h:590
friend bool operator>=(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:624
BasicStringRef(const Char *s, std::size_t size)
Definition format.h:544
friend bool operator==(BasicStringRef lhs, BasicStringRef rhs)
Definition format.h:609
std::size_t size_
Definition format.h:540
int compare(BasicStringRef other) const
Definition format.h:601
static CharPtr fill_padding(CharPtr buffer, unsigned total_size, std::size_t content_size, wchar_t fill)
Definition format.h:2926
void write_decimal(Int value)
Definition format.h:2647
virtual ~BasicWriter()
Definition format.h:2722
void append_float_length(Char *&, T)
Definition format.h:2702
void write_int(T value, Spec spec)
Definition format.h:3006
static Char * get(Char *p)
Definition format.h:2620
Buffer< Char > & buffer_
Definition format.h:2610
friend class BasicPrintfArgFormatter
Definition format.h:2708
BasicWriter(Buffer< Char > &b)
Definition format.h:2714
CharPtr prepare_int_buffer(unsigned num_digits, const Spec &spec, const char *prefix, unsigned prefix_size)
Definition format.h:2943
Char * write_unsigned_decimal(UInt value, unsigned prefix_size=0)
Definition format.h:2638
void append_float_length(Char *&format_ptr, long double)
Definition format.h:2697
void operator<<(typename internal::WCharHelper< const wchar_t *, Char >::Unsupported)
std::size_t size() const
Definition format.h:2727
CharPtr grow_buffer(std::size_t n)
Definition format.h:2630
void write_str(const internal::Arg::StringValue< StrChar > &str, const Spec &spec)
Definition format.h:2905
const Char * data() const FMT_NOEXCEPT
Definition format.h:2733
std::basic_string< Char > str() const
Definition format.h:2751
void clear() FMT_NOEXCEPT
Definition format.h:2875
CharPtr write_str(const StrChar *s, std::size_t size, const AlignSpec &spec)
Definition format.h:2882
void write(BasicCStringRef< Char > format, ArgList args)
Definition format.h:2780
Buffer< Char > & buffer() FMT_NOEXCEPT
Definition format.h:2877
CharPtr prepare_int_buffer(unsigned num_digits, const EmptySpec &, const char *prefix, unsigned prefix_size)
Definition format.h:2659
void operator<<(typename internal::WCharHelper< wchar_t, Char >::Unsupported)
internal::CharTraits< Char >::CharPtr CharPtr
Definition format.h:2614
void write_double(T value, const Spec &spec)
Definition format.h:3099
const Char * c_str() const
Definition format.h:2739
void resize(std::size_t new_size)
Definition format.h:770
std::size_t size() const
Definition format.h:762
std::size_t size_
Definition format.h:744
void push_back(const T &value)
Definition format.h:788
void clear() FMT_NOEXCEPT
Definition format.h:786
virtual ~Buffer()
Definition format.h:759
void append(const U *begin, const U *end)
Definition format.h:804
void reserve(std::size_t capacity)
Definition format.h:781
std::size_t capacity_
Definition format.h:745
virtual void grow(std::size_t size)=0
Buffer(T *ptr=FMT_NULL, std::size_t capacity=0)
Definition format.h:747
T & operator[](std::size_t index)
Definition format.h:798
std::size_t capacity() const
Definition format.h:765
const T & operator[](std::size_t index) const
Definition format.h:799
FormatError(const FormatError &ferr)
Definition format.h:688
FMT_API ~FormatError() FMT_DTOR_NOEXCEPT FMT_OVERRIDE
FormatError(CStringRef message)
Definition format.h:686
const char * data() const
Definition format.h:3537
char * str_
Definition format.h:3486
FormatInt(unsigned long value)
Definition format.h:3525
void FormatSigned(LongLong value)
Definition format.h:3510
char * format_decimal(ULongLong value)
Definition format.h:3489
FormatInt(unsigned value)
Definition format.h:3524
std::string str() const
Definition format.h:3553
std::size_t size() const
Definition format.h:3529
FormatInt(int value)
Definition format.h:3521
FormatInt(ULongLong value)
Definition format.h:3526
char buffer_[BUFFER_SIZE]
Definition format.h:3485
const char * c_str() const
Definition format.h:3543
FormatInt(LongLong value)
Definition format.h:3523
FormatInt(long value)
Definition format.h:3522
T value() const
Definition format.h:1879
IntFormatSpec(T val, const SpecT &spec=SpecT())
Definition format.h:1876
StrFormatSpec(const Char *str, unsigned width, FillChar fill)
Definition format.h:1890
const Char * str_
Definition format.h:1886
const Char * str() const
Definition format.h:1895
int error_code() const
Definition format.h:2566
SystemError(int error_code, CStringRef message)
Definition format.h:2558
FMT_API ~SystemError() FMT_DTOR_NOEXCEPT FMT_OVERRIDE
FMT_API void init(int err_code, CStringRef format_str, ArgList args)
Definition format.cc:225
void visit_wstring(internal::Arg::StringValue< Char > value)
Definition format.h:2182
void visit_string(internal::Arg::StringValue< char > value)
Definition format.h:2176
BasicWriter< Char > & writer_
Definition format.h:2090
void visit_pointer(const void *value)
Definition format.h:2186
BasicWriter< Char > & writer()
Definition format.h:2105
void visit_cstring(const char *value)
Definition format.h:2169
void write(const char *value)
Definition format.h:2114
void write_pointer(const void *p)
Definition format.h:2095
void visit_bool(bool value)
Definition format.h:2131
ArgFormatterBase(BasicWriter< Char > &w, Spec &s)
Definition format.h:2122
MapType::value_type Pair
Definition format.h:2024
void init(const ArgList &args)
Definition format.h:2043
static Char cast(int value)
Definition format.h:916
static char convert(char value)
Definition format.h:929
static char convert(wchar_t)
static wchar_t convert(char value)
Definition format.h:949
static wchar_t convert(wchar_t value)
Definition format.h:950
bool check_no_auto_index(const char *&error)
Definition format.h:2223
FormatterBase(const ArgList &args)
Definition format.h:2204
const ArgList & args() const
Definition format.h:2202
void write(BasicWriter< Char > &w, const Char *start, const Char *end)
Definition format.h:2233
Arg next_arg(const char *&error)
Definition format.h:2210
Arg get_arg(unsigned arg_index, const char *&error)
Definition format.h:2219
FMT_API Arg do_get_arg(unsigned arg_index, const char *&error)
MakeArg(const T &value)
Definition format.h:1530
MakeValue(unsigned long value)
Definition format.h:1420
MakeValue(typename WCharHelper< wchar_t, Char >::Unsupported)
MakeValue(typename WCharHelper< WStringRef, Char >::Unsupported)
static uint64_t type(long)
Definition format.h:1416
MakeValue(typename WCharHelper< const wchar_t *, Char >::Unsupported)
MakeValue(typename WCharHelper< wchar_t *, Char >::Unsupported)
Formatter::Char Char
Definition format.h:1345
void set_string(WStringRef str)
Definition format.h:1378
static uint64_t type(unsigned long)
Definition format.h:1426
void set_string(StringRef str)
Definition format.h:1373
MakeValue(const T *value)
static void format_custom_arg(void *formatter, const void *arg, void *format_str_ptr)
Definition format.h:1385
MakeValue(long value)
Definition format.h:1408
RuntimeError(const RuntimeError &rerr)
Definition format.h:1554
FMT_API ~RuntimeError() FMT_DTOR_NOEXCEPT FMT_OVERRIDE
ThousandsSep(fmt::StringRef sep)
Definition format.h:1068
void operator()(Char *&buffer)
Definition format.h:1071
void _set_formatter(spdlog::formatter_ptr msg_formatter) override
void format(details::log_msg &msg) override
std::unique_ptr< details::async_log_helper > _async_log_helper
pattern_formatter(const pattern_formatter &)=delete
void _sink_it(details::log_msg &msg) override
std::tm get_time(details::log_msg &msg)
pattern_formatter & operator=(const pattern_formatter &)=delete
void handle_flag(char flag)
const std::string _pattern
Definition formatter.h:37
const pattern_time_type _pattern_time
Definition formatter.h:38
virtual log_err_handler error_handler() override
void flush() override
std::vector< std::unique_ptr< details::flag_formatter > > _formatters
Definition formatter.h:39
void format(details::log_msg &msg, const std::tm &tm_time) override
void format(details::log_msg &msg, const std::tm &tm_time) override
const std::chrono::seconds cache_refresh
void format(details::log_msg &msg, const std::tm &tm_time) override
z_formatter & operator=(const z_formatter &)=delete
int get_cached_offset(const log_msg &msg, const std::tm &tm_time)
void format(details::log_msg &msg, const std::tm &) override
z_formatter(const z_formatter &)=delete
void format(details::log_msg &msg, const std::tm &tm_time) override
static void sleep_or_yield(const spdlog::log_clock::time_point &now, const log_clock::time_point &last_op_time)
void log(const details::log_msg &msg)
const std::function< void()> _worker_teardown_cb
void push_msg(async_msg &&new_msg)
void handle_flush_interval(log_clock::time_point &now, log_clock::time_point &last_flush)
async_log_helper(formatter_ptr formatter, const std::vector< sink_ptr > &sinks, size_t queue_size, const log_err_handler err_handler, const async_overflow_policy overflow_policy=async_overflow_policy::block_retry, const std::function< void()> &worker_warmup_cb=nullptr, const std::chrono::milliseconds &flush_interval_ms=std::chrono::milliseconds::zero(), const std::function< void()> &worker_teardown_cb=nullptr)
const async_overflow_policy _overflow_policy
std::vector< std::shared_ptr< sinks::sink > > _sinks
const std::function< void()> _worker_warmup_cb
bool process_next_msg(log_clock::time_point &last_pop, log_clock::time_point &last_flush)
const std::chrono::milliseconds _flush_interval_ms
void set_error_handler(spdlog::log_err_handler err_handler)
void format(details::log_msg &msg, const std::tm &tm_time) override
void reopen(bool truncate)
Definition file_helper.h:64
const filename_t & filename() const
file_helper(const file_helper &)=delete
void write(const log_msg &msg)
Definition file_helper.h:86
file_helper & operator=(const file_helper &)=delete
virtual void format(details::log_msg &msg, const std::tm &tm_time)=0
void format(details::log_msg &msg, const std::tm &) override
mpmc_bounded_queue(mpmc_bounded_queue const &)=delete
void operator=(mpmc_bounded_queue const &)=delete