github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/compress/lzw/writer.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package lzw
     6  
     7  import (
     8  	"github.com/shogo82148/std/io"
     9  )
    10  
    11  // WriterはLZWコンプレッサーです。データの圧縮形式を
    12  // 下層のライターに書き込みます( [NewWriter] を参照)。
    13  type Writer struct {
    14  	// wは圧縮バイトが書き込まれるライターです。
    15  	w writer
    16  
    17  	// order, write, bits, nBits, and widthは、
    18  	// コードストリームをバイトストリームに変換するための状態です。
    19  	order Order
    20  	write func(*Writer, uint32) error
    21  	bits  uint32
    22  	nBits uint
    23  	width uint
    24  	// litWidthはリテラルコードのビット幅です。
    25  	litWidth uint
    26  
    27  	// hiは次のコード生成によって暗示されるコードです。
    28  	// overflowはhiがコードの幅を超えるコードです。
    29  	hi, overflow uint32
    30  
    31  	// savedCodeは最新のWrite呼び出しの終わりに蓄積されるコードです。
    32  	// もしWrite呼び出しがなかった場合、invalidCodeと等しいです。
    33  	savedCode uint32
    34  
    35  	// err は書き込み中に最初に発生したエラーです。ライターをクローズすると、
    36  	// 以降の書き込み呼び出しは errClosed を返します。
    37  	err error
    38  
    39  	// tableは20ビットのキーから12ビットの値へのハッシュテーブルです。各テーブルエントリにはkey<<12|valが含まれており、衝突は線形探査法によって解決されます。キーは12ビットのコード接頭辞と8ビットのバイト接尾辞で構成されます。値は12ビットのコードです。
    40  	table [tableSize]uint32
    41  }
    42  
    43  // Writeはpの圧縮された表現をwの基になるライターに書き込みます。
    44  func (w *Writer) Write(p []byte) (n int, err error)
    45  
    46  // Closeは [Writer] を閉じ、保留中の出力をフラッシュします。wの基になるライターは閉じません。
    47  func (w *Writer) Close() error
    48  
    49  // Resetは [Writer] の状態をクリアし、新しい [Writer] として再利用できるようにします。
    50  func (w *Writer) Reset(dst io.Writer, order Order, litWidth int)
    51  
    52  // NewWriterは新しい [io.WriteCloser] を作成します。
    53  // 返された [io.WriteCloser] に書き込まれたデータは圧縮され、wに書き込まれます。
    54  // 書き込みが完了した場合、呼び出し元の責任で [io.WriteCloser] をCloseする必要があります。
    55  // リテラルコードに使用するビット数であるlitWidthは、範囲[2,8]内でなければなりませんが、通常は8です。
    56  // 入力バイトは1<<litWidth未満でなければなりません。
    57  //
    58  // 返された [io.WriteCloser] の基になる型が [*Writer] であることが保証されます。
    59  func NewWriter(w io.Writer, order Order, litWidth int) io.WriteCloser