2020-11-23 22:15:56 +00:00
|
|
|
package huffman ;import (_afd "errors";_e "fmt";_be "github.com/unidoc/unipdf/v3/internal/bitwise";_c "github.com/unidoc/unipdf/v3/internal/jbig2/internal";_af "math";_a "strings";);func _ggd (_ecc int32 )*InternalNode {return &InternalNode {_ba :_ecc }};type Code struct{_eb int32 ;_dfc int32 ;_gd int32 ;_fee bool ;_gf int32 ;};type ValueNode struct{_ec int32 ;_dac int32 ;_ff bool ;};var _ Tabler =&EncodedTable {};func _afg (_bb ,_gc int32 )string {var _cc int32 ;_cge :=make ([]rune ,_gc );for _cbb :=int32 (1);_cbb <=_gc ;_cbb ++{_cc =_bb >>uint (_gc -_cbb )&1;if _cc !=0{_cge [_cbb -1]='1';}else {_cge [_cbb -1]='0';};};return string (_cge );};func (_dacd *ValueNode )Decode (r _be .StreamReader )(int64 ,error ){_dc ,_ecf :=r .ReadBits (byte (_dacd ._ec ));if _ecf !=nil {return 0,_ecf ;};if _dacd ._ff {_dc =-_dc ;};return int64 (_dacd ._dac )+int64 (_dc ),nil ;};func _abba (_gae [][]int32 )(*StandardTable ,error ){var _bdb []*Code ;for _aec :=0;_aec < len (_gae );_aec ++{_afba :=_gae [_aec ][0];_dae :=_gae [_aec ][1];_add :=_gae [_aec ][2];var _bgf bool ;if len (_gae [_aec ])> 3{_bgf =true ;};_bdb =append (_bdb ,NewCode (_afba ,_dae ,_add ,_bgf ));};_eab :=&StandardTable {_dgf :_ggd (0)};if _afac :=_eab .InitTree (_bdb );_afac !=nil {return nil ,_afac ;};return _eab ,nil ;};func GetStandardTable (number int )(Tabler ,error ){if number <=0||number > len (_fad ){return nil ,_afd .New ("\u0049n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};_ged :=_fad [number -1];if _ged ==nil {var _fbe error ;_ged ,_fbe =_abba (_ggdf [number -1]);if _fbe !=nil {return nil ,_fbe ;};_fad [number -1]=_ged ;};return _ged ,nil ;};type InternalNode struct{_ba int32 ;_abc Node ;_daf Node ;};func (_eg *StandardTable )Decode (r _be .StreamReader )(int64 ,error ){return _eg ._dgf .Decode (r )};func (_cbf *StandardTable )String ()string {return _cbf ._dgf .String ()+"\u000a"};func (_bed *InternalNode )String ()string {_ge :=&_a .Builder {};_ge .WriteString ("\u000a");_bed .pad (_ge );_ge .WriteString ("\u0030\u003a\u0020");_ge .WriteString (_bed ._abc .String ()+"\u000a");_bed .pad (_ge );_ge .WriteString ("\u0031\u003a\u0020");_ge .WriteString (_bed ._daf .String ()+"\u000a");return _ge .String ();};type BasicTabler interface{HtHigh ()int32 ;HtLow ()int32 ;StreamReader ()_be .StreamReader ;HtPS ()int32 ;HtRS ()int32 ;HtOOB ()int32 ;};func (_dge *OutOfBandNode )String ()string {return _e .Sprintf ("\u0025\u0030\u00364\u0062",int64 (_af .MaxInt64 ));};func (_ed *InternalNode )Decode (r _be .StreamReader )(int64 ,error ){_cg ,_bea :=r .ReadBit ();if _bea !=nil {return 0,_bea ;};if _cg ==0{return _ed ._abc .Decode (r );};return _ed ._daf .Decode (r );};type StandardTable struct{_dgf *InternalNode };func (_g *EncodedTable )InitTree (codeTable []*Code )error {_aad (codeTable );for _ ,_ga :=range codeTable {if _gac :=_g ._ac .append (_ga );_gac !=nil {return _gac ;};};return nil ;};func (_d *EncodedTable )RootNode ()*InternalNode {return _d ._ac };type FixedSizeTable struct{_ab *InternalNode };var _ Node =&InternalNode {};type Node interface{Decode (_afa _be .StreamReader )(int64 ,error );String ()string ;};func (_bcb *FixedSizeTable )Decode (r _be .StreamReader )(int64 ,error ){return _bcb ._ab .Decode (r )};func (_adf *InternalNode )pad (_afb *_a .Builder ){for _afe :=int32 (0);_afe < _adf ._ba ;_afe ++{_afb .WriteString ("\u0020\u0020\u0020");};};func NewFixedSizeTable (codeTable []*Code )(*FixedSizeTable ,error ){_gbb :=&FixedSizeTable {_ab :&InternalNode {}};if _bgd :=_gbb .InitTree (codeTable );_bgd !=nil {return nil ,_bgd ;};return _gbb ,nil ;};var _fad =make ([]Tabler ,len (_ggdf ));func (_fe *OutOfBandNode )Decode (r _be .StreamReader )(int64 ,error ){return 0,_c .ErrOOB };type EncodedTable struct{BasicTabler ;_ac *InternalNode ;};func _df (_abb *Code )*OutOfBandNode {return &OutOfBandNode {}};func _fae (_gbf ,_caf int32 )int32 {if _gbf > _caf {return _gbf ;};return _caf ;};type OutOfBandNode struct{};func (_de *EncodedTable )parseTable ()error {var (_gacg []*Code ;_cb ,_bc ,_ea int32 ;_gb uint64 ;_f error ;);
|