internal static float?ReadFloatWrapperLittleEndian(ref ReadOnlySpan <byte> buffer, ref ParserInternalState state) { // length:1 + tag:1 + value:4 = 6 bytes if (state.bufferPos + 6 <= state.bufferSize) { // The entire wrapper message is already contained in `buffer`. int length = buffer[state.bufferPos]; if (length == 0) { state.bufferPos++; return(0F); } // tag:1 + value:4 = length of 5 bytes // field=1, type=32-bit = tag of 13 if (length != 5 || buffer[state.bufferPos + 1] != 13) { return(ReadFloatWrapperSlow(ref buffer, ref state)); } state.bufferPos += 2; return(ParsingPrimitives.ParseFloat(ref buffer, ref state)); } else { return(ReadFloatWrapperSlow(ref buffer, ref state)); } }
internal static float?ReadFloatWrapperSlow(ref ReadOnlySpan <byte> buffer, ref ParserInternalState state) { int length = ParsingPrimitives.ParseLength(ref buffer, ref state); if (length == 0) { return(0F); } int finalBufferPos = state.totalBytesRetired + state.bufferPos + length; float result = 0F; do { // field=1, type=32-bit = tag of 13 if (ParsingPrimitives.ParseTag(ref buffer, ref state) == 13) { result = ParsingPrimitives.ParseFloat(ref buffer, ref state); } else { ParsingPrimitivesMessages.SkipLastField(ref buffer, ref state); } }while (state.totalBytesRetired + state.bufferPos < finalBufferPos); return(result); }
public float ReadFloat() { return(ParsingPrimitives.ParseFloat(ref buffer, ref state)); }