Clast.BloomFilter 0.2.0

dotnet add package Clast.BloomFilter --version 0.2.0
                    
NuGet\Install-Package Clast.BloomFilter -Version 0.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Clast.BloomFilter" Version="0.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Clast.BloomFilter" Version="0.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Clast.BloomFilter" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Clast.BloomFilter --version 0.2.0
                    
#r "nuget: Clast.BloomFilter, 0.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Clast.BloomFilter@0.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Clast.BloomFilter&version=0.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Clast.BloomFilter&version=0.2.0
                    
Install as a Cake Tool

Clast.BloomFilter

Parquet-format Split Block Bloom Filter (SBBF) with a generic-key facade. AVX2 and ARM NEON accelerated, with a scalar fallback.

NuGet CI License: Apache 2.0

Overview

Clast.BloomFilter provides a Split Block Bloom Filter laid out exactly the way the Apache Parquet specification does, so the bytes round-trip with Parquet column-chunk bloom filters and other SBBF implementations. Each block is 256 bits (8 × uint32); a probe touches a single block so the entire query fits in one cache line.

  • Two layers. SplitBlockBloomFilter / SplitBlockBloomFilterBuilder work in raw bytes and pre-hashed ulong keys — the surface you serialize. BloomFilter<T> / BloomFilterBuilder<T> wrap it with an IHash64<T> for typed, in-process use over arbitrary key types.
  • SIMD accelerated. AVX2 on x86-64 and ARM NEON on ARM64 take the fast path; a portable scalar fallback runs everywhere else. Hashing is xxHash64.
  • Pluggable hashing. Hash64.Default<T>() mirrors EqualityComparer<T>.Default, with specializations for the common primitives and a GetHashCode-based fallback for anything else.

Example

using Clast.BloomFilter;

// Build a typed filter sized for ~1000 distinct keys at 1% FPP.
var builder = BloomFilterBuilder<string>.WithCapacity(
    expectedDistinct: 1000, fpp: 0.01, maxBytes: 1 << 20);

foreach (var key in keys)
    builder.Add(key);

var filter = builder.Build();

if (filter.MightContain("foo"))
{
    // Definitely-not vs. probably-yes — go look in the real index.
}

// Serialize the raw bitset to disk in Parquet SBBF wire format.
File.WriteAllBytes("filter.bin", filter.Inner.Data.ToArray());

// Round-trip.
var bytes = File.ReadAllBytes("filter.bin");
var loaded = new BloomFilter<string>(new SplitBlockBloomFilter(bytes));

Target frameworks

  • netstandard2.0
  • net8.0
  • net10.0

The SIMD-accelerated paths require net8.0 or later (they use the System.Runtime.Intrinsics APIs). The netstandard2.0 build uses the scalar implementation on every platform.

License

Licensed under the Apache License, Version 2.0.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Clast.BloomFilter:

Package Downloads
EngineeredWood.Parquet

A pure-managed Apache Parquet reader and writer for .NET that speaks Apache Arrow, with predicate pushdown, column statistics, and Bloom filters. Preliminary 0.1.0 — APIs may change before 1.0.0.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.2.0 39 7/24/2026
0.1.0 257 5/20/2026