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); }
/// <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); } }
/// <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); }
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) { } }
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); }
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(); }
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) { } }
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); }
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); }
/// <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); }