1 ! Copyright (C) 2014 John Benediktsson.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: accessors alien.c-types alien.data byte-arrays
5 checksums combinators endian generalizations grouping kernel
6 math math.bitwise sequences specialized-arrays ;
7 SPECIALIZED-ARRAY: uint64_t
11 CONSTANT: prime1 2654435761
12 CONSTANT: prime2 2246822519
13 CONSTANT: prime3 3266489917
14 CONSTANT: prime4 668265263
15 CONSTANT: prime5 374761393
23 :: native-mapper ( from to bytes c-type -- seq )
25 bytes byte-array? alien.data:little-endian? and
27 [ c-type heap-size <groups> [ le> ] map ] if ; inline
31 M:: xxhash checksum-bytes ( bytes checksum -- value )
32 checksum seed>> :> seed
35 len dup 16 mod - :> len/16
36 len dup 4 mod - :> len/4
40 seed prime1 w+ prime2 w+
45 0 len/16 bytes uint native-mapper
49 [ prime2 w* w+ 13 bitroll-32 prime1 w* ]
65 len/16 len/4 bytes uint native-mapper
66 [ prime3 w* w+ 17 bitroll-32 prime4 w* ] each
68 bytes len/4 tail-slice
69 [ prime5 w* w+ 11 bitroll-32 prime1 w* ] each
71 [ -15 shift ] [ bitxor ] bi prime2 w*
72 [ -13 shift ] [ bitxor ] bi prime3 w*
73 [ -16 shift ] [ bitxor ] bi ;
75 INSTANCE: xxhash checksum