func (p *PackedTable) PrintBucket(i uint) {
	pos := p.kBitsPerBucket * i / bitsPerByte
	fmt.Printf("\tbucketBits  =%x\n", p.buckets[pos:pos+p.kBytesPerBucket])
	var tags [tagsPerPTable]uint32
	p.ReadBucket(i, &tags)
	p.PrintTags(tags)
}
PrintBucket print a bucket
package cuckoo
import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io"
	"math/rand"
)
type PackedTable struct {
	kDirBitsPerTag  uint
	kBitsPerBucket  uint
	kBytesPerBucket uint
	kDirBitsMask    uint32
	bitsPerTag      uint
	len        uint
	numBuckets uint
	buckets    []byte
	perm       PermEncoding
}
func NewPackedTable() *PackedTable {
	return &PackedTable{}
}
const (
	cFpSize       = 4
	tagsPerPTable = 4
	codeSize      = 12
)
func (p *PackedTable) Init(_, bitsPerTag, num uint, initialBucketsHint []byte) error {
	p.bitsPerTag = bitsPerTag
	p.numBuckets = num
	p.kDirBitsPerTag = p.bitsPerTag - cFpSize
	p.kBitsPerBucket = (p.bitsPerTag - 1) * tagsPerPTable
	p.kBytesPerBucket = (p.kBitsPerBucket + 7) >> 3
	p.kDirBitsMask = ((1 << p.kDirBitsPerTag) - 1) << cFpSize
	p.len = (p.kBitsPerBucket*p.numBuckets+7)>>3 + 7
	buckets, err := getBucketsFromHint(initialBucketsHint, p.len)
	if err != nil {
		return err
	}
	p.buckets = buckets
	p.perm.Init()
	return nil
}
func (p *PackedTable) NumBuckets() uint {
	return p.numBuckets
}
func (p *PackedTable) SizeInTags() uint {
	return tagsPerPTable * p.numBuckets
}
func (p *PackedTable) SizeInBytes() uint {
	return p.len
}
func (p *PackedTable) BitsPerItem() uint {
	return p.bitsPerTag
}