func parseNextBinaryValue(ann []Symbol, r io.Reader) (Value, error) {
	switch high, low, err := readNibblesHighAndLow(r); {
	case err != nil:
		return nil, err
	case low == 0xF:
		return parseBinaryNull(high)
	case high == binaryTypePadding:
		return parseBinaryPadding(low, r)
	case high == binaryTypeBool:
		return parseBinaryBool(ann, low)
	case high == binaryTypeInt || high == binaryTypeNegInt:
		// 2 = positive integer, 3 = negative integer.
		return parseBinaryInt(ann, high == binaryTypeNegInt, low, r)
	case high == binaryTypeFloat:
		return parseBinaryFloat(ann, low, r)
	case high == binaryTypeDecimal:
		return parseBinaryDecimal(ann, low, r)
	case high == binaryTypeTimestamp:
		return parseBinaryTimestamp(ann, low, r)
	case high == binaryTypeSymbol:
		return parseBinarySymbol(ann, low, r)
	case high == binaryTypeString:
		return parseBinaryString(ann, low, r)
	case high == binaryTypeBlob || high == binaryTypeClob:
		return parseBinaryBytes(ann, high, low, r)
	case high == binaryTypeList || high == binaryTypeSExp:
		return parseBinaryList(ann, high, low, r)
	case high == binaryTypeStruct:
		return parseBinaryStruct(ann, low, r)
	case high == binaryTypeAnnotation:
		if len(ann) != 0 {
			return nil, errors.New("nesting annotations is not legal")
		}
		return parseBinaryAnnotation(low, r)
	default:
		return nil, errors.Errorf("invalid header combination - high: %d low: %d", high, low)
	}
}
// parseNextBinaryValue parses the next binary value from the stream.  It returns
// io.EOF as the error if the first read shows that the end of the stream has been
// reached.  It returns a nil value and nil error if a new ByteVersionMarker has
// been reached. ann is an optional list of annotations to associate with the next
// value that is parsed.
parseNextBinaryValue parses the next binary value from the stream.  It returns
io.EOF as the error if the first read shows that the end of the stream has been
reached.  It returns a nil value and nil error if a new ByteVersionMarker has
been reached. ann is an optional list of annotations to associate with the next
value that is parsed.
// parseNextBinaryValue parses the next binary value from the stream . It returns // io . EOF as the error if the first read shows that the end of the stream has been // reached . It returns a nil value and nil error if a new ByteVersionMarker has // been reached . ann is an optional list of annotations to associate with the next // value that is parsed .
func parseNextBinaryValue(ann []Symbol, r io.Reader) (Value, error) {
	switch high, low, err := readNibblesHighAndLow(r); {
	case err != nil:
		return nil, err
	case low == 0xF:
		return parseBinaryNull(high)
	case high == binaryTypePadding:
		return parseBinaryPadding(low, r)
	case high == binaryTypeBool:
		return parseBinaryBool(ann, low)
	case high == binaryTypeInt || high == binaryTypeNegInt:
		return parseBinaryInt(ann, high == binaryTypeNegInt, low, r)
	case high == binaryTypeFloat:
		return parseBinaryFloat(ann, low, r)
	case high == binaryTypeDecimal:
		return parseBinaryDecimal(ann, low, r)
	case high == binaryTypeTimestamp:
		return parseBinaryTimestamp(ann, low, r)
	case high == binaryTypeSymbol:
		return parseBinarySymbol(ann, low, r)
	case high == binaryTypeString:
		return parseBinaryString(ann, low, r)
	case high == binaryTypeBlob || high == binaryTypeClob:
		return parseBinaryBytes(ann, high, low, r)
	case high == binaryTypeList || high == binaryTypeSExp:
		return parseBinaryList(ann, high, low, r)
	case high == binaryTypeStruct:
		return parseBinaryStruct(ann, low, r)
	case high == binaryTypeAnnotation:
		if len(ann) != 0 {
			return nil, errors.New("nesting annotations is not legal")
		}
		return parseBinaryAnnotation(low, r)
	default:
		return nil, errors.Errorf("invalid header combination - high: %d low: %d", high, low)
	}
}
func parseNextBinaryValue ( ann [ ] Symbol , r io . Reader ) ( Value , error ) { switch high , low , err := readNibblesHighAndLow ( r ) ; { case err != nil : return nil , err case low == 0xF : return parseBinaryNull ( high ) case high == binaryTypePadding : return parseBinaryPadding ( low , r ) case high == binaryTypeBool : return parseBinaryBool ( ann , low ) case high == binaryTypeInt || high == binaryTypeNegInt : return parseBinaryInt ( ann , high == binaryTypeNegInt , low , r ) case high == binaryTypeFloat : return parseBinaryFloat ( ann , low , r ) case high == binaryTypeDecimal : return parseBinaryDecimal ( ann , low , r ) case high == binaryTypeTimestamp : return parseBinaryTimestamp ( ann , low , r ) case high == binaryTypeSymbol : return parseBinarySymbol ( ann , low , r ) case high == binaryTypeString : return parseBinaryString ( ann , low , r ) case high == binaryTypeBlob || high == binaryTypeClob : return parseBinaryBytes ( ann , high , low , r ) case high == binaryTypeList || high == binaryTypeSExp : return parseBinaryList ( ann , high , low , r ) case high == binaryTypeStruct : return parseBinaryStruct ( ann , low , r ) case high == binaryTypeAnnotation : if len ( ann ) != 0 { return nil , errors . New ( " " ) } return parseBinaryAnnotation ( low , r ) default : return nil , errors . Errorf ( " " , high , low ) } }
parseNextBinaryValue parses the next binary value from the stream.
parseNextBinaryValue parses the next binary value from the stream .
// 2 = positive integer, 3 = negative integer.