#if UNITY_JOBS
using Svelto.Common;
using Svelto.DataStructures;
using Unity.Jobs;
namespace Svelto.ECS.SveltoOnDOTS
{
///
/// Note unsorted jobs run in parallel
///
///
public abstract class UnsortedJobifiedEnginesGroup : IJobifiedEngine
where Interface : class, IJobifiedEngine
{
protected UnsortedJobifiedEnginesGroup(FasterList engines)
{
_name = "JobifiedEnginesGroup - " + this.GetType().Name;
_engines = engines;
}
protected UnsortedJobifiedEnginesGroup()
{
_name = "JobifiedEnginesGroup - " + this.GetType().Name;
_engines = new FasterList();
}
public JobHandle Execute(JobHandle inputHandles)
{
var engines = _engines;
JobHandle combinedHandles = inputHandles;
using (var profiler = new PlatformProfiler(_name))
{
for (var index = 0; index < engines.count; index++)
{
ref var engine = ref engines[index];
using (profiler.Sample(engine.name))
{
combinedHandles = JobHandle.CombineDependencies(combinedHandles, engine.Execute(inputHandles));
}
}
}
return combinedHandles;
}
public void Add(Interface engine)
{
_engines.Add(engine);
}
public string name => _name;
protected readonly FasterList _engines;
readonly string _name;
}
public abstract class UnsortedJobifiedEnginesGroup : IJobifiedGroupEngine
where Interface : class, IJobifiedEngine
{
protected UnsortedJobifiedEnginesGroup(FasterList engines)
{
_name = "JobifiedEnginesGroup - " + this.GetType().Name;
_engines = engines;
}
public JobHandle Execute(JobHandle combinedHandles, ref Param _param)
{
var engines = _engines;
using (var profiler = new PlatformProfiler(_name))
{
for (var index = 0; index < engines.count; index++)
{
var engine = engines[index];
using (profiler.Sample(engine.name))
combinedHandles = JobHandle.CombineDependencies(combinedHandles,
engine.Execute(combinedHandles, ref _param));
}
}
return combinedHandles;
}
public string name => _name;
readonly string _name;
readonly FasterReadOnlyList _engines;
}
}
#endif