Beispiel #1
0
                static void ReadString(ref FastStream fs)
                {
                    var isEmpty = fs.Slice(1)[0] == 1;

                    if (isEmpty)
                    {
                        fs.Push(String.Empty);
                        return;
                    }
                    var length = (int)fs.Slice(1)[0];

                    if (length == 255)
                    {
                        length = BitConverter.ToInt32(fs.Slice(sizeof(int)));
                    }
                    Span <char> str   = stackalloc char[length];
                    var         slice = str;
                    var         diff  = fs._ptr + length - fs._read;

                    while (diff > 0)
                    {
                        length = diff;
                        Utf8.ToUtf16(fs._span.Slice(fs._ptr), slice, out _, out var written);
                        slice = slice.Slice(written);
                        fs.HotSwap();
                        diff = fs._ptr + length - fs._read;
                    }

                    {
                        Utf8.ToUtf16(fs.Slice(length), slice, out _, out var written);
                        fs.Push(new string(str));
                    }
                }