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
|
|
}
|
|
}
|