48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								struct FCSNamespace
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									FCSNamespace(FName InNamespace = NAME_None) : Namespace(InNamespace)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Get the namespace as a FName
							 | 
						||
| 
								 | 
							
									FName GetFName() const { return Namespace; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Get the namespace as a string
							 | 
						||
| 
								 | 
							
									FString GetName() const { return Namespace.ToString(); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Gets the name of the last part of the namespace. For example, if the namespace is "UnrealSharp.Core", this will return "Core".
							 | 
						||
| 
								 | 
							
									FString GetLastNamespace() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									bool GetParentNamespace(FCSNamespace& OutParent) const;
							 | 
						||
| 
								 | 
							
									bool IsValid() const { return Namespace != NAME_None; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									UPackage* GetPackage() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									UPackage* TryGetAsNativePackage() const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										FString NativePackageName = FString::Printf(TEXT("/Script/%s"), *GetLastNamespace());
							 | 
						||
| 
								 | 
							
										return FindPackage(nullptr, *NativePackageName);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									FName GetPackageName() const { return *FString::Printf(TEXT("/Script/%s"), *Namespace.ToString()); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									static FCSNamespace Invalid() { return FCSNamespace(); }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									bool operator == (const FCSNamespace& Other) const
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return Namespace == Other.Namespace;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									friend uint32 GetTypeHash(const FCSNamespace& InNamespace)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										return GetTypeHash(InNamespace.Namespace);
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
									FName Namespace;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 |