Arrays of non-negative integers are encountered frequently in IDL, e.g., for index arrays and lists of ENVI file IDs to name a couple examples. Since valid data elements are non-negative integers,
-1 is used to indicate an empty set. I have a few routines for efficiently computing set unions, intersections, differences, and complements.
For example, suppose I have found the valid data in an image with:
IDL> valid_ind = where(band gt 0.)
And then I find indices of the clouds in the image using my special routine
IDL> noncloud_ind = find_cloud_indices(band)
Now, if I want to find the indices of the pixels of the image that are valid and not cloud pixels, I can use my
IDL> valid_ind = mg_setintersection(valid_ind, noncloud_ind)