Fast version of setdiff(rx[1]:rx[2], y).

bit_rangediff(rx, y, revx = FALSE, revy = FALSE)

Arguments

rx

range of integers given as ri() or as a two-element integer()

y

an integer vector of elements to exclude

revx

FALSE as is, TRUE to reverse the direction and sign of rx

revy

FALSE as is, TRUE to reverse the direction and sign of y

Value

an integer vector

Details

determines the range of the integers y and checks if the density justifies use of a bit vector; if yes, uses a bit vector for the set operation; if no, falls back to a quicksort and merge_rangediff()

Examples

bit_rangediff(c(1L, 6L), c(3L, 4L))
#> [1] 1 2 5 6
bit_rangediff(c(6L, 1L), c(3L, 4L))
#> [1] 6 5 2 1
bit_rangediff(c(6L, 1L), c(3L, 4L), revx=TRUE)
#> [1] -1 -2 -3 -4 -5 -6
bit_rangediff(c(6L, 1L), c(3L, 4L), revx=TRUE, revy=TRUE)
#> [1] -1 -2 -5 -6