public void T8() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); s.BindBuffer(arr, 2, 3); Assert.AreEqual(3, s.Length); Assert.AreEqual(0, s.Position); Assert.AreEqual(3, s.ReadByte()); Assert.AreEqual(1, s.Position); Assert.AreEqual(4, s.ReadByte()); Assert.AreEqual(2, s.Position); Assert.AreEqual(5, s.ReadByte()); Assert.AreEqual(3, s.Position); Assert.AreEqual(-1, s.ReadByte()); Assert.AreEqual(3, s.Position); var arr2 = new byte[] { 101, 102, 103, 104, 105, 106, 107, 108, 109, 110 }; s.BindBuffer(arr2, 2, 3); Assert.AreEqual(3, s.Length); Assert.AreEqual(0, s.Position); Assert.AreEqual(103, s.ReadByte()); Assert.AreEqual(1, s.Position); Assert.AreEqual(104, s.ReadByte()); Assert.AreEqual(2, s.Position); Assert.AreEqual(105, s.ReadByte()); Assert.AreEqual(3, s.Position); Assert.AreEqual(-1, s.ReadByte()); Assert.AreEqual(3, s.Position); }
public void T6() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); var ms = new MemoryStream(arr, 2, 3); s.BindBuffer(arr, 2, 3); Assert.AreEqual(3, ms.Length); Assert.AreEqual(3, s.Length); s.Seek(1, SeekOrigin.Current); ms.Seek(1, SeekOrigin.Current); Assert.AreEqual(1, ms.Position); Assert.AreEqual(4, ms.ReadByte()); Assert.AreEqual(1, s.Position); Assert.AreEqual(4, s.ReadByte()); s.Seek(-1, SeekOrigin.Current); ms.Seek(-1, SeekOrigin.Current); Assert.AreEqual(1, ms.Position); Assert.AreEqual(4, ms.ReadByte()); Assert.AreEqual(1, s.Position); Assert.AreEqual(4, s.ReadByte()); }
public void T4() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); var ms = new MemoryStream(arr, 2, 3); s.BindBuffer(arr, 2, 3); Aver.AreEqual(3, ms.Length); Aver.AreEqual(3, s.Length); s.Seek(-1, SeekOrigin.End); ms.Seek(-1, SeekOrigin.End); Aver.AreEqual(2, ms.Position); Aver.AreEqual(5, ms.ReadByte()); Aver.AreEqual(2, s.Position); Aver.AreEqual(5, s.ReadByte()); s.Seek(0, SeekOrigin.End); ms.Seek(0, SeekOrigin.End); Aver.AreEqual(3, ms.Position); Aver.AreEqual(-1, ms.ReadByte()); Aver.AreEqual(3, s.Position); Aver.AreEqual(-1, s.ReadByte()); }
public void T7() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); Assert.Throws <NFXIOException>(() => s.BindBuffer(arr, 22, 3)); Assert.Throws <NFXIOException>(() => s.BindBuffer(arr, 0, 23)); Assert.Throws <NFXIOException>(() => s.BindBuffer(arr, -1, 1)); Assert.Throws <NFXIOException>(() => s.BindBuffer(arr, 0, -1)); }
public override BufferSegmentReadingStream GetReadStream(int addr, int count) { BufferSegmentReadingStream result = ts_ReadStream; if (result == null) { result = new BufferSegmentReadingStream(); ts_ReadStream = result; } result.UnsafeBindBuffer(m_Data, addr, count); return(result); }
public override BufferSegmentReadingStream GetReadStream(int addr, int count) { var buf = new byte[count]; ReadBuffer(addr, buf, 0, count);//todo Add semantic for unsafe pointer to not make copies BufferSegmentReadingStream result = ts_ReadStream; if (result == null) { result = new BufferSegmentReadingStream(); ts_ReadStream = result; } result.UnsafeBindBuffer(buf, 0, count); //todo Bind low-level memory accessor not to make any copies return(result); }
public void T3_2() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); s.BindBuffer(arr, 2, 3); Assert.AreEqual(0, s.Position); Assert.AreEqual(3, s.Length); var a2 = new byte[10]; Assert.AreEqual(2, s.Read(a2, 1, 2)); Assert.AreEqual(0, a2[0]); Assert.AreEqual(3, a2[1]); Assert.AreEqual(4, a2[2]); Assert.AreEqual(0, a2[3]); Assert.AreEqual(2, s.Position); }
public void T2() { var arr = new byte[] { 1, 2, 3, 4, 5 }; var s = new BufferSegmentReadingStream(); s.BindBuffer(arr, 0, 3); Assert.AreEqual(3, s.Length); Assert.AreEqual(0, s.Position); Assert.AreEqual(1, s.ReadByte()); Assert.AreEqual(1, s.Position); Assert.AreEqual(2, s.ReadByte()); Assert.AreEqual(2, s.Position); Assert.AreEqual(3, s.ReadByte()); Assert.AreEqual(3, s.Position); Assert.AreEqual(-1, s.ReadByte()); Assert.AreEqual(3, s.Position); }
/// <summary> /// Deserializes data document from the specified byte[] using thread-local caching optimizations /// </summary> public static void Deserialize(TypedDoc doc, byte[] data, int offset) { var stream = ts_ReadStream; var reader = ts_Reader; if (stream == null) { stream = new BufferSegmentReadingStream(); reader = SlimFormat.Instance.GetReadingStreamer(); reader.BindStream(stream); ts_ReadStream = stream; ts_Reader = reader; } stream.BindBuffer(data, offset, data.Length - offset); try { Deserialize(doc, reader, true); } finally { stream.UnsafeBindBuffer(null, 0, 0); } }