# MIUncompContextHuffman

## 定義

      #include <nitro/mi/uncomp_stream.h>

      typedef struct
      {
          u8* destp;        // 4B
          s32 destCount;    // 4B
          u8* treep;        // 4B
          u32 srcTmp;       // 4B
          u32 destTmp;      // 4B
          s16 treeSize;     // 2B
          u8  srcTmpCnt;    // 1B
          u8  destTmpCnt;   // 1B
          u8  bitSize;      // 1B
          u8  _padding2[3]; // 3B
          u8  tree[0x200];  // 512B
                         // 計 540B
      } MIUncompContextHuffman;

## 説明

ハフマン圧縮されたデータをカードから読み込みながら順次ストリーミング展開をおこなう際に、
データ展開状況を保存しておくためのコンテキスト構造体です。
`MI_InitUncompContextHuffman()`でコンテキストの初期化をおこない、`MI_ReadUncompHuffman()`でこのコンテキストを使用して展開状況を保管します。
圧縮データが4bit符号化されたものであれば、treeメンバの配列サイズが32バイトあれば問題ありませんので、sizeof( MIUncompContextHufffman ) よりも、480バイト少ない領域しか与えていなくても構いません。
8bit符号化されたものであれば512バイト必要ですので構造体のサイズを削ることはできません。

destp | 展開したデータの書き込み先領域へのポインタ
destCount | 残り書き込みサイズ
treep | ハフマン符号テーブル、カレントポインタ退避用
srcTmp | 読み込み途中のデータの退避用
destTmp | 書き込み途中のデータ退避用
treeSize | ハフマン符号テーブルサイズの退避用
srcTmpCnt | 読み込み途中のデータサイズ退避用
destTmpCnt | 書き込み途中のデータサイズ退避用
bitSize | 符号化ビットサイズ
tree | ハフマン符号テーブルの読み込み用バッファ

## 参照

`MI_InitUncompContextHuffman, MI_ReadUncompHuffman, MIUncompContextLZ,MIUncompContextRL
`

## 履歴

2004/11/30 初版