  Compressed bitmap indexes are used in systems such as Git or Oracle to
accelerate queries. They represent sets and often support operations such as
unions, intersections, differences, and symmetric differences. Several
important systems such as Elasticsearch, Apache Spark, Netflix's Atlas,
LinkedIn's Pinot, Metamarkets' Druid, Pilosa, Apache Hive, Apache Tez,
Microsoft Visual Studio Team Services and Apache Kylin rely on a specific type
of compressed bitmap index called Roaring. We present an optimized software
library written in C implementing Roaring bitmaps: CRoaring. It benefits from
several algorithms designed for the single-instruction-multiple-data (SIMD)
instructions available on commodity processors. In particular, we present
vectorized algorithms to compute the intersection, union, difference and
symmetric difference between arrays. We benchmark the library against a wide
range of competitive alternatives, identifying weaknesses and strengths in our
software. Our work is available under a liberal open-source license.
