Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defun hash-list (list &optional (seed #x5555555555555555))
- (declare (optimize (speed 3) (safety 1) (debug 0) (space 0))
- (type list list)
- (type (unsigned-byte 64) seed))
- (iterate
- (declare (type (unsigned-byte 64) elt seed))
- (for elt in list)
- (setf seed (ldb (byte 64 0) (+ elt seed))
- seed (ldb (byte 64 0) (logxor seed (ash seed -16)))
- seed (ldb (byte 64 0) (+ seed (ash seed 32))))
- (finally
- ;; This is the exact murmurhash mixing
- (setf seed (logxor seed (ash seed -33))
- seed (ldb (byte 64 0) (* seed #XFF51AFD7ED558CCD))
- seed (logxor seed (ash seed -33))
- seed (ldb (byte 64 0) (* seed #XC4CEB9FE1A85EC53))
- seed (logxor seed (ash seed -33)))
- (return seed))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement