io.encodings: encoded/decoded length hints

Add guess-encoded-length and guess-decoded-length generics that encodings can implement to provide hints as to how large the translation product will be, for sizing vectors and things like that.
db4
Joe Groff 2011-10-12 21:08:58 -07:00
parent 9082d05582
commit ffacdaf0da
1 changed files with 13 additions and 7 deletions

View File

@ -7,6 +7,12 @@ IN: io.encodings
! The encoding descriptor protocol ! The encoding descriptor protocol
GENERIC: guess-encoded-length ( string-length encoding -- byte-length )
GENERIC: guess-decoded-length ( byte-length encoding -- string-length )
M: object guess-decoded-length drop ; inline
M: object guess-encoded-length drop ; inline
GENERIC: decode-char ( stream encoding -- char/f ) GENERIC: decode-char ( stream encoding -- char/f )
GENERIC: encode-char ( char stream encoding -- ) GENERIC: encode-char ( char stream encoding -- )
@ -31,7 +37,7 @@ ERROR: encode-error ;
! Decoding ! Decoding
M: object <decoder> f decoder boa ; M: object <decoder> f decoder boa ; inline
<PRIVATE <PRIVATE
@ -136,23 +142,23 @@ M: decoder stream-readln dup >decoder< decoder-readln handle-readln ;
M: decoder dispose stream>> dispose ; M: decoder dispose stream>> dispose ;
! Encoding ! Encoding
M: object <encoder> encoder boa ; M: object <encoder> encoder boa ; inline
: >encoder< ( encoder -- stream encoding ) : >encoder< ( encoder -- stream encoding )
[ stream>> ] [ code>> ] bi ; inline [ stream>> ] [ code>> ] bi ; inline
M: encoder stream-element-type M: encoder stream-element-type
drop +character+ ; drop +character+ ; inline
M: encoder stream-write1 M: encoder stream-write1
>encoder< encode-char ; >encoder< encode-char ; inline
M: encoder stream-write M: encoder stream-write
>encoder< encode-string ; >encoder< encode-string ; inline
M: encoder dispose stream>> dispose ; M: encoder dispose stream>> dispose ; inline
M: encoder stream-flush stream>> stream-flush ; M: encoder stream-flush stream>> stream-flush ; inline
INSTANCE: encoder plain-writer INSTANCE: encoder plain-writer
PRIVATE> PRIVATE>