]> gitweb.factorcode.org Git - factor.git/blob - extra/checksums/multi/multi.factor
factor: trim using lists
[factor.git] / extra / checksums / multi / multi.factor
1 ! Copyright (C) 2018 Alexander Ilin.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors checksums checksums.common destructors
4 kernel sequences ;
5 IN: checksums.multi
6
7 TUPLE: multi-checksum checksums ;
8
9 C: <multi-checksum> multi-checksum
10
11 TUPLE: multi-state < disposable states results ;
12
13 M: multi-checksum initialize-checksum-state
14     checksums>> [ initialize-checksum-state ] map
15     multi-state new-disposable swap >>states ;
16
17 M: multi-state dispose*
18     states>> dispose-each ;
19
20 M: multi-state add-checksum-bytes
21     '[ [ _ add-checksum-bytes ] map! ] change-states ;
22
23 M: multi-state get-checksum
24     dup results>> [
25         dup states>> [ get-checksum ] map [ >>results ] keep
26     ] unless* nip ;
27
28 INSTANCE: multi-checksum block-checksum