From 1bff879a0b78ed939beee2d5e85a06a12a3b8d85 Mon Sep 17 00:00:00 2001
From: _Redstone_c_ <myredstone1024@gmail.com>
Date: Thu, 17 Mar 2022 09:22:48 +0800
Subject: [PATCH] style(*): move some constants and placeholders to
 CoreMiscDefines.h

---
 Redcraft.Utility/Source/Public/CoreTypes.h    |  2 +-
 .../Source/Public/Miscellaneous/CoreDefines.h | 11 ------
 .../Public/Miscellaneous/CoreMiscDefines.h    | 30 ++++++++++++++++
 .../Public/Miscellaneous/Placeholders.h       | 36 -------------------
 .../Source/Public/Miscellaneous/TypeInfo.h    |  1 -
 .../Source/Public/Templates/Variant.h         | 24 ++++++-------
 .../Public/TypeTraits/InPlaceSpecialization.h | 18 ++++++++++
 .../Source/Public/TypeTraits/TypeTraits.h     |  1 +
 8 files changed, 62 insertions(+), 61 deletions(-)
 create mode 100644 Redcraft.Utility/Source/Public/Miscellaneous/CoreMiscDefines.h
 delete mode 100644 Redcraft.Utility/Source/Public/Miscellaneous/Placeholders.h
 create mode 100644 Redcraft.Utility/Source/Public/TypeTraits/InPlaceSpecialization.h

diff --git a/Redcraft.Utility/Source/Public/CoreTypes.h b/Redcraft.Utility/Source/Public/CoreTypes.h
index c7342db..8492771 100644
--- a/Redcraft.Utility/Source/Public/CoreTypes.h
+++ b/Redcraft.Utility/Source/Public/CoreTypes.h
@@ -2,4 +2,4 @@
 
 #include "Miscellaneous/Platform.h"
 #include "Miscellaneous/CoreDefines.h"
-#include "Miscellaneous/Placeholders.h"
+#include "Miscellaneous/CoreMiscDefines.h"
diff --git a/Redcraft.Utility/Source/Public/Miscellaneous/CoreDefines.h b/Redcraft.Utility/Source/Public/Miscellaneous/CoreDefines.h
index 67858b8..ce5b723 100644
--- a/Redcraft.Utility/Source/Public/Miscellaneous/CoreDefines.h
+++ b/Redcraft.Utility/Source/Public/Miscellaneous/CoreDefines.h
@@ -33,14 +33,3 @@
 // Define the unnamed namespace
 #define NAMESPACE_UNNAMED_BEGIN			namespace {
 #define NAMESPACE_UNNAMED_END			}
-
-NAMESPACE_REDCRAFT_BEGIN
-NAMESPACE_MODULE_BEGIN(Redcraft)
-NAMESPACE_MODULE_BEGIN(Utility)
-
-enum { INDEX_NONE = -1 };
-enum { UNICODE_BOM = 0xfeff };
-
-NAMESPACE_MODULE_END(Utility)
-NAMESPACE_MODULE_END(Redcraft)
-NAMESPACE_REDCRAFT_END
diff --git a/Redcraft.Utility/Source/Public/Miscellaneous/CoreMiscDefines.h b/Redcraft.Utility/Source/Public/Miscellaneous/CoreMiscDefines.h
new file mode 100644
index 0000000..9cbdb52
--- /dev/null
+++ b/Redcraft.Utility/Source/Public/Miscellaneous/CoreMiscDefines.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "Miscellaneous/CoreDefines.h"
+
+NAMESPACE_REDCRAFT_BEGIN
+NAMESPACE_MODULE_BEGIN(Redcraft)
+NAMESPACE_MODULE_BEGIN(Utility)
+
+constexpr size_t   INDEX_NONE = -1;
+constexpr WIDECHAR UNICODE_BOM = 0xfeff;
+
+struct FForceInit { explicit FForceInit() = default; };
+struct FNoInit    { explicit FNoInit()    = default; };
+struct FInvalid   { explicit FInvalid()   = default; };
+struct FInPlace   { explicit FInPlace()   = default; };
+
+inline constexpr FForceInit ForceInit{ };
+inline constexpr FNoInit    NoInit{ };
+inline constexpr FInvalid   Invalid{ };
+inline constexpr FInPlace   InPlace{ };
+
+template <typename T> struct TInPlaceType  { explicit TInPlaceType()  = default; };
+template <size_t   I> struct TInPlaceIndex { explicit TInPlaceIndex() = default; };
+
+template <typename T> inline constexpr TInPlaceType<T>  InPlaceType{ };
+template <size_t   I> inline constexpr TInPlaceIndex<I> InPlaceIndex{ };
+
+NAMESPACE_MODULE_END(Utility)
+NAMESPACE_MODULE_END(Redcraft)
+NAMESPACE_REDCRAFT_END
diff --git a/Redcraft.Utility/Source/Public/Miscellaneous/Placeholders.h b/Redcraft.Utility/Source/Public/Miscellaneous/Placeholders.h
deleted file mode 100644
index 586d638..0000000
--- a/Redcraft.Utility/Source/Public/Miscellaneous/Placeholders.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-
-#include "CoreTypes.h"
-#include "TypeTraits/HelperClasses.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{};
-
-template <typename T> struct TIsInPlaceTypeSpecialization                  : FFalse { };
-template <typename T> struct TIsInPlaceTypeSpecialization<TInPlaceType<T>> : FTrue  { };
-
-template <typename T> struct TIsInPlaceIndexSpecialization                   : FFalse { };
-template <size_t   I> struct TIsInPlaceIndexSpecialization<TInPlaceIndex<I>> : FTrue  { };
-
-NAMESPACE_MODULE_END(Utility)
-NAMESPACE_MODULE_END(Redcraft)
-NAMESPACE_REDCRAFT_END
diff --git a/Redcraft.Utility/Source/Public/Miscellaneous/TypeInfo.h b/Redcraft.Utility/Source/Public/Miscellaneous/TypeInfo.h
index 4db6627..a25e012 100644
--- a/Redcraft.Utility/Source/Public/Miscellaneous/TypeInfo.h
+++ b/Redcraft.Utility/Source/Public/Miscellaneous/TypeInfo.h
@@ -2,7 +2,6 @@
 
 #include "CoreTypes.h"
 #include "Miscellaneous/Compare.h"
-#include "Miscellaneous/Placeholders.h"
 
 #include <typeinfo>
 
diff --git a/Redcraft.Utility/Source/Public/Templates/Variant.h b/Redcraft.Utility/Source/Public/Templates/Variant.h
index 55c751b..a03db66 100644
--- a/Redcraft.Utility/Source/Public/Templates/Variant.h
+++ b/Redcraft.Utility/Source/Public/Templates/Variant.h
@@ -16,12 +16,12 @@ struct TVariantAlternativeIndex;
 
 template <typename T, typename U, typename... Types>
 struct TVariantAlternativeIndex<T, U, Types...>
-	: TConstant<size_t, TIsSame<T, U>::Value ? 0 : (TVariantAlternativeIndex<T, Types...>::Value == static_cast<size_t>(INDEX_NONE)
-	? static_cast<size_t>(INDEX_NONE) : TVariantAlternativeIndex<T, Types...>::Value + 1)>
+	: TConstant<size_t, TIsSame<T, U>::Value ? 0 : (TVariantAlternativeIndex<T, Types...>::Value == INDEX_NONE
+	? INDEX_NONE : TVariantAlternativeIndex<T, Types...>::Value + 1)>
 { };
 
 template <typename T>
-struct TVariantAlternativeIndex<T> : TConstant<size_t, static_cast<size_t>(INDEX_NONE)> { };
+struct TVariantAlternativeIndex<T> : TConstant<size_t, INDEX_NONE> { };
 
 template <size_t I, typename... Types>
 struct TVariantAlternativeType;
@@ -225,20 +225,20 @@ struct TVariant
 	template <size_t I>   struct TAlternativeType  : NAMESPACE_PRIVATE::TVariantAlternativeType<I, Types...>  { };
 	template <typename T> struct TAlternativeIndex : NAMESPACE_PRIVATE::TVariantAlternativeIndex<T, Types...> { };
 
-	constexpr TVariant() : TypeIndex(static_cast<size_t>(INDEX_NONE)) { };
+	constexpr TVariant() : TypeIndex(INDEX_NONE) { };
 
 	constexpr TVariant(FInvalid) : TVariant() { };
 
 	constexpr TVariant(const TVariant& InValue)
 		: TypeIndex(InValue.GetIndex())
 	{
-		if (GetIndex() != static_cast<size_t>(INDEX_NONE)) FHelper::CopyConstructFuncs[InValue.GetIndex()](&Value, &InValue.Value);
+		if (GetIndex() != INDEX_NONE) FHelper::CopyConstructFuncs[InValue.GetIndex()](&Value, &InValue.Value);
 	}
 
 	constexpr TVariant(TVariant&& InValue)
 		: TypeIndex(InValue.GetIndex())
 	{
-		if (GetIndex() != static_cast<size_t>(INDEX_NONE)) FHelper::MoveConstructFuncs[InValue.GetIndex()](&Value, &InValue.Value);
+		if (GetIndex() != INDEX_NONE) FHelper::MoveConstructFuncs[InValue.GetIndex()](&Value, &InValue.Value);
 	}
 
 	template<size_t I, typename... ArgTypes> requires (I < FAlternativeSize::Value)
@@ -250,7 +250,7 @@ struct TVariant
 		new(&Value) SelectedType(Forward<ArgTypes>(Args)...);
 	}
 
-	template<typename T, typename... ArgTypes> requires (TAlternativeIndex<T>::Value != static_cast<size_t>(INDEX_NONE))
+	template<typename T, typename... ArgTypes> requires (TAlternativeIndex<T>::Value != INDEX_NONE)
 		&& TIsConstructible<typename TAlternativeType<TAlternativeIndex<T>::Value>::Type, ArgTypes...>::Value
 	constexpr explicit TVariant(TInPlaceType<T>, ArgTypes&&... Args)
 		: TVariant(InPlaceIndex<TAlternativeIndex<T>::Value>, Forward<ArgTypes>(Args)...)
@@ -338,7 +338,7 @@ struct TVariant
 		return *Result;
 	}
 
-	template <typename T, typename... ArgTypes> requires (TAlternativeIndex<T>::Value != static_cast<size_t>(INDEX_NONE))
+	template <typename T, typename... ArgTypes> requires (TAlternativeIndex<T>::Value != INDEX_NONE)
 		&& TIsConstructible<typename TAlternativeType<TAlternativeIndex<T>::Value>::Type, ArgTypes...>::Value
 	constexpr T& Emplace(ArgTypes&&... Args)
 	{
@@ -346,8 +346,8 @@ struct TVariant
 	}
 
 	constexpr size_t GetIndex()        const { return TypeIndex; }
-	constexpr bool IsValid()           const { return GetIndex() != static_cast<size_t>(INDEX_NONE); }
-	constexpr explicit operator bool() const { return GetIndex() != static_cast<size_t>(INDEX_NONE); }
+	constexpr bool IsValid()           const { return GetIndex() != INDEX_NONE; }
+	constexpr explicit operator bool() const { return GetIndex() != INDEX_NONE; }
 
 	template <size_t   I> constexpr bool HoldsAlternative() const { return IsValid() ? GetIndex() == I                           : false; }
 	template <typename T> constexpr bool HoldsAlternative() const { return IsValid() ? GetIndex() == TAlternativeIndex<T>::Value : false; }
@@ -433,11 +433,11 @@ struct TVariant
 
 	constexpr void Reset()
 	{
-		if (GetIndex() == static_cast<size_t>(INDEX_NONE)) return;
+		if (GetIndex() == INDEX_NONE) return;
 
 		FHelper::DestroyFuncs[GetIndex()](&Value);
 
-		TypeIndex = static_cast<size_t>(INDEX_NONE);
+		TypeIndex = INDEX_NONE;
 	}
 
 private:
diff --git a/Redcraft.Utility/Source/Public/TypeTraits/InPlaceSpecialization.h b/Redcraft.Utility/Source/Public/TypeTraits/InPlaceSpecialization.h
new file mode 100644
index 0000000..83fd117
--- /dev/null
+++ b/Redcraft.Utility/Source/Public/TypeTraits/InPlaceSpecialization.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "CoreTypes.h"
+#include "TypeTraits/HelperClasses.h"
+
+NAMESPACE_REDCRAFT_BEGIN
+NAMESPACE_MODULE_BEGIN(Redcraft)
+NAMESPACE_MODULE_BEGIN(Utility)
+
+template <typename T> struct TIsInPlaceTypeSpecialization                  : FFalse { };
+template <typename T> struct TIsInPlaceTypeSpecialization<TInPlaceType<T>> : FTrue  { };
+
+template <typename T> struct TIsInPlaceIndexSpecialization                   : FFalse { };
+template <size_t   I> struct TIsInPlaceIndexSpecialization<TInPlaceIndex<I>> : FTrue  { };
+
+NAMESPACE_MODULE_END(Utility)
+NAMESPACE_MODULE_END(Redcraft)
+NAMESPACE_REDCRAFT_END
diff --git a/Redcraft.Utility/Source/Public/TypeTraits/TypeTraits.h b/Redcraft.Utility/Source/Public/TypeTraits/TypeTraits.h
index 8ed0163..18e727e 100644
--- a/Redcraft.Utility/Source/Public/TypeTraits/TypeTraits.h
+++ b/Redcraft.Utility/Source/Public/TypeTraits/TypeTraits.h
@@ -10,3 +10,4 @@
 #include "TypeTraits/Swappable.h"
 #include "TypeTraits/Common.h"
 #include "TypeTraits/CopyQualifiers.h"
+#include "TypeTraits/InPlaceSpecialization.h"