static unsafe void ExecuteInnerLoop(ref JobStruct_Process1 <T, U0> jobData, int begin, int end) { ComponentChunkCache cache0; while (begin != end) { jobData.Iterator.Iterator0.UpdateCache(begin, out cache0); var ptr0 = UnsafeUtilityEx.RestrictNoAlias(cache0.CachedPtr); var curEnd = Math.Min(end, cache0.CachedEndIndex); for (var i = begin; i != curEnd; i++) { #if CSHARP_7_OR_LATER ref var value0 = ref UnsafeUtilityEx.ArrayElementAsRef <U0>(ptr0, i); jobData.Data.Execute(ref value0); #else var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i); jobData.Data.Execute(ref value0); if (jobData.Iterator.IsReadOnly0 == 0) { UnsafeUtility.WriteArrayElement(ptr0, i, value0); } #endif } begin = curEnd; }
static unsafe void ExecuteInnerLoop(ref JobStruct_Process1 <T, U0> jobData, int begin, int end) { ComponentChunkCache cache0; while (begin != end) { jobData.Iterator.Iterator0.UpdateCache(begin, out cache0); var ptr0 = cache0.CachedPtr; var curEnd = Math.Min(end, cache0.CachedEndIndex); for (var i = begin; i != curEnd; i++) { //@TODO: use ref returns to pass by ref instead of double copy var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i); jobData.Data.Execute(ref value0); if (jobData.Iterator.IsReadOnly0 == 0) { UnsafeUtility.WriteArrayElement(ptr0, i, value0); } } begin = curEnd; } }
static unsafe void Execute(ref JobStruct_Process1 <T, U0> jobData, IntPtr additionalPtr, IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex) { if (jobData.Iterator.m_IsParallelFor) { int begin; int end; while (JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, out begin, out end)) { #if ENABLE_UNITY_COLLECTIONS_CHECKS JobsUtility.PatchBufferMinMaxRanges(bufferRangePatchData, UnsafeUtility.AddressOf(ref jobData), begin, end - begin); #endif ExecuteInnerLoop(ref jobData, begin, end); } } else { ExecuteInnerLoop(ref jobData, 0, jobData.Iterator.m_Length); } }
private static unsafe void ExecuteInnerLoopByChunk(ref JobStruct_Process1 <T, U0> jobData, int begin, int end) { ComponentChunkCache cache0; for (var blockIndex = begin; blockIndex != end; ++blockIndex) { jobData.Iterator.Iterator0.MoveToChunkByIndex(blockIndex); var processBlock = false; processBlock |= jobData.Iterator.IsChangedFilter0 != 0 && jobData.Iterator.Iterator0.IsCurrentChunkChanged(); if (!processBlock) { continue; } jobData.Iterator.Iterator0.UpdateCacheToCurrentChunk(out cache0, jobData.Iterator.IsReadOnly0 == 0); var ptr0 = UnsafeUtilityEx.RestrictNoAlias(cache0.CachedPtr); for (var i = cache0.CachedBeginIndex; i != cache0.CachedEndIndex; i++) { #if CSHARP_7_OR_LATER ref var value0 = ref UnsafeUtilityEx.ArrayElementAsRef <U0>(ptr0, i); jobData.Data.Execute(ref value0); #else var value0 = UnsafeUtility.ReadArrayElement <U0>(ptr0, i); jobData.Data.Execute(ref value0); if (jobData.Iterator.IsReadOnly0 == 0) { UnsafeUtility.WriteArrayElement(ptr0, i, value0); } #endif } }