Files
UnrealEngineUWP/Engine/Source/Developer/ToolMenus/Public/ToolMenuOwner.h
ryan durand 471d972e62 Updating copyright for Engine Developer.
#rnx
#rb none


#ROBOMERGE-SOURCE: CL 10869240 via CL 10869516 via CL 10869902
#ROBOMERGE-BOT: (v613-10869866)

[CL 10870584 by ryan durand in Main branch]
2019-12-26 15:32:37 -05:00

89 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "ToolMenuOwner.generated.h"
USTRUCT(BlueprintType, meta=(HasNativeBreak="ToolMenus.ToolMenuEntryExtensions.BreakToolMenuOwner", HasNativeMake="ToolMenus.ToolMenuEntryExtensions.MakeToolMenuOwner"))
struct TOOLMENUS_API FToolMenuOwner
{
GENERATED_BODY()
private:
struct FStoreName
{
int32 Index;
int32 Number;
};
enum class EValueType : uint8
{
None,
Pointer,
Name
};
public:
FORCEINLINE FToolMenuOwner() : ValueInt64(0), ValueType(EValueType::None) {}
FORCEINLINE FToolMenuOwner(void* InPointer) : ValueInt64(reinterpret_cast<int64>(InPointer)), ValueType(EValueType::Pointer) {}
FToolMenuOwner(const WIDECHAR* InValue) : FToolMenuOwner(FName(InValue)) {}
FToolMenuOwner(const ANSICHAR* InValue) : FToolMenuOwner(FName(InValue)) {}
FToolMenuOwner(const FName InValue)
{
if (InValue == NAME_None)
{
ValueInt64 = 0;
ValueType = EValueType::None;
}
else
{
ValueName.Index = InValue.GetComparisonIndex().ToUnstableInt();
ValueName.Number = InValue.GetNumber();
ValueType = EValueType::Name;
}
}
FORCEINLINE bool operator==(const FToolMenuOwner& Other) const
{
return Other.ValueInt64 == ValueInt64 && Other.ValueType == ValueType;
}
FORCEINLINE bool operator!=(const FToolMenuOwner& Other) const
{
return Other.ValueInt64 != ValueInt64 || Other.ValueType != ValueType;
}
friend uint32 GetTypeHash(const FToolMenuOwner& Key)
{
return GetTypeHash(Key.ValueInt64);
}
FORCEINLINE bool IsSet() const { return ValueInt64 != 0; }
FName TryGetName() const
{
if (ValueType == EValueType::Name)
{
const FNameEntryId EntryId = FNameEntryId::FromUnstableInt(ValueName.Index);
return FName(EntryId, EntryId, ValueName.Number);
}
return NAME_None;
}
private:
union
{
int64 ValueInt64;
FStoreName ValueName;
};
EValueType ValueType;
};