Ejemplo n.º 1
0
        public void CouldCreateBinaryConverter()
        {
            var converter = GetConverter <PreservedBuffer <byte>[]>();

            Assert.AreEqual(0, converter.Size);
            var buffers = new[] { BufferPool.PreserveMemory(10) };

            //Assert.Throws<NotImplementedException>(() =>
            //{
            converter.SizeOf(buffers, 0, 10, out var temp);
            //});
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Return a PreservedBuffer backed by a pooled array.
        /// The buffer owns the array which is different from GetBuffer.
        /// The buffer could be used after this stream is disposed.
        /// </summary>
        /// <returns></returns>
        public PreservedBuffer <byte> ToPreservedBuffer()
        {
            // TODO For now I just need this API, but later will switch from copying
            // to PreservedBuffers as blocks, so for single or large block we could return without copy
            CheckDisposed();
            var buffer = BufferPool.PreserveMemory(checked ((int)_length)); // PreservedBuffer does not support large arrays, will throw

            if (buffer.Buffer.TryGetArray(out var asegm))
            {
                InternalRead(asegm.Array, asegm.Offset, _length, 0);
                return(buffer);
            }
            ThrowHelper.ThrowInvalidOperationException("Expecting array");
            return(default(PreservedBuffer <byte>));
        }