code: func differenceRunBitmap(a, b *Container) *Container {
  	statsHit("difference/RunBitmap")
  	ra := a.runs()
  	// If a is full, difference is the flip of b.
  	if len(ra) > 0 && ra[0].start == 0 && ra[0].last == 65535 {
  		return flipBitmap(b)
  	}
  	output := NewContainerRun(nil)
  	runs := output.runs()
  	if len(ra) == 0 {
  		return NewContainerRun(nil)
  	}
  	output.n = a.n
  	for _, inputRun := range ra {
  		run := inputRun
  		add := true
  		for bit := inputRun.start; bit <= inputRun.last; bit++ {
  			if b.bitmapContains(bit) {
  				output.n--
  				if run.start == bit {
  					if bit == 65535 { //overflow
  						add = false
  					}
  
  					run.start++
  				} else if bit == run.last {
  					run.last--
  				} else {
  					run.last = bit - 1
  					if run.last >= run.start {
  						runs = append(runs, run)
  					}
  					run.start = bit + 1
  					run.last = inputRun.last
  				}
  				if run.start > run.last {
  					break
  				}
  			}
  
  			if bit == 65535 { //overflow
  				break
  			}
  		}
  		if run.start <= run.last {
  			if add {
  				runs = append(runs, run)
  			}
  		}
  	}
  
  	output.setRuns(runs)
  	if output.n < ArrayMaxSize && int32(len(runs)) > output.n/2 {
  		output.runToArray()
  	} else if len(runs) > runMaxSize {
  		output.runToBitmap()
  	}
  	return output
  }
docs: // differenceRunBitmap computes the difference of an run from a bitmap.