package qpack

// copied from the Go standard library HPACK implementation

import 

var errVarintOverflow = errors.New("varint integer overflow")

// appendVarInt appends i, as encoded in variable integer form using n
// bit prefix, to dst and returns the extended buffer.
//
// See
// http://http2.github.io/http2-spec/compression.html#integer.representation
func appendVarInt( []byte,  byte,  uint64) []byte {
	 := uint64((1 << ) - 1)
	if  <  {
		return append(, byte())
	}
	 = append(, byte())
	 -= 
	for ;  >= 128;  >>= 7 {
		 = append(, byte(0x80|(&0x7f)))
	}
	return append(, byte())
}

// readVarInt reads an unsigned variable length integer off the
// beginning of p. n is the parameter as described in
// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1.
//
// n must always be between 1 and 8.
//
// The returned remain buffer is either a smaller suffix of p, or err != nil.
// The error is errNeedMore if p doesn't contain a complete integer.
func readVarInt( byte,  []byte) ( uint64,  []byte,  error) {
	if  < 1 ||  > 8 {
		panic("bad n")
	}
	if len() == 0 {
		return 0, , errNeedMore
	}
	 = uint64([0])
	if  < 8 {
		 &= (1 << uint64()) - 1
	}
	if  < (1<<uint64())-1 {
		return , [1:], nil
	}

	 := 
	 = [1:]
	var  uint64
	for len() > 0 {
		 := [0]
		 = [1:]
		 += uint64(&127) << 
		if &128 == 0 {
			return , , nil
		}
		 += 7
		if  >= 63 { // TODO: proper overflow check. making this up.
			return 0, , errVarintOverflow
		}
	}
	return 0, , errNeedMore
}