public Utf8String TrimEnd() { CodePointReverseEnumerator it = CodePoints.GetReverseEnumerator(); while (it.MoveNext() && Utf8Helper.IsWhitespace(it.Current)) { } return(Substring(0, it.PositionInCodeUnits)); }
public Utf8String TrimStart() { CodePointEnumerator it = GetCodePointEnumerator(); while (it.MoveNext() && Utf8Helper.IsWhitespace(it.Current)) { } return(Substring(it.PositionInCodeUnits)); }
private void SkipEmpty() { var nextByte = _buffer[_index]; while (Utf8Helper.IsWhitespace(nextByte)) { _index++; nextByte = _buffer[_index]; } }
private JsonDb.JsonValueType GetJsonDb.JsonValueType() { var nextByte = _buffer[_index]; while (Utf8Helper.IsWhitespace(nextByte)) { _index++; nextByte = _buffer[_index]; } if (nextByte == '"') { return(JsonDb.JsonValueType.String); } if (nextByte == '{') { return(JsonDb.JsonValueType.Object); } if (nextByte == '[') { return(JsonDb.JsonValueType.Array); } if (nextByte == 't') { return(JsonDb.JsonValueType.True); } if (nextByte == 'f') { return(JsonDb.JsonValueType.False); } if (nextByte == 'n') { return(JsonDb.JsonValueType.Null); } if (nextByte == '-' || (nextByte >= '0' && nextByte <= '9')) { return(JsonDb.JsonValueType.Number); } throw new FormatException("Invalid json, tried to read char '" + nextByte + "'."); }
public JsonParser(byte[] buffer, int lengthOfJson) { _buffer = buffer; _insideObject = 0; _insideArray = 0; TokenType = 0; _index = 0; _end = lengthOfJson; var nextByte = _buffer[_index]; while (Utf8Helper.IsWhitespace(nextByte) || nextByte == 0) { _index++; nextByte = _buffer[_index]; } _dbIndex = _end + 1; _jsonStartIsObject = _buffer[_index] == '{'; }
private void MoveToNextTokenType() { var nextByte = _buffer[_index]; while (Utf8Helper.IsWhitespace(nextByte)) { _index++; nextByte = _buffer[_index]; } switch (TokenType) { case JsonTokenType.ObjectStart: if (nextByte != '}') { TokenType = JsonTokenType.Property; return; } break; case JsonTokenType.ObjectEnd: if (nextByte == ',') { _index++; if (_insideObject == _insideArray) { TokenType = !_jsonStartIsObject ? JsonTokenType.Property : JsonTokenType.Value; return; } TokenType = _insideObject > _insideArray ? JsonTokenType.Property : JsonTokenType.Value; return; } break; case JsonTokenType.ArrayStart: if (nextByte != ']') { TokenType = JsonTokenType.Value; return; } break; case JsonTokenType.ArrayEnd: if (nextByte == ',') { _index++; if (_insideObject == _insideArray) { TokenType = !_jsonStartIsObject ? JsonTokenType.Property : JsonTokenType.Value; return; } TokenType = _insideObject > _insideArray ? JsonTokenType.Property : JsonTokenType.Value; return; } break; case JsonTokenType.Property: if (nextByte == ',') { _index++; return; } break; case JsonTokenType.Value: if (nextByte == ',') { _index++; return; } break; } _index++; switch (nextByte) { case (byte)'{': _insideObject++; TokenType = JsonTokenType.ObjectStart; return; case (byte)'}': _insideObject--; TokenType = JsonTokenType.ObjectEnd; return; case (byte)'[': _insideArray++; TokenType = JsonTokenType.ArrayStart; return; case (byte)']': _insideArray--; TokenType = JsonTokenType.ArrayEnd; return; default: throw new FormatException("Unable to get next token type. Check json format."); } }