factor/basis/checksums/fletcher/fletcher.factor

28 lines
708 B
Factor

! Copyright (C) 2013 John Benediktsson
! See http://factorcode.org/license.txt for BSD license
USING: checksums grouping io.binary kernel locals math sequences
;
IN: checksums.fletcher
SINGLETON: fletcher-16
SINGLETON: fletcher-32
SINGLETON: fletcher-64
INSTANCE: fletcher-16 checksum
INSTANCE: fletcher-32 checksum
INSTANCE: fletcher-64 checksum
:: fletcher ( seq k -- n )
k 16 / :> chars
k 2 / 2^ :> base
base 1 - :> modulo
0 0 seq chars <groups> [
be> + modulo mod [ + modulo mod ] keep
] each [ base * ] [ + ] bi* ; inline
M: fletcher-16 checksum-bytes drop 16 fletcher ;
M: fletcher-32 checksum-bytes drop 32 fletcher ;
M: fletcher-64 checksum-bytes drop 64 fletcher ;