コード例 #1
0
        public void ViewIO()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            // Check positions are independant
            tss.Position = 100;
            Assert.AreEqual(0, altView.Position);
            Assert.AreEqual(100, tss.Position);

            // Check I/O is synchronous
            byte[] buffer = new byte[200];
            tss.WriteByte(99);
            altView.Read(buffer, 0, 200);
            Assert.AreEqual(99, buffer[100]);

            // Check positions are updated correctly
            Assert.AreEqual(200, altView.Position);
            Assert.AreEqual(101, tss.Position);
        }
コード例 #2
0
        /// <summary>
        /// Sets the length of the stream.
        /// </summary>
        /// <param name="value">The new length.</param>
        public override void SetLength(long value)
        {
            CheckFrozen();

            if (_diffStream != null)
            {
                _diffStream.SetLength(value);
            }
            else
            {
                _baseStream.SetLength(value);
            }
        }
コード例 #3
0
        /// <summary>
        /// Takes a snapshot of the current stream contents.
        /// </summary>
        public void Snapshot()
        {
            if (_diffStream != null)
            {
                throw new InvalidOperationException("Already have a snapshot");
            }

            _savedPosition = _position;

            _diffExtents = new List <StreamExtent>();
            _diffStream  = new SparseMemoryStream();
            _diffStream.SetLength(_baseStream.Length);
        }
コード例 #4
0
        public void ChangeLengthFails()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();
            memStream.SetLength(2);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);
            Assert.AreEqual(2, tss.Length);

            try
            {
                tss.SetLength(10);
                Assert.Fail("SetLength should fail");
            }
            catch (NotSupportedException)
            {
            }
        }
コード例 #5
0
        public void Seek()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            tss.Seek(10, SeekOrigin.Begin);
            Assert.AreEqual(10, tss.Position);

            tss.Seek(10, SeekOrigin.Current);
            Assert.AreEqual(20, tss.Position);

            tss.Seek(-10, SeekOrigin.End);
            Assert.AreEqual(1014, tss.Position);
        }
コード例 #6
0
        public void DisposeView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            altView.Dispose();

            tss.ReadByte();

            SparseStream altView2 = tss.OpenView();

            altView2.ReadByte();
        }
コード例 #7
0
        public void ChangeLengthFails()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();

            memStream.SetLength(2);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            Assert.AreEqual(2, tss.Length);

            try
            {
                tss.SetLength(10);
                Assert.Fail("SetLength should fail");
            }
            catch (NotSupportedException)
            {
            }
        }
コード例 #8
0
        public void Dispose_StopsView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Dispose();

            try
            {
                altView.ReadByte();
                Assert.Fail("Disposed stream didn't stop view");
            }
            catch (ObjectDisposedException)
            {
            }
        }
コード例 #9
0
        public void Extents()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);

            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Position = 100;
            tss.WriteByte(99);

            List <StreamExtent> extents = new List <StreamExtent>(altView.Extents);

            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);

            extents = new List <StreamExtent>(altView.GetExtentsInRange(10, 300));
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);
        }
コード例 #10
0
        public void DisposeView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();
            altView.Dispose();

            tss.ReadByte();

            SparseStream altView2 = tss.OpenView();
            altView2.ReadByte();
        }
コード例 #11
0
        public void ViewIO()
        {
            SparseMemoryStream memStream = new SparseMemoryStream();
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            // Check positions are independant
            tss.Position = 100;
            Assert.AreEqual(0, altView.Position);
            Assert.AreEqual(100, tss.Position);

            // Check I/O is synchronous
            byte[] buffer = new byte[200];
            tss.WriteByte(99);
            altView.Read(buffer, 0, 200);
            Assert.AreEqual(99, buffer[100]);

            // Check positions are updated correctly
            Assert.AreEqual(200, altView.Position);
            Assert.AreEqual(101, tss.Position);
        }
コード例 #12
0
        public void Seek()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            tss.Seek(10, SeekOrigin.Begin);
            Assert.AreEqual(10, tss.Position);

            tss.Seek(10, SeekOrigin.Current);
            Assert.AreEqual(20, tss.Position);

            tss.Seek(-10, SeekOrigin.End);
            Assert.AreEqual(1014, tss.Position);
        }
コード例 #13
0
        public void Extents()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();

            tss.Position = 100;
            tss.WriteByte(99);

            List<StreamExtent> extents = new List<StreamExtent>(altView.Extents);
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);

            extents = new List<StreamExtent>(altView.GetExtentsInRange(10, 300));
            Assert.AreEqual(1, extents.Count);
            Assert.AreEqual(100, extents[0].Start);
            Assert.AreEqual(1, extents[0].Length);
        }
コード例 #14
0
        public void Dispose_StopsView()
        {
            SparseMemoryStream memStream = new SparseMemoryStream(new SparseMemoryBuffer(1), FileAccess.ReadWrite);
            memStream.SetLength(1024);

            ThreadSafeStream tss = new ThreadSafeStream(memStream);

            SparseStream altView = tss.OpenView();
            tss.Dispose();

            try
            {
                altView.ReadByte();
                Assert.Fail("Disposed stream didn't stop view");
            }
            catch (ObjectDisposedException)
            {
            }
        }
コード例 #15
0
ファイル: SnapshotStream.cs プロジェクト: JGTM2016/discutils
        /// <summary>
        /// Takes a snapshot of the current stream contents.
        /// </summary>
        public void Snapshot()
        {
            if (_diffStream != null)
            {
                throw new InvalidOperationException("Already have a snapshot");
            }

            _savedPosition = _position;

            _diffExtents = new List<StreamExtent>();
            _diffStream = new SparseMemoryStream();
            _diffStream.SetLength(_baseStream.Length);
        }