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);
        }
Beispiel #3
0
 public float ReadFloat()
 {
     return(ParsingPrimitives.ParseFloat(ref buffer, ref state));
 }