Ejemplo n.º 1
0
            private bool TryGetEncodedSystemStringTypeMarker(string value, out JsonBinaryEncoding.MultiByteTypeMarker typeMarker)
            {
                typeMarker = new JsonBinaryEncoding.MultiByteTypeMarker(null);
                int systemStringId;

                if (JsonBinaryEncoding.TryGetSystemStringId(value, out systemStringId))
                {
                    const byte OneByteCount = JsonBinaryEncoding.TypeMarker.SystemString1ByteLengthMax - JsonBinaryEncoding.TypeMarker.SystemString1ByteLengthMin;

                    if (systemStringId < OneByteCount)
                    {
                        byte[] typeMarkerBytes = new byte[]
                        {
                            (byte)(JsonBinaryEncoding.TypeMarker.SystemString1ByteLengthMin + (int)systemStringId)
                        };

                        typeMarker = new JsonBinaryEncoding.MultiByteTypeMarker(typeMarkerBytes);
                    }
                    else
                    {
                        int    twoByteOffset   = ((int)systemStringId) - OneByteCount;
                        byte[] typeMarkerBytes = new byte[]
                        {
                            (byte)((twoByteOffset / 0xFF) + JsonBinaryEncoding.TypeMarker.SystemString2ByteLengthMin),
                            (byte)(twoByteOffset % 0xFF),
                        };

                        typeMarker = new JsonBinaryEncoding.MultiByteTypeMarker(typeMarkerBytes);
                    }

                    return(true);
                }

                return(false);
            }
        /// <summary>
        /// Try Get Encoded System String Type Marker
        /// </summary>
        /// <param name="utf8Span">The value.</param>
        /// <param name="multiByteTypeMarker">The multi byte type marker if found.</param>
        /// <returns>Whether or not the Encoded System String Type Marker was found.</returns>
        private static bool TryGetEncodedSystemStringTypeMarker(
            Utf8Span utf8Span,
            out MultiByteTypeMarker multiByteTypeMarker)
        {
            if (JsonBinaryEncoding.TryGetSystemStringId(utf8Span, out int systemStringId))
            {
                multiByteTypeMarker = new MultiByteTypeMarker(
                    length: 1,
                    one: (byte)(TypeMarker.SystemString1ByteLengthMin + systemStringId));

                return(true);
            }

            multiByteTypeMarker = default;
            return(false);
        }