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));
                    }
                }
Beispiel #2
0
                static void ReadProperty(ref FastStream fs)
                {
                    var slice = fs.Slice(2);
                    var type  = slice[0];

                    //var anyType = slice[1];
                    switch (type)
                    {
                    case 0:
                        fs.Push(null !);
                        break;

                    case 1:
                        fs.PushOp(Op.ReadBool);
                        break;

                    case 2:
                        fs.PushOp(Op.ReadDouble);
                        break;

                    case 3:
                        fs.PushOp(Op.ReadString);
                        break;

                    case 4:
                        fs.PushOp(Op.ReadList);
                        break;

                    case 5:
                        fs.PushOp(Op.ReadDictionary);
                        break;
                    }
                }
Beispiel #3
0
                static void ReadVersion(ref FastStream fs)
                {
                    var slice    = fs.Slice(8);
                    var major    = BitConverter.ToUInt16(slice.Slice(0, 2));
                    var minor    = BitConverter.ToUInt16(slice.Slice(2, 2));
                    var build    = BitConverter.ToUInt16(slice.Slice(4, 2));
                    var revision = BitConverter.ToUInt16(slice.Slice(6, 2));

                    fs.Push(new Version(major, minor, build, revision));
                }
Beispiel #4
0
                static void ReadDictionary(ref FastStream fs)
                {
                    var length = (int)BitConverter.ToUInt32(fs.Slice(sizeof(uint)));

                    fs.PushOp(Op.PushInt, (Op)length, Op.FinishReadDictionary);
                    for (int i = 0; i < length; i++)
                    {
                        fs.PushOp(Op.ReadProperty);
                        fs.PushOp(Op.ReadString);
                    }
                }
Beispiel #5
0
 static private void ReadDouble(ref FastStream fs)
 {
     fs.Push(BitConverter.ToDouble(fs.Slice(sizeof(double))));
 }
Beispiel #6
0
 static private void ReadBool(ref FastStream fs)
 {
     fs.Push(fs.Slice(1)[0] == 1);
 }