private unsafe void ReadJsonValue <TWriteStrategy>() where TWriteStrategy : IWriteStrategy { int start; JsonParserToken current = _state.CurrentTokenType; if (current == JsonParserToken.String) { BlittableJsonToken stringToken; if (typeof(TWriteStrategy) == typeof(WriteNone)) { start = _writer.WriteValue(_state.StringBuffer, _state.StringSize, _state.EscapePositions, out stringToken, _mode, _state.CompressedSize); } else // WriteFull { if (_state.EscapePositions.Count == 0 && _state.CompressedSize == null && (_mode & UsageMode.CompressSmallStrings) == 0 && _state.StringSize < 128) { start = _writer.WriteValue(_state.StringBuffer, _state.StringSize); stringToken = BlittableJsonToken.String; } else { start = _writer.WriteValue(_state.StringBuffer, _state.StringSize, _state.EscapePositions, out stringToken, _mode, _state.CompressedSize); } } _state.CompressedSize = null; _writeToken = new WriteToken(start, stringToken); } else if (current == JsonParserToken.Integer) { start = _writer.WriteValue(_state.Long); _writeToken = new WriteToken(start, BlittableJsonToken.Integer); } else if (current == JsonParserToken.StartObject) { _modifier?.StartObject(); _continuationState.Push(new BuildingState(ContinuationState.ReadObject)); } else if (current != JsonParserToken.EndObject) { ReadJsonValueUnlikely <TWriteStrategy>(current); } }
public void WriteValue(bool value) { var currentState = _continuationState.Pop(); var valuePos = _writer.WriteValue(value); _writeToken = new WriteToken { ValuePos = valuePos, WrittenToken = BlittableJsonToken.Boolean }; if (currentState.FirstWrite == -1) { currentState.FirstWrite = valuePos; } currentState = FinishWritingScalarValue(currentState); _continuationState.Push(currentState); }