/// <summary> /// Returns a value stating whether the current <see cref="Utf8String"/> instance contains <paramref name="value"/>. /// The specified comparison is used. /// </summary> public bool Contains(Utf8String value, StringComparison comparison) { if (value is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } // TODO_UTF8STRING: Optimize me to avoid allocations. #if (!NETSTANDARD2_0 && !NETFRAMEWORK) return(ToString().Contains(value.ToString(), comparison)); #else return(ToString().IndexOf(value.ToString(), comparison) >= 0); #endif }
/// <summary> /// Returns a value stating whether the current <see cref="Utf8String"/> instance begins with <paramref name="value"/>. /// The specified comparison is used. /// </summary> public bool StartsWith(Utf8String value, StringComparison comparison) { if (value is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value); } // TODO_UTF8STRING: Optimize me to avoid allocations. return(ToString().StartsWith(value.ToString(), comparison)); }
static void RunLoop(bool log) { var loop = new UVLoop(); var listener = new TcpListener(s_ipAddress, s_port, loop); var formatter = new BufferFormatter(512, FormattingData.InvariantUtf8); listener.ConnectionAccepted += (Tcp connection) => { if (log) { Console.WriteLine("connection accepted"); } connection.ReadCompleted += (ByteSpan data) => { if (log) { unsafe { var requestString = new Utf8String(data.UnsafeBuffer, data.Length); Console.WriteLine("*REQUEST:\n {0}", requestString.ToString()); } } formatter.Clear(); formatter.Append("HTTP/1.1 200 OK"); formatter.Append("\r\n\r\n"); formatter.Append("Hello World!"); if (log) { formatter.Format(" @ {0:O}", DateTime.UtcNow); } var response = formatter.Buffer.Slice(0, formatter.CommitedByteCount); // formatter should have a property for written bytes GCHandle gcHandle; var byteSpan = response.Pin(out gcHandle); connection.TryWrite(byteSpan); connection.Dispose(); gcHandle.Free(); // TODO: formatter should format to ByteSpan, to avoid pinning }; connection.ReadStart(); }; listener.Listen(); loop.Run(); }
static void RunLoop(bool log) { var loop = new UVLoop(); var listener = new TcpListener(s_ipAddress, s_port, loop); listener.ConnectionAccepted += (Tcp connection) => { if (log) { Console.WriteLine("connection accepted"); } connection.ReadCompleted += (data) => { if (log) { unsafe { var requestString = new Utf8String(data.Span); Console.WriteLine("*REQUEST:\n {0}", requestString.ToString()); } } var formatter = new ArrayFormatter(512, EncodingData.InvariantUtf8); formatter.Clear(); formatter.Append("HTTP/1.1 200 OK"); formatter.Append("\r\n\r\n"); formatter.Append("Hello World!"); if (log) { formatter.Format(" @ {0:O}", DateTime.UtcNow); } var segment = formatter.Formatted; using (var memory = new OwnedPinnedArray<byte>(segment.Array)) { connection.TryWrite(memory.Memory.Slice(segment.Offset, segment.Count)); connection.Dispose(); } }; connection.ReadStart(); }; listener.Listen(); loop.Run(); }
private static void RunTestJsonNet(string str, bool output) { var utf8Str = new Utf8String(str); Timer.Restart(); for (var i = 0; i < NumberOfIterations; i++) { JsonNetReaderHelper(new StringReader(utf8Str.ToString()), output); } TimingResultsJsonNet.Add(Timer.ElapsedMilliseconds); }