----------------------------------------------------------------------------
-output_mask 128 64 32 16 8 4 2 1
- +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
-buf | 32 | c1 | c2 | len | off | c3 | c4 | c5 | c6 | c7 |
- +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
- cpos /
- /
+output_mask 128 64 32 16 8 4 2 1
+ +----+----+----+----+----+----+----+----+----+----+----+----+----+
+buf | 40 | c1 | c2 |len | off | c4 |len | off | c6 | c7 | c8 |
+ +----+----+----+----+----+----+----+----+----+----+----+----+----+
+ cpos /
+ /
output_pos
+ buf[cpos] = 32 + 8
----------------------------------------------------------------------------
¤·¤Æ¤â¥Ð¥Ã¥Õ¥¡¤ò¤Á¤ç¤Ã¤È¤À¤±ÌµÂ̤ˤ·¤Æ¤¤¤ë¤À¤±¤Ê¤Î¤ÇÂ礷¤¿¤³¤È¤Ï¤Ê¤¤¤Î
¤À¤í¤¦)
+# ¤É¤¦¤ä¤é¥Ð¥°¤Ç¤Ï¤Ê¤¤¤é¤·¤¤¡£3 * CHAR_BIT ¤È¤¤¤¦¤Î¤Ï¡¢1¥Ö¥í¥Ã¥¯¤¬
+# CHAR_BIT ¤Î¥¹¥í¥Ã¥È(8 ¤Ä¤Î¥¹¥í¥Ã¥È)¤ò»ý¤Á¡¢1 ¥Ö¥í¥Ã¥¯¤¬¤¹¤Ù¤Æ
+# <len,off> (3 bytes)¤Î¾ì¹ç¡¢ºÇÂç 3 bytes * 8 ¤È¤Ê¤ë¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë¤è
+# ¤¦¤À¡£
+# CHAR_BIT ¤Ï¡¢buf[cpos] ¤Î¥Ó¥Ã¥È¿ô¤òɽ¤·¤Æ¤¤¤ë¡£
+#
+# ¼ÂºÝ¤Î¤È¤³¤í1¥Ö¥í¥Ã¥¯¤Ï¡¢buf[cpos]¤Î1 byte¤¬ÀèƬ¤ËɬÍפʤΤǺÇÂ祵¥¤¥º¤Ï
+# 3 * CHAR_BIT + 1
+# ¤È¤Ê¤ë¡£¤½¤¦¤¤¤¦°ÕÌ£¤Ç¤Ï¡¢
+# if (output_pos > bufsiz - (3 * CHAR_BIT + 1)) {
+# ¤ÎÊý¤¬¤ï¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë»×¤¦¡£
+
output_pos = 0 ¤È¤·¤Æ¤¤¤ë¤³¤È¤«¤é¤³¤Î»þÅÀ¤Î buf ¤ÎÃæ¿È¤¬¤¹¤Ù¤Æ
send_block() ¤Ç°µ½Ì¤µ¤ì¥Õ¥¡¥¤¥ë¤Ë½ÐÎϤµ¤ì¤ë¤À¤í¤¦¤³¤È¤¬ÁÛÁü¤Ç¤¤ë¡£
¤¹¤Ù¤Æ¤ò¥Æ¡¼¥Ö¥ë»²¾È¤Ç decode ¤¹¤ë¤³¤È¤Ï¤Ç¤¤Ê¤¤¡£¤½¤³¤Ç¡¢Â¤ê¤Ê¤¤Éôʬ
¤Ï¸å¤Î½èÍý¤ÇÌÚ¤òºî¤ë¤³¤È¤ÇÊä¤Ã¤Æ¤¤¤ë¤è¤¦¤À¡£
+bit ¿ô¤ò¸º¤é¤¹Íýͳ¤ò¹Í¤¨¤Æ¤ß¤ë¡£É½°ú¤¤Î¹Í¤¨Êý¤Ï¡¢
+
+ /\ a: 0
+ a /\ b: 10
+ b c c: 11
+
+¤È¤¤¤¦ Huffman ÌڤˤĤ¤¤Æ¡¢
+
+ 00: c_table[00] = a
+ 01: c_table[01] = a
+ 10: c_table[10] = b
+ 11: c_table[11] = c
+
+¤È¤¤¤¦¥Æ¡¼¥Ö¥ë¤òºîÀ®¤¹¤ë¤³¤È¤Ç Huffman Éä¹æ²½¤·¤¿¥Ó¥Ã¥ÈÎ󤫤éÉü¹æ¸ì¤ò
+ÆÀ¤ë¡£
+
+HuffmanÉä¹æ¤«¤éʸ»ú¤òÆÀ¤ëɬÍפ¬¤¢¤ë¤Î¤Ç¡¢c_table[]¤Î¥¤¥ó¥Ç¥Ã¥¯¥¹¤Ë¤Ï¡¢
+HuffmanÉä¹æ¤¬¼è¤ê¤¦¤ëºÇÂçÃͤò»ØÄê¤Ç¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£16bit ¤ÎHuffman
+Éä¹æ¤ÎºÇÂçÃÍ¤Ï 65535 ¤Ç¤¢¤ë¤«¤é
+
+ unsigned short c_table[65535+1]; (unsigned short > NC-1)
+
+¤È¤Ê¤ë¡£¤ª¤½¤é¤¯É½¤Î bit ¿ô¤ò¸º¤é¤·¤Æ¤¤¤ë¤Î¤Ï¤³¤ÎÂ礤ʥơ¼¥Ö¥ë¤òºî¤ê¤¿
+¤¯¤Ê¤¤¤«¤é¤Ç¤Ï¤Ê¤¤¤«¤È»×¤ï¤ì¤ë¡£c_table[] ¤ÎÍ×ÁÇ¿ô¤òºÇÄã¸ÂɬÍפʿô¤ËÍÞ
+¤¨¤è¤¦¤È¤¹¤ë¤È°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¤¬¡¢
+
+ 0: c_table[ 0=0] = a
+ 10: c_table[10=2] = b
+ 11: c_table[11=3] = c
+
+¤³¤ÎÎã¤Î¾ì¹ç¡¢c_table[1] ¤¬¶õ¤Ç¤¢¤ë¤è¤¦¤Ê¥Æ¡¼¥Ö¥ë¤òºîÀ®¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê
+¤¤¡£¥Ï¥Ã¥·¥åɽ¤òºî¤ì¤Ð²Äǽ¤À¤¬¤½¤¦¤Ï¤»¤º¡¢c_table[] ¤ÎÍ×ÁÇ¿ô¤ò¸º¤é¤·¡¢
+ɽ°ú¤¤Çɽ¤»¤Ê¤¤Éôʬ¤ÏÌÚ¤ÇÊä¤Ã¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤À¡£
+
+¼ÂºÝ¤Î c_table[] ¤ÎÄêµÁ¤Ï¡¢
+
+ unsigned short c_table[4095+1];
+
+¤È¤Ê¤Ã¤Æ¤ª¤ê¡¢12 ¥Ó¥Ã¥È(2^12=4096)¤ÎHuffmanÉä¹æ¤Ë¤Ä¤¤¤Æɽ°ú¤¤¬²Äǽ¤È¤Ê¤Ã
+¤Æ¤¤¤ë¡£¤½¤·¤Æ¡¢Ê£¹ç¸ì¤Ï¡¢0...NC ¤ÎÈϰϤǤ¢¤ë¤«¤é¡¢
+ c_table[¥Ó¥Ã¥ÈÎó] < NC
+¤Î¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤Þɽ°ú¤¤Ç
+ c_table[¥Ó¥Ã¥ÈÎó] >= NC
+¤Î¾ì¹ç¤Ï¡¢ÌڤΥ롼¥È¥Î¡¼¥É¤ò¼¨¤·¡¢¤½¤ÎÃͤ«¤éÌÚ¤òé¤Ã¤ÆÉü¹æ¤Ç¤¤ë¤è¤¦¤Ë
+¤Ê¤Ã¤Æ¤¤¤ë¡£¿Þ¼¨¤¹¤ë¤È
+
+ /\
+ a /\ ... ³¬ÁØ:1
+ b ... ³¬ÁØ:2
+ :
+ /\
+ x x ... ³¬ÁØ:12
+
+¤³¤ì¤è¤ê¡¢²¼¤Î³¬ÁؤΠHuffman ÌڤˤĤ¤¤Æ left[], right[] ¤Çɽ¤·¤Æ¤¤¤ë¤è
+¤¦¤À¡£¤Ê¤ª¡¢³¬Áؤ¬¿¼¤¤ Huffman ÌڤȤϡ¢bit Ť¬Ä¹¤¤Éä¹æ¤Ç¤¢¤ê¡¢bit Ť¬
+Ť¤¤È¤¤¤¦¤³¤È¤Ï½Ð¸½ÉÑÅÙ¤¬Ä㤤¤Ï¤º¤Ç¤¢¤ë¤«¤é¡¢left[], right[] ¤ÇÌÚ¤òé
+¤ë²ó¿ô¤Ï¾¯¤Ê¤¤¤Ï¤º¤Ç¤¢¤ë¡£¤³¤ì¤ÏÍý¤Ë¤«¤Ê¤Ã¤Æ¤¤¤ë¡£
+
¤Á¤ç¤Ã¤Èµ¤Ê¬Åª¤Ë¥Î¤é¤Ê¤¤¤Î¤Ç¤Ï¤·¤ç¤ë¤¬¡¢¸å¤Î (E), (F) ¤ÏÌÚ¤òƱ»þ¤Ëºî¤Ã
¤Æ¤¤¤ë¤³¤È¤ò½ü¤±¤Ð¡¢maketree.c:make_code() ¤Î¸åȾÉôʬ¤ÈƱ¤¸¤À¤È¹Í¤¨¤Æ
¤¤¤¤¤À¤í¤¦¡£