Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

[![tests](https://github.com/dansupergameprogrammer/superfaiss/actions/workflows/tests.yml/badge.svg)](https://github.com/dansupergameprogrammer/superfaiss/actions/workflows/tests.yml)

**Current release: [v3.3.0](https://github.com/dansupergameprogrammer/superfaiss/releases/tag/v3.3.0)** — what each release added is in [CHANGELOG.md](CHANGELOG.md). Version markers in the feature list below record when a capability landed, not the current version.

Fast, deterministic, allocation-free k-nearest-neighbor search for game runtimes —
over banks you bake in your pipeline or grow at play time. One bank answers many
questions: score the whole vector or any weighted slice of it, decompose every hit's
Expand Down Expand Up @@ -214,6 +216,17 @@ suite enforces that SIMD and mirror results are bit-identical on a device.
in this library. These are the primitives the UE plugin's Bank Inspector tool is built on
([superfaiss-unreal](https://github.com/dansupergameprogrammer/superfaiss-unreal)); nothing
about them is UE-specific. [API.md](docs/API.md).
- **Archive peek without a load (v3.3).** `PeekScratchArchive` reads a serialized scratch
archive's header and channel table straight out of a byte span and reports its geometry plus
`archiveBytes` — exactly the number of bytes a `Load` will consume — without allocating an
arena, reading the payload, or touching a bank. It applies the same header rules `Load` does,
from one shared validator, so a peek and a load cannot drift apart about what a well-formed
archive is: whatever a peek rejects, a load rejects. A span shorter than the archive it
declares is `BadFormat`; a longer one is not, because whatever follows belongs to the caller.
That is the point — a host that appends its own trailer after the archive (a channel-name
frame, say) uses `archiveBytes` to locate and validate that trailer *before* committing the
load, rather than discovering a broken trailer with the rows already replaced. Reading the
header twice is free; unwinding a load is not. [API.md](docs/API.md).

## What it deliberately is not

Expand Down
Loading