public CommandRingQueue(DynamicBuffer <B> dynamicBuffer) { int headSize = UnsafeUtility.SizeOf <CommandRingQueueHead>(); if (headSize > dynamicBuffer.Length) { throw new InvalidOperationException("无法创建队列,Buffer长度不对: err -1"); } _head = (CommandRingQueueHead *)dynamicBuffer.GetUnsafePtr(); if (UnsafeUtility.SizeOf <T>() * _head->Capacity != dynamicBuffer.Length - headSize) { throw new InvalidOperationException("无法创建队列,Buffer长度不对.err -2"); } _data = (T *)((byte *)dynamicBuffer.GetUnsafePtr() + headSize); }
/// <summary> /// 初始化队列 /// </summary> /// <param name="dynamicBuffer"></param> /// <param name="capacity"></param> public static void Init(DynamicBuffer <B> dynamicBuffer, int capacity = 64) { if (UnsafeUtility.SizeOf <B>() != 1) { throw new InvalidOperationException("BufferElementData Size 只能是1字节"); } // 分配大小 int size = UnsafeUtility.SizeOf <CommandRingQueueHead>() + UnsafeUtility.SizeOf <T>() * capacity; dynamicBuffer.ResizeUninitialized(size); CommandRingQueueHead *head = (CommandRingQueueHead *)dynamicBuffer.GetUnsafePtr(); head->Capacity = capacity; head->Count = 0; head->Read = 0; head->Write = 0; }