// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MassEntityElementTypes.h" #include "MassExternalSubsystemTraits.h" #include "Subsystems/Subsystem.h" namespace UE::Mass { template using Clean = typename TRemoveReference::Type; template concept CFragment = TIsDerivedFrom, FMassFragment>::Value && ( std::is_trivially_copyable_v> || static_cast(TMassFragmentTraits>::AuthorAcceptsItsNotTriviallyCopyable) ); template concept CTag = TIsDerivedFrom, FMassTag>::Value; template concept CChunkFragment = TIsDerivedFrom, FMassChunkFragment>::Value; template concept CSharedFragment = TIsDerivedFrom, FMassSharedFragment>::Value; template concept CConstSharedFragment = TIsDerivedFrom, FMassConstSharedFragment>::Value; template concept CNonTag = CFragment || CChunkFragment || CSharedFragment || CConstSharedFragment; template concept CElement = CNonTag || CTag; template concept CSubsystem = TIsDerivedFrom, USubsystem>::Value; namespace Private { template struct TElementTypeHelper { using Type = std::conditional_t, FMassFragment , std::conditional_t, FMassTag , std::conditional_t, FMassChunkFragment , std::conditional_t, FMassSharedFragment , std::conditional_t, FMassConstSharedFragment , void>>>>>; }; } template using TElementType = typename Private::TElementTypeHelper::Type; }