style(templates): redefine placeholders such as ForceInit, InPlace, etc.
This commit is contained in:
		| @@ -41,11 +41,6 @@ NAMESPACE_MODULE_BEGIN(Utility) | ||||
| enum { INDEX_NONE = -1 }; | ||||
| enum { UNICODE_BOM = 0xfeff }; | ||||
|  | ||||
| enum EForceInit { ForceInit }; | ||||
| enum ENoInit    { NoInit    }; | ||||
| enum EInvalid   { Invalid   }; | ||||
| enum EInPlace   { InPlace   }; | ||||
|  | ||||
| NAMESPACE_MODULE_END(Utility) | ||||
| NAMESPACE_MODULE_END(Redcraft) | ||||
| NAMESPACE_REDCRAFT_END | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| #include "CoreTypes.h" | ||||
| #include "Templates/Compare.h" | ||||
| #include "Templates/Placeholders.h" | ||||
| #include "Concepts/Comparable.h" | ||||
| #include "TypeTraits/TypeTraits.h" | ||||
| #include "Miscellaneous/AssertionMacros.h" | ||||
| @@ -19,17 +20,17 @@ public: | ||||
|  | ||||
| 	constexpr TOptional() : bIsValid(false) { } | ||||
|  | ||||
| 	constexpr TOptional(EInvalid) : TOptional() { } | ||||
| 	constexpr TOptional(FInvalid) : TOptional() { } | ||||
|  | ||||
| 	template <typename... Types> requires TIsConstructible<OptionalType, Types...>::Value | ||||
| 	constexpr explicit TOptional(EInPlace, Types&&... Args) | ||||
| 	constexpr explicit TOptional(FInPlace, Types&&... Args) | ||||
| 		: bIsValid(true) | ||||
| 	{ | ||||
| 		new(&Value) OptionalType(Forward<Types>(Args)...); | ||||
| 	} | ||||
|  | ||||
| 	template <typename T = OptionalType> requires TIsConstructible<OptionalType, T&&>::Value | ||||
| 		&& (!TIsSame<typename TRemoveCVRef<T>::Type, EInPlace>::Value) && (!TIsSame<typename TRemoveCVRef<T>::Type, TOptional>::Value) | ||||
| 		&& (!TIsSame<typename TRemoveCVRef<T>::Type, FInPlace>::Value) && (!TIsSame<typename TRemoveCVRef<T>::Type, TOptional>::Value) | ||||
| 	constexpr explicit(!TIsConvertible<T&&, OptionalType>::Value) TOptional(T&& InValue) | ||||
| 		: TOptional(InPlace, Forward<T>(InValue)) | ||||
| 	{ } | ||||
| @@ -250,6 +251,12 @@ constexpr bool operator!=(const T& LHS, const TOptional<U>& RHS) | ||||
| 	return RHS.IsValid() ? LHS != *RHS : true; | ||||
| } | ||||
|  | ||||
| template <typename T> | ||||
| constexpr TOptional<typename TDecay<T>::Type> MakeOptional(FInvalid) | ||||
| { | ||||
| 	return TOptional<typename TDecay<T>::Type>(Invalid); | ||||
| } | ||||
|  | ||||
| template <typename T> | ||||
| constexpr TOptional<typename TDecay<T>::Type> MakeOptional(T&& InValue) | ||||
| { | ||||
|   | ||||
							
								
								
									
										29
									
								
								Redcraft.Utility/Source/Public/Templates/Placeholders.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								Redcraft.Utility/Source/Public/Templates/Placeholders.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "CoreTypes.h" | ||||
|  | ||||
| NAMESPACE_REDCRAFT_BEGIN | ||||
| NAMESPACE_MODULE_BEGIN(Redcraft) | ||||
| NAMESPACE_MODULE_BEGIN(Utility) | ||||
|  | ||||
| struct FForceInit { explicit FForceInit() = default; }; | ||||
| inline constexpr FForceInit ForceInit{}; | ||||
|  | ||||
| struct FNoInit { explicit FNoInit() = default; }; | ||||
| inline constexpr FNoInit NoInit{}; | ||||
|  | ||||
| struct FInvalid { explicit FInvalid() = default; }; | ||||
| inline constexpr FInvalid Invalid{}; | ||||
|  | ||||
| struct FInPlace { explicit FInPlace() = default; }; | ||||
| inline constexpr FInPlace InPlace{}; | ||||
|  | ||||
| template <typename T> struct TInPlaceType { explicit TInPlaceType() = default; }; | ||||
| template <typename T> inline constexpr TInPlaceType<T> InPlaceType{}; | ||||
|  | ||||
| template <size_t I> struct TInPlaceIndex { explicit TInPlaceIndex() = default; }; | ||||
| template <size_t I> inline constexpr TInPlaceIndex<I> InPlaceIndex{}; | ||||
|  | ||||
| NAMESPACE_MODULE_END(Utility) | ||||
| NAMESPACE_MODULE_END(Redcraft) | ||||
| NAMESPACE_REDCRAFT_END | ||||
| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| #include "CoreTypes.h" | ||||
| #include "Templates/Utility.h" | ||||
| #include "Templates/Placeholders.h" | ||||
| #include "Templates/Container.h" | ||||
| #include "Templates/Noncopyable.h" | ||||
| #include "Templates/Invoke.h" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user