1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs checksums grouping kernel locals math sequences ;
4 IN: checksums.interleave
6 : seq>2seq ( seq -- seq1 seq2 )
7 #! { abcdefgh } -> { aceg } { bdfh }
8 2 group flip [ { } { } ] [ first2 ] if-empty ;
10 : 2seq>seq ( seq1 seq2 -- seq )
11 #! { aceg } { bdfh } -> { abcdefgh }
12 [ zip concat ] keep like ;
14 :: interleaved-checksum ( bytes checksum -- seq )
15 bytes [ zero? ] trim-head
16 dup length odd? [ rest-slice ] when
17 seq>2seq [ checksum checksum-bytes ] bi@ 2seq>seq ;