factor/extra/checksums/multi/multi.factor

29 lines
770 B
Factor

! Copyright (C) 2018 Alexander Ilin.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors checksums checksums.common destructors fry
kernel sequences ;
IN: checksums.multi
TUPLE: multi-checksum checksums ;
C: <multi-checksum> multi-checksum
TUPLE: multi-state < disposable states results ;
M: multi-checksum initialize-checksum-state
checksums>> [ initialize-checksum-state ] map
multi-state new-disposable swap >>states ;
M: multi-state dispose*
states>> dispose-each ;
M: multi-state add-checksum-bytes
'[ [ _ add-checksum-bytes ] map! ] change-states ;
M: multi-state get-checksum
dup results>> [
dup states>> [ get-checksum ] map [ >>results ] keep
] unless* nip ;
INSTANCE: multi-checksum block-checksum