MCPcopy Index your code
hub / github.com/OneOfOne/xxhash

github.com/OneOfOne/xxhash @v1.2.8

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.8 ↗ · + Follow
111 symbols 391 edges 9 files 28 documented · 25% 29 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

xxhash GoDoc Build Status Coverage

This is a native Go implementation of the excellent xxhash* algorithm, an extremely fast non-cryptographic Hash algorithm, working at speeds close to RAM limits.

  • The C implementation is (Copyright (c) 2012-2014, Yann Collet)

Install

go get github.com/OneOfOne/xxhash

Features

  • On Go 1.7+ the pure go version is faster than CGO for all inputs.
  • Supports ChecksumString{32,64} xxhash{32,64}.WriteString, which uses no copies when it can, falls back to copy on appengine.
  • The native version falls back to a less optimized version on appengine due to the lack of unsafe.
  • Almost as fast as the mostly pure assembly version written by the brilliant cespare, while also supporting seeds.
  • To manually toggle the appengine version build with -tags safe.

Benchmark

Core i7-4790 @ 3.60GHz, Linux 4.12.6-1-ARCH (64bit), Go tip (+ff90f4af66 2017-08-19)

➤ go test -bench '64' -count 5 -tags cespare | benchstat /dev/stdin
name                          time/op

# https://github.com/cespare/xxhash
XXSum64Cespare/Func-8          160ns ± 2%
XXSum64Cespare/Struct-8        173ns ± 1%
XXSum64ShortCespare/Func-8    6.78ns ± 1%
XXSum64ShortCespare/Struct-8  19.6ns ± 2%

# this package (default mode, using unsafe)
XXSum64/Func-8                 170ns ± 1%
XXSum64/Struct-8               182ns ± 1%
XXSum64Short/Func-8           13.5ns ± 3%
XXSum64Short/Struct-8         20.4ns ± 0%

# this package (appengine, *not* using unsafe)
XXSum64/Func-8                 241ns ± 5%
XXSum64/Struct-8               243ns ± 6%
XXSum64Short/Func-8           15.2ns ± 2%
XXSum64Short/Struct-8         23.7ns ± 5%

CRC64ISO-8                    1.23µs ± 1%
CRC64ISOString-8              2.71µs ± 4%
CRC64ISOShort-8               22.2ns ± 3%

Fnv64-8                       2.34µs ± 1%
Fnv64Short-8                  74.7ns ± 8%

Usage

    h := xxhash.New64()
    // r, err := os.Open("......")
    // defer f.Close()
    r := strings.NewReader(F)
    io.Copy(h, r)
    fmt.Println("xxhash.Backend:", xxhash.Backend)
    fmt.Println("File checksum:", h.Sum64())

playground

TODO

  • Rewrite the 32bit version to be more optimized.
  • General cleanup as the Go inliner gets smarter.

License

This project is released under the Apache v2. license. See LICENSE for more details.

Core symbols most depended-on inside this repo

Write
called by 33
xxhash_go17.go
round64
called by 30
xxhash.go
u32
called by 18
xxhash_go17.go
u64
called by 16
xxhash_go17.go
mergeRound64
called by 16
xxhash.go
Sum64
called by 16
xxhash_safe.go
Run
called by 13
cmd/xxhsum/sema.go
rotl32_13
called by 12
xxhash.go

Shape

Function 83
Method 25
Struct 3

Languages

Go100%

Modules by API surface

xxhash.go49 symbols
xxhash_test.go21 symbols
xxhash_unsafe.go8 symbols
xxhash_safe.go8 symbols
cmd/xxhsum/main.go7 symbols
xxhash_go17.go6 symbols
cmd/xxhsum/sema.go5 symbols
bugs_test.go5 symbols
benchmarks/xxhash_cespare_test.go2 symbols

For agents

$ claude mcp add xxhash \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact