74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | using Unity.Collections; | ||
|  | using Unity.Jobs; | ||
|  | 
 | ||
|  | namespace Doc.CodeSamples.Collections.Tests | ||
|  | { | ||
|  |     struct ExamplesCollections | ||
|  |     { | ||
|  |         public void foo() | ||
|  |         { | ||
|  |             #region parallel_writer | ||
|  | 
 | ||
|  |             NativeList<int> nums = new NativeList<int>(1000, Allocator.TempJob); | ||
|  | 
 | ||
|  |             // The parallel writer shares the original list's AtomicSafetyHandle. | ||
|  |             var job = new MyParallelJob {NumsWriter = nums.AsParallelWriter()}; | ||
|  | 
 | ||
|  |             #endregion | ||
|  |         } | ||
|  | 
 | ||
|  |         #region parallel_writer_job | ||
|  | 
 | ||
|  |         public struct MyParallelJob : IJobParallelFor | ||
|  |         { | ||
|  |             public NativeList<int>.ParallelWriter NumsWriter; | ||
|  | 
 | ||
|  |             public void Execute(int i) | ||
|  |             { | ||
|  |                 // A NativeList<T>.ParallelWriter can append values | ||
|  |                 // but not grow the capacity of the list. | ||
|  |                 NumsWriter.AddNoResize(i); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         #endregion | ||
|  | 
 | ||
|  |         public void foo2() | ||
|  |         { | ||
|  |             #region enumerator | ||
|  |             NativeList<int> nums = new NativeList<int>(10, Allocator.Temp); | ||
|  | 
 | ||
|  |             // Calculate the sum of all elements in the list. | ||
|  |             int sum = 0; | ||
|  |             var enumerator = nums.GetEnumerator(); | ||
|  | 
 | ||
|  |             // The first MoveNext call advances the enumerator to the first element. | ||
|  |             // MoveNext returns false when the enumerator has advanced past the last element. | ||
|  |             while (enumerator.MoveNext()) | ||
|  |             { | ||
|  |                 sum += enumerator.Current; | ||
|  |             } | ||
|  | 
 | ||
|  |             // The enumerator is no longer valid to use after the array is disposed. | ||
|  |             nums.Dispose(); | ||
|  |             #endregion | ||
|  |         } | ||
|  | 
 | ||
|  |         #region read_only | ||
|  |         public struct MyJob : IJob | ||
|  |         { | ||
|  |             // This array can only be read in the job. | ||
|  |             [ReadOnly] public NativeArray<int> nums; | ||
|  | 
 | ||
|  |             public void Execute() | ||
|  |             { | ||
|  |                 // If safety checks are enabled, an exception is thrown here | ||
|  |                 // because the array is read only. | ||
|  |                 nums[0] = 100; | ||
|  |             } | ||
|  |         } | ||
|  |         #endregion | ||
|  |     } | ||
|  | } |