parameters: ()
return_statement: return _SimpleDecoder(wire_format.WIRETYPE_FIXED32, InnerDecode)
docstring: Returns a decoder for a float field.
  
    This code works around a bug in struct.unpack for non-finite 32-bit
    floating-point values.
docstring_summary: Returns a decoder for a float field.
docstring_tokens: Returns a decoder for a float field .
function: def _FloatDecoder():
    """Returns a decoder for a float field.
  
    This code works around a bug in struct.unpack for non-finite 32-bit
    floating-point values.
    """
  
    local_unpack = struct.unpack
  
    def InnerDecode(buffer, pos):
      # We expect a 32-bit value in little-endian byte order.  Bit 1 is the sign
      # bit, bits 2-9 represent the exponent, and bits 10-32 are the significand.
      new_pos = pos + 4
      float_bytes = buffer[pos:new_pos]
  
      # If this value has all its exponent bits set, then it's non-finite.
      # In Python 2.4, struct.unpack will convert it to a finite 64-bit value.
      # To avoid that, we parse it specially.
      if ((float_bytes[3] in '\x7F\xFF')
          and (float_bytes[2] >= '\x80')):
        # If at least one significand bit is set...
        if float_bytes[0:3] != '\x00\x00\x80':
          return (_NAN, new_pos)
        # If sign bit is set...
        if float_bytes[3] == '\xFF':
          return (_NEG_INF, new_pos)
        return (_POS_INF, new_pos)
  
      # Note that we expect someone up-stack to catch struct.error and convert
      # it to _DecodeError -- this way we don't have to set up exception-
      # handling blocks every time we parse one value.
      result = local_unpack('<f', float_bytes)[0]
      return (result, new_pos)
    return _SimpleDecoder(wire_format.WIRETYPE_FIXED32, InnerDecode)
function_tokens: def _FloatDecoder ( ) : local_unpack = struct . unpack def InnerDecode ( buffer , pos ) : # We expect a 32-bit value in little-endian byte order.  Bit 1 is the sign # bit, bits 2-9 represent the exponent, and bits 10-32 are the significand. new_pos = pos + 4 float_bytes = buffer [ pos : new_pos ] # If this value has all its exponent bits set, then it's non-finite. # In Python 2.4, struct.unpack will convert it to a finite 64-bit value. # To avoid that, we parse it specially. if ( ( float_bytes [ 3 ] in '\x7F\xFF' ) and ( float_bytes [ 2 ] >= '\x80' ) ) : # If at least one significand bit is set... if float_bytes [ 0 : 3 ] != '\x00\x00\x80' : return ( _NAN , new_pos ) # If sign bit is set... if float_bytes [ 3 ] == '\xFF' : return ( _NEG_INF , new_pos ) return ( _POS_INF , new_pos ) # Note that we expect someone up-stack to catch struct.error and convert # it to _DecodeError -- this way we don't have to set up exception- # handling blocks every time we parse one value. result = local_unpack ( '<f' , float_bytes ) [ 0 ] return ( result , new_pos ) return _SimpleDecoder ( wire_format . WIRETYPE_FIXED32 , InnerDecode )