#if UNITY_NATIVE using System; using Svelto.ECS.Extensions.Unity; using Unity.Jobs; namespace Svelto.ECS { #if UNITY_JOBS public static class UnityJobExtensions { public static JobHandle ScheduleParallel (this JOB job, uint iterations, JobHandle inputDeps) where JOB: struct, IJobParallelForBatch { if (iterations == 0) return inputDeps; var innerloopBatchCount = ProcessorCount.BatchSize((uint) iterations); return job.ScheduleBatch((int)iterations, innerloopBatchCount, inputDeps); } public static JobHandle ScheduleParallel (this JOB job, int iterations, JobHandle inputDeps) where JOB: struct, IJobParallelForBatch { if (iterations <= 0) return inputDeps; var innerloopBatchCount = ProcessorCount.BatchSize((uint) iterations); return job.ScheduleBatch((int)iterations, innerloopBatchCount, inputDeps); } } #endif public static class UnityJobExtensions2 { public static JobHandle ScheduleDispose (this T1 disposable, JobHandle inputDeps) where T1 : struct, IDisposable { return new DisposeJob(disposable).Schedule(inputDeps); } public static JobHandle ScheduleDispose (this T1 disposable1, T2 disposable2, JobHandle inputDeps) where T1 : struct, IDisposable where T2 : struct, IDisposable { return new DisposeJob(disposable1, disposable2).Schedule(inputDeps); } public static JobHandle ScheduleParallel (this JOB job, int iterations, JobHandle inputDeps) where JOB: struct, IJobParallelFor { if (iterations <= 0) return inputDeps; var innerloopBatchCount = ProcessorCount.BatchSize((uint) iterations); return job.Schedule((int)iterations, innerloopBatchCount, inputDeps); } public static JobHandle ScheduleParallel (this JOB job, uint iterations, JobHandle inputDeps) where JOB: struct, IJobParallelFor { if (iterations == 0) return inputDeps; var innerloopBatchCount = ProcessorCount.BatchSize(iterations); return job.Schedule((int)iterations, innerloopBatchCount, inputDeps); } } } #endif