static public ClearToValueAllocator New <T>(byte ClearValue, ref T parent) where T : unmanaged, AllocatorManager.IAllocator { var temp = new ClearToValueAllocator(); temp.m_parent = parent.Handle; temp.m_clearValue = ClearValue; #if ENABLE_UNITY_COLLECTIONS_CHECKS AllocatorManager.Register(ref temp); parent.Handle.AddChildAllocator(temp.m_handle); #endif return(temp); }
public void CustomAllocatorUnsafeListWorks() { AllocatorManager.Initialize(); var parent = AllocatorManager.Persistent; var allocator = ClearToValueAllocator.New(0xFE, ref parent); allocator.Register(); for (byte ClearValue = 0; ClearValue < 0xF; ++ClearValue) { allocator.m_clearValue = ClearValue; var unsafelist = new UnsafeList <byte>(1, allocator.Handle); const int kLength = 100; unsafelist.Resize(kLength); for (int i = 0; i < kLength; ++i) { Assert.AreEqual(ClearValue, unsafelist[i]); } unsafelist.Dispose(); } allocator.Dispose(); AllocatorManager.Shutdown(); }
public void UserDefinedAllocatorWorks() { AllocatorManager.Initialize(); var parent = AllocatorManager.Persistent; var allocator = ClearToValueAllocator.New(0, ref parent); for (byte ClearValue = 0; ClearValue < 0xF; ++ClearValue) { allocator.m_clearValue = ClearValue; const int kLength = 100; for (int i = 1; i < kLength; ++i) { var block = allocator.AllocateBlock(default(int), i); Assert.AreNotEqual(IntPtr.Zero, block.Range.Pointer); Assert.AreEqual(i, block.Range.Items); Assert.AreEqual(UnsafeUtility.SizeOf <int>(), block.BytesPerItem); Assert.AreEqual(UnsafeUtility.AlignOf <int>(), block.Alignment); allocator.FreeBlock(ref block); } } allocator.Dispose(); AllocatorManager.Shutdown(); }