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