SwiftRoaring
A better compressed bitset in Swift http://roaringbitmap.org/
Install / Use
/learn @RoaringBitmap/SwiftRoaringREADME
SwiftRoaring
<a href="https://developer.apple.com/swift"><img src="https://img.shields.io/badge/Swift4-compatible-green.svg?style=flat" alt="Swift 4 compatible" /></a>
<a href="https://github.com/apple/swift-package-manager"><img src="https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg"/></a>
Swift wrapper for CRoaring (a C/C++ implementation at https://github.com/RoaringBitmap/CRoaring)
Roaring bitmaps are used by several important systems:
- Apache Lucene and derivative systems such as Solr and Elastic,
- Metamarkets' Druid,
- Apache Spark,
- Netflix Atlas,
- LinkedIn Pinot,
- OpenSearchServer,
- Cloud Torrent,
- Whoosh,
- Pilosa,
- Microsoft Visual Studio Team Services (VSTS),
- eBay's Apache Kylin.
Roaring bitmaps are found to work well in many important applications:
Use Roaring for bitmap compression whenever possible. Do not use other bitmap compression methods (Wang et al., SIGMOD 2017)
Dependencies
Swift 4.0 or higher
Usage using Swift Package Manager
Create a directory where you will create your application:
mkdir foo
cd foo
swift package init --type executable
Then edit Package.swift so that it reads something like this:
import PackageDescription
let package = Package(
name: "foo",
dependencies: [
.package(url: "https://github.com/RoaringBitmap/SwiftRoaring", from: "0.0.1")
],
targets: [
.target(
name: "foo",
dependencies: ["SwiftRoaring"]),
]
)
Edit main.swift (in Sources) so that it looks something like this :
import SwiftRoaring;
....
Example
Here is a simplified but complete example:
import SwiftRoaring
//Create a new Roaring Bitmap
let bitmap = RoaringBitmap()
//Example: Add Range
bitmap.addRange(min: 0, max: 500)
//Example: copy
let cpy = bitmap.copy()
//Example: Operators
let and = bitmap && cpy
//Example: Iterate
for i in bitmap {
print(i)
}
//See documentation for more functionalities!
Development
You can build using Swift Package Manager as follows:
swift build --configuration release
To find where the library is built, type the following in your shell:
echo $(swift build --configuration release --show-bin-path)
You can run tests using Swift Package Manager as follows:
swift test
Interactive use
$ swift build --configuration release
$ swift repl -I .build/release -L .build/release -lSwiftRoaringDynamic
1> import SwiftRoaring
2> let bitmap = RoaringBitmap()
3> bitmap.add(1)
4> for i in bitmap {
print(i)
}
Mailing list/discussion group
https://groups.google.com/g/roaring-bitmaps
Compatibility with Java RoaringBitmap library
You can read bitmaps in Go, Java, C, C++ that have been serialized in Java, C, C++.
References
- Daniel Lemire, Owen Kaser, Nathan Kurz, Luca Deri, Chris O'Hara, François Saint-Jacques, Gregory Ssi-Yan-Kai, Software: Practice and Experience Volume 48, Issue 4 April 2018 Pages 867-895 arXiv:1709.07821
- Samy Chambi, Daniel Lemire, Owen Kaser, Robert Godin, Better bitmap performance with Roaring bitmaps, Software: Practice and Experience Volume 46, Issue 5, pages 709–719, May 2016 http://arxiv.org/abs/1402.6407 This paper used data from http://lemire.me/data/realroaring2014.html
- Daniel Lemire, Gregory Ssi-Yan-Kai, Owen Kaser, Consistently faster and smaller compressed bitmaps with Roaring, Software: Practice and Experience Volume 46, Issue 11, pages 1547-1569, November 2016 http://arxiv.org/abs/1603.06549
Related Skills
node-connect
352.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
