1 ! Copyright (C) 2014 John Benediktsson.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: accessors alien alien.c-types alien.data byte-arrays
5 checksums combinators endian generalizations grouping kernel
6 locals math math.bitwise math.ranges sequences
8 SPECIALIZED-ARRAY: uint64_t
12 CONSTANT: prime1 2654435761
13 CONSTANT: prime2 2246822519
14 CONSTANT: prime3 3266489917
15 CONSTANT: prime4 668265263
16 CONSTANT: prime5 374761393
24 :: native-mapper ( from to bytes c-type -- seq )
26 bytes byte-array? alien.data:little-endian? and
28 [ c-type heap-size <groups> [ le> ] map ] if ; inline
32 M:: xxhash checksum-bytes ( bytes checksum -- value )
33 checksum seed>> :> seed
36 len dup 16 mod - :> len/16
37 len dup 4 mod - :> len/4
41 seed prime1 w+ prime2 w+
46 0 len/16 bytes uint native-mapper
50 [ prime2 w* w+ 13 bitroll-32 prime1 w* ]
66 len/16 len/4 bytes uint native-mapper
67 [ prime3 w* w+ 17 bitroll-32 prime4 w* ] each
69 bytes len/4 tail-slice
70 [ prime5 w* w+ 11 bitroll-32 prime1 w* ] each
72 [ -15 shift ] [ bitxor ] bi prime2 w*
73 [ -13 shift ] [ bitxor ] bi prime3 w*
74 [ -16 shift ] [ bitxor ] bi ;
76 INSTANCE: xxhash checksum