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;
 | 
						|
	}
 | 
						|
};
 |