70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #pragma once | |||
|  | 
 | |||
|  | #include "TypeGenerator/CSClass.h"
 | |||
|  | #include "TypeGenerator/CSInterface.h"
 | |||
|  | #include "TypeGenerator/CSSkeletonClass.h"
 | |||
|  | 
 | |||
|  | class UNREALSHARPCORE_API FCSClassUtilities | |||
|  | { | |||
|  | public: | |||
|  | 	static bool IsManagedClass(const UClass* Class) { return Class->GetClass() == UCSClass::StaticClass(); } | |||
|  | 	static bool IsManagedType(const UClass* Class); | |||
|  | 	static bool IsSkeletonType(const UClass* Class) { return Class->GetClass() == UCSSkeletonClass::StaticClass(); } | |||
|  | 	static bool IsNativeClass(UClass* Class){ return Class->GetClass() == UClass::StaticClass(); } | |||
|  | 
 | |||
|  | 	static UCSClass* GetFirstManagedClass(UClass* Class) | |||
|  | 	{ | |||
|  | 		while (Class && !IsManagedClass(Class)) | |||
|  | 		{ | |||
|  | 			Class = Class->GetSuperClass(); | |||
|  | 
 | |||
|  | 			if (IsNativeClass(Class)) | |||
|  | 			{ | |||
|  | 				// We've already reached a native class, so we can stop searching.
 | |||
|  | 				return nullptr; | |||
|  | 			} | |||
|  | 		} | |||
|  | 	 | |||
|  | 		return (UCSClass*) Class; | |||
|  | 	} | |||
|  | 	 | |||
|  | 	static ICSManagedTypeInterface* GetManagedType(UClass* Class) | |||
|  | 	{ | |||
|  | 		for (UClass* It = Class; It; It = It->GetSuperClass()) | |||
|  | 		{ | |||
|  | 			if (ICSManagedTypeInterface* Managed = Cast<ICSManagedTypeInterface>(It)) | |||
|  | 			{ | |||
|  | 				return Managed; | |||
|  | 			} | |||
|  | 			 | |||
|  | 			if (IsNativeClass(It)) | |||
|  | 			{ | |||
|  | 				return nullptr; | |||
|  | 			} | |||
|  | 		} | |||
|  | 		 | |||
|  | 		return nullptr; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	 | |||
|  | 	static UClass* GetFirstNativeClass(UClass* Class) | |||
|  | 	{ | |||
|  | 		while (!IsNativeClass(Class)) | |||
|  | 		{ | |||
|  | 			Class = Class->GetSuperClass(); | |||
|  | 		} | |||
|  | 	 | |||
|  | 		return Class; | |||
|  | 	} | |||
|  | 
 | |||
|  | 	static UClass* GetFirstNonBlueprintClass(UClass* Class) | |||
|  | 	{ | |||
|  | 		while (Class->GetClass() != UClass::StaticClass() && Class->GetClass() != UCSClass::StaticClass()) | |||
|  | 		{ | |||
|  | 			Class = Class->GetSuperClass(); | |||
|  | 		} | |||
|  | 	 | |||
|  | 		return Class; | |||
|  | 	} | |||
|  | }; |