Struct UnsafeList
An unmanaged, untyped, resizable list, without any thread safety check features.
Namespace: Unity.Collections.LowLevel.Unsafe
Syntax
public struct UnsafeList : INativeDisposable, IDisposable
Constructors
UnsafeList(Int32, Int32, Int32, Allocator, NativeArrayOptions)
Constructs a new container with the specified initial capacity and type of memory allocation.
Declaration
public UnsafeList(int sizeOf, int alignOf, int initialCapacity, Allocator allocator, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory)
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | sizeOf | Size of element. |
| Int32 | alignOf | Alignment of element. |
| Int32 | initialCapacity | The initial capacity of the list. If the list grows larger than its capacity, the internal array is copied to a new, larger array. |
| Allocator | allocator | A member of the Unity.Collections.Allocator enumeration. |
| NativeArrayOptions | options | Memory should be cleared on allocation or left uninitialized. |
UnsafeList(Int32, Int32, Int32, AllocatorManager.AllocatorHandle, NativeArrayOptions)
Constructs a new container with the specified initial capacity and type of memory allocation.
Declaration
public UnsafeList(int sizeOf, int alignOf, int initialCapacity, AllocatorManager.AllocatorHandle allocator, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory)
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | sizeOf | Size of element. |
| Int32 | alignOf | Alignment of element. |
| Int32 | initialCapacity | The initial capacity of the list. If the list grows larger than its capacity, the internal array is copied to a new, larger array. |
| AllocatorManager.AllocatorHandle | allocator | A member of the Unity.Collections.Allocator enumeration. |
| NativeArrayOptions | options | Memory should be cleared on allocation or left uninitialized. |
UnsafeList(Void*, Int32)
Constructs container as view into memory.
Declaration
public UnsafeList(void *ptr, int length)
Parameters
| Type | Name | Description |
|---|---|---|
| Void* | ptr | Pointer to data. |
| Int32 | length | Lenght of data in bytes. |
UnsafeList(Allocator)
Constructs a new container with type of memory allocation.
Declaration
public UnsafeList(Allocator allocator)
Parameters
| Type | Name | Description |
|---|---|---|
| Allocator | allocator | A member of the Unity.Collections.Allocator enumeration. |
Remarks
The list initially has a capacity of one. To avoid reallocating memory for the list, specify sufficient capacity up front.
Fields
Allocator
Declaration
public AllocatorManager.AllocatorHandle Allocator
Field Value
| Type | Description |
|---|---|
| AllocatorManager.AllocatorHandle |
Capacity
Declaration
public int Capacity
Field Value
| Type | Description |
|---|---|
| Int32 |
Length
Declaration
public int Length
Field Value
| Type | Description |
|---|---|
| Int32 |
Ptr
Declaration
[NativeDisableUnsafePtrRestriction]
public void *Ptr
Field Value
| Type | Description |
|---|---|
| Void* |
Properties
IsCreated
Reports whether memory for the container is allocated.
Declaration
public bool IsCreated { get; }
Property Value
| Type | Description |
|---|---|
| Boolean | True if this container object's internal storage has been allocated. |
Remarks
Note that the container storage is not created if you use the default constructor. You must specify at least an allocation type to construct a usable container.
Warning: the IsCreated property can't be used to determine whether a copy of a container is still valid.
If you dispose any copy of the container, the container storage is deallocated. However, the properties of
the other copies of the container (including the original) are not updated. As a result the IsCreated property
of the copies still return true even though the container storage has been deallocated.
IsEmpty
Reports whether container is empty.
Declaration
public bool IsEmpty { get; }
Property Value
| Type | Description |
|---|---|
| Boolean | True if this container empty. |
Methods
Add<T>(T)
Adds an element to the list.
Declaration
public void Add<T>(T value)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| T | value | The value to be added at the end of the list. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
If the list has reached its current capacity, it copies the original, internal array to a new, larger array, and then deallocates the original.
AddNoResize<T>(T)
Adds an element to the list.
Declaration
public void AddNoResize<T>(T value)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| T | value | The value to be added at the end of the list. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
If the list has reached its current capacity, internal array won't be resized, and exception will be thrown.
AddRange<T>(Void*, Int32)
Adds elements from a buffer to this list.
Declaration
public void AddRange<T>(void *ptr, int length)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Void* | ptr | A pointer to the buffer. |
| Int32 | length | The number of elements to add to the list. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
AddRange<T>(UnsafeList)
Adds elements from a list to this list.
Declaration
public void AddRange<T>(UnsafeList list)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| UnsafeList | list | Other container to copy elements from. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
If the list has reached its current capacity, it copies the original, internal array to a new, larger array, and then deallocates the original.
AddRangeNoResize<T>(Void*, Int32)
Adds elements from a buffer to this list.
Declaration
public void AddRangeNoResize<T>(void *ptr, int length)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Void* | ptr | A pointer to the buffer. |
| Int32 | length | The number of elements to add to the list. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
If the list has reached its current capacity, internal array won't be resized, and exception will be thrown.
AddRangeNoResize<T>(UnsafeList)
Adds elements from a list to this list.
Declaration
public void AddRangeNoResize<T>(UnsafeList list)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| UnsafeList | list | Other container to copy elements from. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
If the list has reached its current capacity, internal array won't be resized, and exception will be thrown.
AsParallelReader()
Returns parallel reader instance.
Declaration
public UnsafeList.ParallelReader AsParallelReader()
Returns
| Type | Description |
|---|---|
| UnsafeList.ParallelReader | Parallel reader instance. |
AsParallelWriter()
Returns parallel writer instance.
Declaration
public UnsafeList.ParallelWriter AsParallelWriter()
Returns
| Type | Description |
|---|---|
| UnsafeList.ParallelWriter | Parallel writer instance. |
Clear()
Clears the container.
Declaration
public void Clear()
Remarks
The container capacity remains unchanged.
Contains<T>(T)
Determines whether an element is in the list.
Declaration
public bool Contains<T>(T value)
where T : struct, IEquatable<T>
Parameters
| Type | Name | Description |
|---|---|---|
| T | value |
Returns
| Type | Description |
|---|---|
| Boolean | True, if element is found. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Create(Int32, Int32, Int32, Allocator, NativeArrayOptions)
Creates a new container with the specified initial capacity and type of memory allocation.
Declaration
public static UnsafeList*Create(int sizeOf, int alignOf, int initialCapacity, Allocator allocator, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory)
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | sizeOf | Size of element. |
| Int32 | alignOf | Alignment of element. |
| Int32 | initialCapacity | The initial capacity of the list. If the list grows larger than its capacity, the internal array is copied to a new, larger array. |
| Allocator | allocator | A member of the Unity.Collections.Allocator enumeration. |
| NativeArrayOptions | options | Memory should be cleared on allocation or left uninitialized. |
Returns
| Type | Description |
|---|---|
| UnsafeList* | New initialized container. |
Destroy(UnsafeList*)
Destroys container.
Declaration
public static void Destroy(UnsafeList*listData)
Parameters
| Type | Name | Description |
|---|---|---|
| UnsafeList* | listData | Container to destroy. |
Dispose()
Disposes of this container and deallocates its memory immediately.
Declaration
public void Dispose()
Dispose(JobHandle)
Safely disposes of this container and deallocates its memory when the jobs that use it have completed.
Declaration
public JobHandle Dispose(JobHandle inputDeps)
Parameters
| Type | Name | Description |
|---|---|---|
| JobHandle | inputDeps | The job handle or handles for any scheduled jobs that use this container. |
Returns
| Type | Description |
|---|---|
| JobHandle | A new job handle containing the prior handles as well as the handle for the job that deletes the container. |
Implements
Remarks
You can call this function dispose of the container immediately after scheduling the job. Pass
the JobHandle returned by
the Job.Schedule
method using the jobHandle parameter so the job scheduler can dispose the container after all jobs
using it have run.
IndexOf<T>(T)
Searches for the specified element in list.
Declaration
public int IndexOf<T>(T value)
where T : struct, IEquatable<T>
Parameters
| Type | Name | Description |
|---|---|---|
| T | value |
Returns
| Type | Description |
|---|---|
| Int32 | The zero-based index of the first occurrence element if found, otherwise returns -1. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
InsertRangeWithBeginEnd<T>(Int32, Int32)
Inserts a number of items into a container at a specified zero-based index.
Declaration
public void InsertRangeWithBeginEnd<T>(int begin, int end)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | begin | The zero-based index at which the new elements should be inserted. |
| Int32 | end | The zero-based index just after where the elements should be removed. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Exceptions
| Type | Condition |
|---|---|
| ArgumentException | Thrown if end argument is less than begin argument. |
| ArgumentOutOfRangeException | Thrown if begin or end arguments are not positive or out of bounds. |
RemoveAt<T>(Int32)
Truncates the list by removing the item at the specified index, and shifting all remaining items to replace removed item. The list is shortened by one.
Declaration
public void RemoveAt<T>(int index)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | index | The index of the item to delete. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
This method of removing item is useful only in case when list is ordered and user wants to preserve order
in list after removal In majority of cases is not important and user should use more performant RemoveAtSwapBack.
RemoveAtSwapBack<T>(Int32)
Truncates the list by replacing the item at the specified index with the last item in the list. The list is shortened by one.
Declaration
public void RemoveAtSwapBack<T>(int index)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | index | The index of the item to delete. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Exceptions
| Type | Condition |
|---|---|
| ArgumentException | Thrown if end argument is less than begin argument. |
| ArgumentOutOfRangeException | Thrown if begin or end arguments are not positive or out of bounds. |
RemoveRangeSwapBackWithBeginEnd<T>(Int32, Int32)
Truncates the list by replacing the item at the specified index range with the items from the end the list. The list is shortened by number of elements in range.
Declaration
public void RemoveRangeSwapBackWithBeginEnd<T>(int begin, int end)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | begin | The first index of the item to remove. |
| Int32 | end | The index past-the-last item to remove. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Exceptions
| Type | Condition |
|---|---|
| ArgumentException | Thrown if end argument is less than begin argument. |
| ArgumentOutOfRangeException | Thrown if begin or end arguments are not positive or out of bounds. |
RemoveRangeWithBeginEnd<T>(Int32, Int32)
Truncates the list by removing the items at the specified index range, and shifting all remaining items to replace removed items. The list is shortened by number of elements in range.
Declaration
public void RemoveRangeWithBeginEnd<T>(int begin, int end)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | begin | The first index of the item to remove. |
| Int32 | end | The index past-the-last item to remove. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
Remarks
This method of removing item(s) is useful only in case when list is ordered and user wants to preserve order
in list after removal In majority of cases is not important and user should use more performant RemoveRangeSwapBackWithBeginEnd.
Exceptions
| Type | Condition |
|---|---|
| ArgumentException | Thrown if end argument is less than begin argument. |
| ArgumentOutOfRangeException | Thrown if begin or end arguments are not positive or out of bounds. |
Resize(Int32, Int32, Int32, NativeArrayOptions)
Changes the list length, resizing if necessary.
Declaration
public void Resize(int sizeOf, int alignOf, int length, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory)
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | sizeOf | Size of element. |
| Int32 | alignOf | Alignment of element. |
| Int32 | length | The new length of the list. |
| NativeArrayOptions | options | Memory should be cleared on allocation or left uninitialized. |
Resize<T>(Int32, NativeArrayOptions)
Changes the list length, resizing if necessary.
Declaration
public void Resize<T>(int length, NativeArrayOptions options = NativeArrayOptions.UninitializedMemory)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | length | The new length of the list. |
| NativeArrayOptions | options | Memory should be cleared on allocation or left uninitialized. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
SetCapacity<T>(Int32)
Set the number of items that can fit in the container.
Declaration
public void SetCapacity<T>(int capacity)
where T : struct
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | capacity | The number of items that the container can hold before it resizes its internal storage. |
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |
TrimExcess<T>()
Sets the capacity to the actual number of elements in the container.
Declaration
public void TrimExcess<T>()
where T : struct
Type Parameters
| Name | Description |
|---|---|
| T | Source type of elements |