// Copyright 2020 Phyronnaz #pragma once #include "CoreMinimal.h" template using TVoxelSharedRef = TSharedRef; template using TVoxelSharedPtr = TSharedPtr; template using TVoxelWeakPtr = TWeakPtr; template using TVoxelSharedFromThis = TSharedFromThis; template inline TVoxelSharedRef StaticCastVoxelSharedRef(const TVoxelSharedRef& InSharedRef) { return StaticCastSharedRef(InSharedRef); } template inline TVoxelSharedPtr StaticCastVoxelSharedPtr(const TVoxelSharedPtr& InSharedPtr) { return StaticCastSharedPtr(InSharedPtr); } template inline TVoxelSharedRef MakeVoxelShared(InArgTypes&&... Args) { return MakeShared(Forward(Args)...); } template class TPtr> inline TVoxelWeakPtr MakeVoxelWeakPtr(const TPtr& Ptr) { return TVoxelWeakPtr(Ptr); } template inline TVoxelWeakPtr MakeVoxelWeakPtr(T* Ptr) { return TVoxelWeakPtr(StaticCastVoxelSharedRef(Ptr->AsShared())); } template class TPtr> inline TWeakPtr MakeWeakPtr(const TPtr& Ptr) { return TWeakPtr(Ptr); } template inline TWeakPtr MakeWeakPtr(T* Ptr) { return TWeakPtr(StaticCastSharedRef(Ptr->AsShared())); } // Need TEnableIf as &&& is equivalent to &, so T could get matched with Smthg& template inline typename TEnableIf::Value, TSharedRef>::Type MakeSharedCopy(T&& Data) { return MakeShared(MoveTemp(Data)); } template inline typename TEnableIf::Value, TVoxelSharedRef>::Type MakeVoxelSharedCopy(T&& Data) { return MakeVoxelShared(MoveTemp(Data)); } template inline TSharedRef MakeSharedCopy(const T& Data) { return MakeShared(Data); } template inline TVoxelSharedRef MakeVoxelSharedCopy(const T& Data) { return MakeVoxelShared(Data); }