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); }