]> gitweb.factorcode.org Git - factor.git/blob - basis/checksums/interleave/interleave.factor
factor: trim using lists
[factor.git] / basis / checksums / interleave / interleave.factor
1 ! Copyright (C) 2009 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs checksums grouping kernel math sequences ;
4 IN: checksums.interleave
5
6 : seq>2seq ( seq -- seq1 seq2 )
7     ! { abcdefgh } -> { aceg } { bdfh }
8     2 group flip [ { } { } ] [ first2 ] if-empty ;
9
10 : 2seq>seq ( seq1 seq2 -- seq )
11     ! { aceg } { bdfh } -> { abcdefgh }
12     [ zip concat ] keep like ;
13
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 ;