Queue.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.Runtime.CompilerServices;
  3. namespace NativeCollection
  4. {
  5. public unsafe class Queue<T> : INativeCollectionClass where T : unmanaged
  6. {
  7. private UnsafeType.Queue<T>* _queue;
  8. private const int _defaultCapacity = 10;
  9. private int _capacity;
  10. public Queue(int capacity = 10)
  11. {
  12. _capacity = capacity;
  13. _queue = UnsafeType.Queue<T>.Create(_capacity);
  14. IsDisposed = false;
  15. }
  16. public int Count => _queue->Count;
  17. public void Dispose()
  18. {
  19. if (IsDisposed)
  20. {
  21. return;
  22. }
  23. if (_queue != null)
  24. {
  25. _queue->Dispose();
  26. NativeMemoryHelper.Free(_queue);
  27. NativeMemoryHelper.RemoveNativeMemoryByte(Unsafe.SizeOf<UnsafeType.Queue<T>>());
  28. IsDisposed = true;
  29. }
  30. }
  31. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  32. public void Clear()
  33. {
  34. _queue->Clear();
  35. }
  36. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  37. public void Enqueue(in T item)
  38. {
  39. _queue->Enqueue(item);
  40. }
  41. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  42. public T Dequeue()
  43. {
  44. return _queue->Dequeue();
  45. }
  46. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  47. public bool TryDequeue(out T result)
  48. {
  49. var value = _queue->TryDequeue(out result);
  50. return value;
  51. }
  52. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  53. public T Peek()
  54. {
  55. return _queue->Peek();
  56. }
  57. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  58. public bool TryPeek(out T result)
  59. {
  60. var value = _queue->TryPeek(out result);
  61. return value;
  62. }
  63. ~Queue()
  64. {
  65. Dispose();
  66. }
  67. public void ReInit()
  68. {
  69. if (IsDisposed)
  70. {
  71. _queue = UnsafeType.Queue<T>.Create(_capacity);
  72. IsDisposed = false;
  73. }
  74. }
  75. public bool IsDisposed { get; private set; }
  76. }
  77. }