16bf7b7d96
The snappy codebase is a mess with competing implementations, nonsensical code duplication and no real direction due to a partially implemented faststreams migration. This PR makes it slightly less of a mess, but make no mistake, it's still a mess - the difference being that there are a few more signposts along the way in terms of module organisation, and a little less mess as the line count of the PR discloses. Performance remains poor - ~3x slower than C++ - but at least there's less code to look at :) |
||
---|---|---|
.github/workflows | ||
snappy | ||
tests | ||
.appveyor.yml | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
LICENSE | ||
README.md | ||
snappy.nim | ||
snappy.nimble |
README.md
Snappy
Nim implementation of Snappy compression algorithm
Currently, this implementation only support block compression and no stream compression support at all.
API
- proc encode*(src: openArray[byte]): seq[byte]
- proc decode*(src: openArray[byte]): seq[byte]
- template compress --- an alias to encode
- template uncompress --- an alias to decode
Examples
import snappy
var source = readFile("readme.md")
var encoded = snappy.encode(toOpenArrayByte(source, 0, source.len-1))
var decoded = snappy.decode(encoded)
assert equalMem(decoded[0].addr, source[0].addr, source.len)
Installation via nimble
nimble install snappy