func firstClearBit(bs *bitset.BitSet) (uint, bool) { for i := uint(0); i < bs.Len(); i++ { if !bs.Test(i) { return i, true } } return 0, false }
func equalsBitSet(a *bitset.BitSet, b *Bitmap) bool { for i, e := a.NextSet(0); e; i, e = a.NextSet(i + 1) { if !b.ContainsInt(int(i)) { return false } } i := b.Iterator() for i.HasNext() { if !a.Test(uint(i.Next())) { return false } } return true }
func requestRetransmit(blocks []int, bs *bitset.BitSet, conn net.Conn, e Encoder, isRestart bool) { if len(blocks) <= 0 { return } var missingBlocks []int if isRestart { missingBlocks = blocks[0:1] } else { for _, b := range blocks { if !bs.Test(uint(b)) { missingBlocks = append(missingBlocks, b) } } } payload := Retransmit{IsRestart: isRestart, BlockNums: missingBlocks} pkt := Packet{Type: RETRANSMIT, Payload: payload} _, err := sendPacket(&pkt, conn, e) if err != nil { log.Println("Error sending retransmit blocks: " + err.Error()) } }
func (p *smatPair) equalsBitSet(a *bitset.BitSet, b *Bitmap) bool { for i, e := a.NextSet(0); e; i, e = a.NextSet(i + 1) { if !b.ContainsInt(int(i)) { fmt.Printf("in a bitset, not b bitmap, i: %d\n", i) fmt.Printf(" a bitset: %s\n b bitmap: %s\n", a.String(), b.String()) return false } } i := b.Iterator() for i.HasNext() { v := i.Next() if !a.Test(uint(v)) { fmt.Printf("in b bitmap, not a bitset, v: %d\n", v) fmt.Printf(" a bitset: %s\n b bitmap: %s\n", a.String(), b.String()) return false } } return true }