80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Unity.Collections;
 | |
| using Unity.Jobs;
 | |
| 
 | |
| namespace Doc.CodeSamples.Collections.Tests
 | |
| {
 | |
|     class AliasingExample
 | |
|     {
 | |
|         public void foo()
 | |
|         {
 | |
|             #region allocation_aliasing
 | |
|             NativeList<int> nums = new NativeList<int>(10, Allocator.TempJob);
 | |
|             nums.Length = 5;
 | |
| 
 | |
|             // Create an array of 5 ints that aliases the content of the list.
 | |
|             NativeArray<int> aliasedNums = nums.AsArray();
 | |
| 
 | |
|             // Modify the first element of both the array and the list.
 | |
|             aliasedNums[0] = 99;
 | |
| 
 | |
|             // Only the original need be disposed.
 | |
|             nums.Dispose();
 | |
| 
 | |
|             // Throws an ObjectDisposedException because disposing
 | |
|             // the original deallocates the aliased memory.
 | |
|             aliasedNums[0] = 99;
 | |
|             #endregion
 | |
|         }
 | |
| 
 | |
|         public void foo2()
 | |
|         {
 | |
|             #region allocation_reinterpretation
 | |
|             NativeArray<int> ints = new NativeArray<int>(10, Allocator.Temp);
 | |
| 
 | |
|             // Length of the reinterpreted array is 20
 | |
|             // (because it has two shorts per one int of the original).
 | |
|             NativeArray<short> shorts = ints.Reinterpret<int, short>();
 | |
| 
 | |
|             // Modifies the first 4 bytes of the array.
 | |
|             shorts[0] = 1;
 | |
|             shorts[1] = 1;
 | |
| 
 | |
|             int val = ints[0];   // val is 65537 (2^16 + 2^0)
 | |
| 
 | |
|             // Like with other aliased collections, only the original
 | |
|             // needs to be disposed.
 | |
|             ints.Dispose();
 | |
| 
 | |
|             // Throws an ObjectDisposedException because disposing
 | |
|             // the original deallocates the aliased memory.
 | |
|             shorts[0] = 1;
 | |
|             #endregion
 | |
|         }
 | |
| 
 | |
|         public void foo3()
 | |
|         {
 | |
|             #region allocation_dispose_job
 | |
|             NativeArray<int> nums = new NativeArray<int>(10, Allocator.TempJob);
 | |
| 
 | |
|             // Create and schedule a job that uses the array.
 | |
|             ExampleJob job = new ExampleJob { Nums = nums };
 | |
|             JobHandle handle = job.Schedule();
 | |
| 
 | |
|             // Create and schedule a job that will dispose the array after the ExampleJob has run.
 | |
|             // Returns the handle of the new job.
 | |
|             handle = nums.Dispose(handle);
 | |
|             #endregion
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     struct ExampleJob : IJob
 | |
|     {
 | |
|         public NativeArray<int> Nums;
 | |
|         public void Execute()
 | |
|         {
 | |
|             throw new System.NotImplementedException();
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |