/// <inheritdoc />
        public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None)
        {
            while (operatingThread != Thread.CurrentThread && operatingThread != null)
            {
            }
            Guard.MustBeGreaterThanOrEqualTo(length, 0, nameof(length));

            ArrayPool <byte> pool = this.GetArrayPool(length);

            byte[] byteArray = pool.Rent(length);
            if (RawData != null && RawData.Length > 0)
            {
                int copyLength = Math.Min(RawData.Length, byteArray.Length);
                Array.Copy(RawData, 0, byteArray, 0, copyLength);
                int count = cache.Length - copyLength;
                if (count > 0)
                {
                    byte[] cache = RawData;
                    RawData = new byte[count];
                    Array.Copy(cache, copyLength, RawData, 0, RawData.Length);
                }
                else
                {
                    RawData = null;
                }
            }
            var buffer = new ManagedByteBuffer(byteArray, length, pool);

            if (options == AllocationOptions.Clean)
            {
                buffer.GetSpan().Clear();
            }
            return(buffer);
        }
Пример #2
0
        /// <inheritdoc />
        internal override IManagedByteBuffer AllocateManagedByteBuffer(int length, bool clear)
        {
            ArrayPool <byte> pool = this.GetArrayPool(length);

            byte[] byteArray = pool.Rent(length);

            var buffer = new ManagedByteBuffer(byteArray, length, pool);

            if (clear)
            {
                buffer.Clear();
            }

            return(buffer);
        }
Пример #3
0
        /// <inheritdoc />
        public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None)
        {
            ArrayPool <byte> pool = this.GetArrayPool(length);

            byte[] byteArray = pool.Rent(length);

            var buffer = new ManagedByteBuffer(byteArray, length, pool);

            if (options == AllocationOptions.Clean)
            {
                buffer.GetSpan().Clear();
            }

            return(buffer);
        }
Пример #4
0
        /// <inheritdoc />
        public override IManagedByteBuffer AllocateManagedByteBuffer(int length, AllocationOptions options = AllocationOptions.None)
        {
            Guard.MustBeGreaterThanOrEqualTo(length, 0, nameof(length));

            ArrayPool <byte> pool = this.GetArrayPool(length);

            byte[] byteArray = pool.Rent(length);

            var buffer = new ManagedByteBuffer(byteArray, length, pool);

            if (options == AllocationOptions.Clean)
            {
                buffer.GetSpan().Clear();
            }

            return(buffer);
        }