//#define USE_NOT_BURST_COMPATIBLE_EXTENSIONS using System; using Unity.Collections.LowLevel.Unsafe; namespace Unity.Collections.NotBurstCompatible { /// /// Provides some extension methods for various collections. /// public static class Extensions { /// /// Returns a new managed array with all the elements copied from a set. /// /// The type of elements. /// The set whose elements are copied to the array. /// A new managed array with all the elements copied from a set. [ExcludeFromBurstCompatTesting("Returns managed array")] public static T[] ToArray(this NativeHashSet set) where T : unmanaged, IEquatable { var array = set.ToNativeArray(Allocator.TempJob); var managed = array.ToArray(); array.Dispose(); return managed; } /// /// Returns a new managed array with all the elements copied from a set. /// /// The type of elements. /// The set whose elements are copied to the array. /// A new managed array with all the elements copied from a set. [ExcludeFromBurstCompatTesting("Returns managed array")] public static T[] ToArray(this NativeParallelHashSet set) where T : unmanaged, IEquatable { var array = set.ToNativeArray(Allocator.TempJob); var managed = array.ToArray(); array.Dispose(); return managed; } /// /// Returns a new managed array which is a copy of this list. /// /// The type of elements. /// The list to copy. /// A new managed array which is a copy of this list. [ExcludeFromBurstCompatTesting("Returns managed array")] public static T[] ToArrayNBC(this NativeList list) where T : unmanaged { return list.AsArray().ToArray(); } /// /// Clears this list and then copies all the elements of an array to this list. /// /// The type of elements. /// This list. /// The managed array to copy from. [ExcludeFromBurstCompatTesting("Takes managed array")] public static void CopyFromNBC(this NativeList list, T[] array) where T : unmanaged { list.Clear(); list.Resize(array.Length, NativeArrayOptions.UninitializedMemory); NativeArray na = list.AsArray(); na.CopyFrom(array); } } }