36 lines
1.0 KiB
Factor
36 lines
1.0 KiB
Factor
! Copyright (C) 2016 Alexander Ilin.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: accessors ascii checksums checksums.common destructors io
|
|
io.encodings.binary io.launcher kernel math.parser sequences ;
|
|
IN: checksums.process
|
|
|
|
TUPLE: checksum-process launch-desc ;
|
|
INSTANCE: checksum-process block-checksum
|
|
C: <checksum-process> checksum-process
|
|
|
|
TUPLE: process-state < disposable process result ;
|
|
|
|
M: checksum-process initialize-checksum-state
|
|
launch-desc>> binary <process-stream>
|
|
process-state new-disposable swap >>process ;
|
|
|
|
M: process-state dispose*
|
|
process>> [ dispose ] when* ;
|
|
|
|
M: process-state add-checksum-bytes
|
|
over process>> stream-write ;
|
|
|
|
: trim-hash ( str -- str' )
|
|
dup [ blank? ] find drop [ head ] when* ;
|
|
|
|
M: process-state get-checksum
|
|
dup result>> [
|
|
dup process>> [
|
|
[
|
|
[ out>> dispose ] keep
|
|
stream-contents trim-hash hex-string>bytes
|
|
] with-disposal
|
|
] [ B{ } ] if*
|
|
[ >>result ] keep
|
|
] unless* nip ;
|