/ w r i t e B l o c k H u f f e n c o d e s a b l o c k o f b y t e s a s e i t h e r / / H u f f m a n e n c o d e d l i t e r a l s o r u n c o m p r e s s e d b y t e s i f t h e / / r e s u l t s o n l y g a i n s v e r y l i t t l e f r o m c o m p r e s s i o n . f u n c ( w * h u f f m a n B i t W r i t e r ) w r i t e B l o c k H u f f ( e o f b o o l , i n p u t [ ] b y t e ) { i f w . e r r ! = n i l { r e t u r n } / / C l e a r h i s t o g r a m f o r i : = r a n g e w . l i t e r a l F r e q { w . l i t e r a l F r e q [ i ] = 0 } / / A d d e v e r y t h i n g a s l i t e r a l s h i s t o g r a m ( i n p u t , w . l i t e r a l F r e q ) w . l i t e r a l F r e q [ e n d B l o c k M a r k e r ] = 1 c o n s t n u m L i t e r a l s = e n d B l o c k M a r k e r + 1 c o n s t n u m O f f s e t s = 1 w . l i t e r a l E n c o d i n g . g e n e r a t e ( w . l i t e r a l F r e q , 1 5 ) / / F i g u r e o u t s m a l l e s t c o d e . / / A l w a y s u s e d y n a m i c H u f f m a n o r S t o r e v a r n u m C o d e g e n s i n t / / G e n e r a t e c o d e g e n a n d c o d e g e n F r e q u e n c i e s , w h i c h i n d i c a t e s h o w t o e n c o d e / / t h e l i t e r a l E n c o d i n g a n d t h e o f f s e t E n c o d i n g . w . g e n e r a t e C o d e g e n ( n u m L i t e r a l s , n u m O f f s e t s , w . l i t e r a l E n c o d i n g , h u f f O f f s e t ) w . c o d e g e n E n c o d i n g . g e n e r a t e ( w . c o d e g e n F r e q [ : ] , 7 ) s i z e , n u m C o d e g e n s : = w . d y n a m i c S i z e ( w . l i t e r a l E n c o d i n g , h u f f O f f s e t , 0 ) / / S t o r e b y t e s , i f w e d o n ' t g e t a r e a s o n a b l e i m p r o v e m e n t . i f s s i z e , s t o r a b l e : = w . s t o r e d S i z e ( i n p u t ) ; s t o r a b l e & & s s i z e < ( s i z e + s i z e > > 4 ) { w . w r i t e S t o r e d H e a d e r ( l e n ( i n p u t ) , e o f ) w . w r i t e B y t e s ( i n p u t ) r e t u r n } / / H u f f m a n . w . w r i t e D y n a m i c H e a d e r ( n u m L i t e r a l s , n u m O f f s e t s , n u m C o d e g e n s , e o f ) e n c o d i n g : = w . l i t e r a l E n c o d i n g . c o d e s [ : 2 5 7 ] n : = w . n b y t e s f o r _ , t : = r a n g e i n p u t { / / B i t w r i t i n g i n l i n e d , ~ 3 0 % s p e e d u p c : = e n c o d i n g [ t ] w . b i t s | = u i n t 6 4 ( c . c o d e ) < < w . n b i t s w . n b i t s + = u i n t ( c . l e n ) i f w . n b i t s < 4 8 { c o n t i n u e } / / S t o r e 6 b y t e s b i t s : = w . b i t s w . b i t s > > = 4 8 w . n b i t s - = 4 8 b y t e s : = w . b y t e s [ n : n + 6 ] b y t e s [ 0 ] = b y t e ( b i t s ) b y t e s [ 1 ] = b y t e ( b i t s > > 8 ) b y t e s [ 2 ] = b y t e ( b i t s > > 1 6 ) b y t e s [ 3 ] = b y t e ( b i t s > > 2 4 ) b y t e s [ 4 ] = b y t e ( b i t s > > 3 2 ) b y t e s [ 5 ] = b y t e ( b i t s > > 4 0 ) n + = 6 i f n < b u f f e r F l u s h S i z e { c o n t i n u e } w . w r i t e ( w . b y t e s [ : n ] ) i f w . e r r ! = n i l { r e t u r n / / R e t u r n e a r l y i n t h e e v e n t o f w r i t e f a i l u r e s } n = 0 } w . n b y t e s = n w . w r i t e C o d e ( e n c o d i n g [ e n d B l o c k M a r k e r ] ) }