Example #1
0
        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);
        }
Example #2
0
        /// <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;
        }