public void TestIndexAccess() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char[] exptected = "I lovHell".ToCharArray(); for (int i = source.Count - 1; i >= 0; i--) { Assert.AreEqual(exptected[i], source[i]); } for (int i = 0; i < source.Count; i++) { Assert.AreEqual(exptected[i], source[i]); } source.RemoveSegmentAt(0); source.RemoveSegmentAt(0); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); for (int i = 0; i < source.Count; i++) { Assert.AreEqual(exptected[i], source[i], i + " is expected!"); } }
public void TestIndexAccess() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char[] exptected = "I lovHell".ToCharArray(); for (int i = source.Count - 1; i >= 0; i--) { Assert.AreEqual(exptected[i], source[i]); } for (int i = 0; i < source.Count; i++) { Assert.AreEqual(exptected[i], source[i]); } source.RemoveSegmentAt(0); source.RemoveSegmentAt(0); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); for (int i = 0; i < source.Count; i++) { Assert.AreEqual(exptected[i], source[i], i + " is expected!"); } }
public void TestEndsWith() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(true, source.EndsWith("Hell".ToCharArray())); }
public void TestToArray() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char[] exptected = "I lovHell".ToCharArray(); Assert.AreEqual(exptected, source.ToArrayData()); Assert.AreEqual("He", new string(source.ToArrayData(5, 2))); Assert.AreEqual("ovHe", new string(source.ToArrayData(3, 4))); }
public void TestIndexOf() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 3, 7); source.AddSegment("Hello world!".ToCharArray(), 0, 4); //string exptected = "ove youHell"; Assert.AreEqual(-1, source.IndexOf('I')); Assert.AreEqual(9, source.IndexOf('l')); Assert.AreEqual(0, source.IndexOf('o')); Assert.AreEqual(1, source.IndexOf('v')); }
public void TestIndexAccess2() { ArraySegmentList <char> sourceA = new ArraySegmentList <char>(); List <char> sourceB = new List <char>(); char[] element = null; for (var i = 0; i < 100; i++) { element = Guid.NewGuid().ToString().ToCharArray(); sourceA.AddSegment(element, 0, element.Length); sourceB.AddRange(element); } Random rd = new Random(); for (int i = 0; i < 1000; i++) { int index = rd.Next(0, sourceA.Count - 1); Assert.AreEqual(sourceB[index], sourceA[index]); } int testCount = 10000; GC.Collect(); Stopwatch watch = new Stopwatch(); watch.Start(); char tt = ' '; for (var i = 0; i < testCount; i++) { int index = rd.Next(0, sourceA.Count - 1); tt = sourceA[index]; } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { int index = rd.Next(0, sourceA.Count - 1); tt = sourceB[index]; } Console.Write(tt); watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); }
public void TestDecodeMaskPerformance() { ArraySegmentList source = new ArraySegmentList(); for (var i = 0; i < 100; i++) { var element = Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()); source.AddSegment(element, 0, element.Length); } byte[] mask = new byte[] { source[5], source[100], source[150], source[200] }; int testCount = 1000; GC.Collect(); Stopwatch watch = new Stopwatch(); watch.Start(); for (var i = 0; i < testCount; i++) { source.DecodeMask(mask, 100, source.Count - 100); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { var data = source.ToArrayData(100, source.Count - 100); DecodeMask(data, mask, 0, data.Length); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { DecodeMask(source, mask, 100, source.Count - 100); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); }
protected void AddArraySegment( ArraySegmentList segments, byte[] buffer, int offset, int length, bool isReusableBuffer) { segments.AddSegment(buffer, offset, length, isReusableBuffer); }
private void AddSegment(byte[] segment, int offset, int length, bool toBeCopied) { if (m_Buffer == null) { m_Buffer = new ArraySegmentList(); } m_Buffer.AddSegment(segment, offset, length, toBeCopied); }
public void TestCount() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(9, source.Count); source.RemoveSegmentAt(0); Assert.AreEqual(4, source.Count); source.RemoveSegmentAt(0); Assert.AreEqual(0, source.Count); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(9, source.Count); }
public void TestRemoveSegment() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment(new ArraySegment <char>("I love you,".ToCharArray(), 0, 5)); source.AddSegment(new ArraySegment <char>("Hello world!".ToCharArray(), 0, 4)); Assert.AreEqual(9, source.Count); Assert.AreEqual(2, source.SegmentCount); source.RemoveSegmentAt(1); Assert.AreEqual(5, source.Count); Assert.AreEqual(1, source.SegmentCount); char[] exptected = "I lov".ToCharArray(); for (var i = 0; i < exptected.Length; i++) { Assert.AreEqual(exptected[i], source[i]); } }
public void TestCount() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(9, source.Count); source.RemoveSegmentAt(0); Assert.AreEqual(4, source.Count); source.RemoveSegmentAt(0); Assert.AreEqual(0, source.Count); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(9, source.Count); }
public void TestOutOfIndex() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char currentChar = ' '; Assert.Throws<IndexOutOfRangeException>(delegate { currentChar = source[-1]; }); Assert.Throws<IndexOutOfRangeException>(delegate { currentChar = source[10]; }); source.RemoveSegmentAt(0); Assert.Throws<IndexOutOfRangeException>(delegate { currentChar = source[4]; }); source.RemoveSegmentAt(0); Assert.Throws<IndexOutOfRangeException>(delegate { currentChar = source[0]; }); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.Throws<IndexOutOfRangeException>(delegate { currentChar = source[10]; }); Console.Write(currentChar); }
public void TestOutOfIndex() { ArraySegmentList <char> source = new ArraySegmentList <char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char currentChar = ' '; Assert.Throws <IndexOutOfRangeException>(delegate { currentChar = source[-1]; }); Assert.Throws <IndexOutOfRangeException>(delegate { currentChar = source[10]; }); source.RemoveSegmentAt(0); Assert.Throws <IndexOutOfRangeException>(delegate { currentChar = source[4]; }); source.RemoveSegmentAt(0); Assert.Throws <IndexOutOfRangeException>(delegate { currentChar = source[0]; }); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.Throws <IndexOutOfRangeException>(delegate { currentChar = source[10]; }); Console.Write(currentChar); }
public void TestAddSegment() { ArraySegmentList<char> source = new ArraySegmentList<char>(); Assert.AreEqual(0, source.Count); source.AddSegment("I love you,".ToCharArray(), 0, 5); Assert.AreEqual(5, source.Count); Assert.AreEqual(1, source.SegmentCount); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(9, source.Count); Assert.AreEqual(2, source.SegmentCount); char[] exptected = "I lovHell".ToCharArray(); for (var i = 0; i < exptected.Length; i++) { Assert.AreEqual(exptected[i], source[i]); } }
public void TestOutOfIndex() { ArraySegmentList <char> source = new ArraySegmentList <char>(new List <ArraySegment <char> > { new ArraySegment <char>("I love you,".ToCharArray(), 0, 5), new ArraySegment <char>("Hello world!".ToCharArray(), 0, 4) }); Assert.Throws <IndexOutOfRangeException>(delegate { char currentChar = source[-1]; }); Assert.Throws <IndexOutOfRangeException>(delegate { char currentChar = source[10]; }); source.RemoveSegmentAt(0); Assert.Throws <IndexOutOfRangeException>(delegate { char currentChar = source[4]; }); source.RemoveSegmentAt(0); Assert.Throws <IndexOutOfRangeException>(delegate { char currentChar = source[0]; }); source.AddSegment(new ArraySegment <char>("I love you,".ToCharArray(), 0, 5)); source.AddSegment(new ArraySegment <char>("Hello world!".ToCharArray(), 0, 4)); Assert.Throws <IndexOutOfRangeException>(delegate { char currentChar = source[10]; }); }
public void TestDecode() { ArraySegmentList source = new ArraySegmentList(); StringBuilder sb = new StringBuilder(); List <int> countArray = new List <int>(); int from, to; Random rd = new Random(); from = rd.Next(0, 19); to = rd.Next(from + 1, 20); for (var i = 0; i < 20; i++) { var line = Guid.NewGuid().ToString(); var element = Encoding.UTF8.GetBytes(line); if (i >= from && i <= to) { countArray.Add(source.Count); Console.WriteLine(source.Count); sb.Append(line); source.AddSegment(element, 0, element.Length); countArray.Add(source.Count); Console.WriteLine(source.Count); } else { source.AddSegment(element, 0, element.Length); } } Assert.AreEqual(sb.ToString(), source.Decode(Encoding.UTF8, countArray[0], countArray[countArray.Count - 1] - countArray[0])); }
public void TestSearchPerformance() { ArraySegmentList <char> sourceA = new ArraySegmentList <char>(); List <char> sourceB = new List <char>(); char[] element = null; for (var i = 0; i < 100; i++) { element = Guid.NewGuid().ToString().ToCharArray(); sourceA.AddSegment(element, 0, element.Length); sourceB.AddRange(element); } char[] mark = element.Take(4).ToArray(); int testCount = 1000; GC.Collect(); Stopwatch watch = new Stopwatch(); watch.Start(); for (var i = 0; i < testCount; i++) { sourceA.SearchMark(mark); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { sourceB.SearchMark(mark); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); }
protected void ReceiveMessage(Stream stream, ArraySegmentList commandBuffer, int predictCount) { byte[] buffer = new byte[1024]; int thisRead = 0; int left = predictCount; while ((thisRead = stream.Read(buffer, 0, Math.Min(left, buffer.Length))) > 0) { Console.WriteLine("Current read: {0}", thisRead); commandBuffer.AddSegment(buffer, 0, thisRead, true); left -= thisRead; if (left <= 0) break; } }
/// <summary> /// Filters the specified session. /// </summary> /// <param name="session">The session.</param> /// <param name="readBuffer">The read buffer.</param> /// <param name="offset">The offset.</param> /// <param name="length">The length.</param> /// <param name="toBeCopied">if set to <c>true</c> [to be copied].</param> /// <param name="left">The left.</param> /// <returns></returns> public override TRequestInfo Filter(IAppSession <TRequestInfo> session, byte[] readBuffer, int offset, int length, bool toBeCopied, out int left) { if (!m_FoundHeader) { return(base.Filter(session, readBuffer, offset, length, toBeCopied, out left)); } if (m_BodyBuffer == null || m_BodyBuffer.Count == 0) { if (length < m_BodyLength) { if (m_BodyBuffer == null) { m_BodyBuffer = new ArraySegmentList(); } m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); left = 0; return(default(TRequestInfo)); } else if (length == m_BodyLength) { left = 0; m_FoundHeader = false; return(ResolveRequestData(m_Header, readBuffer, offset, length)); } else { left = length - m_BodyLength; m_FoundHeader = false; return(ResolveRequestData(m_Header, readBuffer, offset, m_BodyLength)); } } else { int required = m_BodyLength - m_BodyBuffer.Count; if (length < required) { m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); left = 0; return(default(TRequestInfo)); } else if (length == required) { m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); left = 0; m_FoundHeader = false; var requestInfo = ResolveRequestData(m_Header, m_BodyBuffer.ToArrayData()); m_BodyBuffer.ClearSegements(); return(requestInfo); } else { m_BodyBuffer.AddSegment(readBuffer, offset, required, toBeCopied); left = length - required; m_FoundHeader = false; var requestInfo = ResolveRequestData(m_Header, m_BodyBuffer.ToArrayData(0, m_BodyLength)); m_BodyBuffer.ClearSegements(); return(requestInfo); } } }
public void TestDecode() { ArraySegmentList source = new ArraySegmentList(); StringBuilder sb = new StringBuilder(); List<int> countArray = new List<int>(); int from, to; Random rd = new Random(); from = rd.Next(0, 19); to = rd.Next(from + 1, 20); for (var i = 0; i < 20; i++) { var line = Guid.NewGuid().ToString(); var element = Encoding.UTF8.GetBytes(line); if (i >= from && i <= to) { countArray.Add(source.Count); Console.WriteLine(source.Count); sb.Append(line); source.AddSegment(element, 0, element.Length); countArray.Add(source.Count); Console.WriteLine(source.Count); } else { source.AddSegment(element, 0, element.Length); } } Assert.AreEqual(sb.ToString(), source.Decode(Encoding.UTF8, countArray[0], countArray[countArray.Count - 1] - countArray[0])); }
public void TestSearchPerformance() { ArraySegmentList<char> sourceA = new ArraySegmentList<char>(); List<char> sourceB = new List<char>(); char[] element = null; for (var i = 0; i < 100; i++) { element = Guid.NewGuid().ToString().ToCharArray(); sourceA.AddSegment(element, 0, element.Length); sourceB.AddRange(element); } char[] mark = element.Take(4).ToArray(); int testCount = 1000; GC.Collect(); Stopwatch watch = new Stopwatch(); watch.Start(); for (var i = 0; i < testCount; i++) { sourceA.SearchMark(mark); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { sourceB.SearchMark(mark); } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); }
public void TestToArray() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); char[] exptected = "I lovHell".ToCharArray(); Assert.AreEqual(exptected, source.ToArrayData()); Assert.AreEqual("He", new string(source.ToArrayData(5, 2))); Assert.AreEqual("ovHe", new string(source.ToArrayData(3, 4))); }
public void TestEndsWith() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 0, 5); source.AddSegment("Hello world!".ToCharArray(), 0, 4); Assert.AreEqual(true, source.EndsWith("Hell".ToCharArray())); }
public void TestIndexOf() { ArraySegmentList<char> source = new ArraySegmentList<char>(); source.AddSegment("I love you,".ToCharArray(), 3, 7); source.AddSegment("Hello world!".ToCharArray(), 0, 4); //string exptected = "ove youHell"; Assert.AreEqual(-1, source.IndexOf('I')); Assert.AreEqual(9, source.IndexOf('l')); Assert.AreEqual(0, source.IndexOf('o')); Assert.AreEqual(1, source.IndexOf('v')); }
public void TestIndexAccess2() { ArraySegmentList<char> sourceA = new ArraySegmentList<char>(); List<char> sourceB = new List<char>(); char[] element = null; for (var i = 0; i < 100; i++) { element = Guid.NewGuid().ToString().ToCharArray(); sourceA.AddSegment(element, 0, element.Length); sourceB.AddRange(element); } Random rd = new Random(); for (int i = 0; i < 1000; i++) { int index = rd.Next(0, sourceA.Count - 1); Assert.AreEqual(sourceB[index], sourceA[index]); } int testCount = 10000; GC.Collect(); Stopwatch watch = new Stopwatch(); watch.Start(); for (var i = 0; i < testCount; i++) { int index = rd.Next(0, sourceA.Count - 1); var tt = sourceA[index]; } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); watch.Reset(); GC.Collect(); watch.Start(); for (var i = 0; i < testCount; i++) { int index = rd.Next(0, sourceA.Count - 1); var tt = sourceB[index]; } watch.Stop(); Console.WriteLine(watch.ElapsedMilliseconds); }
protected void AddArraySegment(ArraySegmentList segments, byte[] buffer, int offset, int length, bool toBeCopied) { segments.AddSegment(buffer, offset, length, toBeCopied); }
/// <summary> /// Filters the specified session. /// </summary> /// <param name="readBuffer">The read buffer.</param> /// <param name="offset">The offset.</param> /// <param name="length">The length.</param> /// <param name="toBeCopied">if set to <c>true</c> [to be copied].</param> /// <param name="rest">The rest.</param> /// <returns></returns> public override TRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int rest) { // byte[] m_Request = new byte[length]; // System.Buffer.BlockCopy(m_Request, 0, readBuffer, offset, length if (!m_FoundHeader) { return(base.Filter(readBuffer, offset, length, toBeCopied, out rest)); } if (m_BodyBuffer == null || m_BodyBuffer.Count == 0) { if (length < m_BodyLength) { if (m_BodyBuffer == null) { m_BodyBuffer = new ArraySegmentList(); } m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); rest = 0; return(NullRequestInfo); } else if (length == m_BodyLength) { rest = 0; m_FoundHeader = false; return(ResolveRequestInfo(m_Header, readBuffer, offset, length)); } else { rest = length - m_BodyLength; m_FoundHeader = false; return(ResolveRequestInfo(m_Header, readBuffer, offset, m_BodyLength)); } } else { int required = m_BodyLength - m_BodyBuffer.Count; if (length < required) { m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); rest = 0; return(NullRequestInfo); } else if (length == required) { m_BodyBuffer.AddSegment(readBuffer, offset, length, toBeCopied); rest = 0; m_FoundHeader = false; var requestInfo = ResolveRequestInfo(m_Header, m_BodyBuffer.ToArrayData()); m_BodyBuffer.ClearSegements(); return(requestInfo); } else { m_BodyBuffer.AddSegment(readBuffer, offset, required, toBeCopied); rest = length - required; m_FoundHeader = false; var requestInfo = ResolveRequestInfo(m_Header, m_BodyBuffer.ToArrayData(0, m_BodyLength)); m_BodyBuffer.ClearSegements(); return(requestInfo); } } }