| 485 | } |
| 486 | |
| 487 | func (bc *bitmapContainer) ior(a container) container { |
| 488 | switch x := a.(type) { |
| 489 | case *arrayContainer: |
| 490 | return bc.iorArray(x) |
| 491 | case *bitmapContainer: |
| 492 | return bc.iorBitmap(x) |
| 493 | case *runContainer16: |
| 494 | if x.isFull() { |
| 495 | return x.clone() |
| 496 | } |
| 497 | for i := range x.iv { |
| 498 | bc.iaddRange(int(x.iv[i].start), int(x.iv[i].last())+1) |
| 499 | } |
| 500 | if bc.isFull() { |
| 501 | return newRunContainer16Range(0, MaxUint16) |
| 502 | } |
| 503 | // bc.computeCardinality() |
| 504 | return bc |
| 505 | } |
| 506 | panic(fmt.Errorf("unsupported container type %T", a)) |
| 507 | } |
| 508 | |
| 509 | func (bc *bitmapContainer) lazyIOR(a container) container { |
| 510 | switch x := a.(type) { |