code: func intersectRunRun(a, b *Container) *Container {
  	statsHit("intersect/RunRun")
  	output := NewContainerRun(nil)
  	ra, rb := a.runs(), b.runs()
  	na, nb := len(ra), len(rb)
  	for i, j := 0, 0; i < na && j < nb; {
  		va, vb := ra[i], rb[j]
  		if va.last < vb.start {
  			// |--va--| |--vb--|
  			i++
  		} else if vb.last < va.start {
  			// |--vb--| |--va--|
  			j++
  		} else if va.last > vb.last && va.start >= vb.start {
  			// |--vb-|-|-va--|
  			output.n += output.runAppendInterval(interval16{start: va.start, last: vb.last})
  			j++
  		} else if va.last > vb.last && va.start < vb.start {
  			// |--va|--vb--|--|
  			output.n += output.runAppendInterval(vb)
  			j++
  		} else if va.last <= vb.last && va.start >= vb.start {
  			// |--vb|--va--|--|
  			output.n += output.runAppendInterval(va)
  			i++
  		} else if va.last <= vb.last && va.start < vb.start {
  			// |--va-|-|-vb--|
  			output.n += output.runAppendInterval(interval16{start: vb.start, last: va.last})
  			i++
  		}
  	}
  	runs := output.runs()
  	if output.n < ArrayMaxSize && int32(len(runs)) > output.n/2 {
  		output.runToArray()
  	} else if len(runs) > runMaxSize {
  		output.runToBitmap()
  	}
  	return output
  }
docs: // intersectRunRun computes the intersect of two run containers.