OSDN Git Service

*** empty log message ***
authorarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Sun, 12 Jan 2003 23:07:31 +0000 (23:07 +0000)
committerarai <arai@6a8cc165-1e22-0410-a132-eb4e3f353aba>
Sun, 12 Jan 2003 23:07:31 +0000 (23:07 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/lha/lha/trunk@621 6a8cc165-1e22-0410-a132-eb4e3f353aba

Hackinf_of_LHa

index a201b0d..d6ba7b5 100644 (file)
@@ -1850,6 +1850,142 @@ text   |             x'|  |  |  |                    |  |  |x |  |  |  |
 
 ºÙÉô¤Ï̤¤ÀÌܤò¤Ä¤Ö¤Ã¤Æ¤¤¤ë¤Î¤À¤¬¤³¤ì¤Ç match_insert() ¤Î²òÆɤϽª¤ê¤À¡£
 
+match_insert() ¤Î½èÍý¤È¤Ï°Ê²¼¤ÎÄ̤ê¤À¡£
+
+----------------------------------------------------------------------------
+  match_insert() ¤Ï¡¢text[pos] ¤«¤é»Ï¤Þ¤ëʸ»úÎó¤Ë°ìÃפ¹¤ëʸ»úÎó¤ò¼­½ñ
+  ¤«¤é¸¡º÷¤·¡¢¸«¤Ä¤«¤Ã¤¿°ÌÃ֤ȰìÃ׍ò matchpos, matchlen ¤ËÀßÄꤹ¤ë¡£
+
+  ¤â¤·¡¢ºÇĹ°ìÃ×ʸ»úÎ󤬸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð matchpos ¤Ï¡¢off ¤ËÀßÄꤵ¤ì¡¢
+  matchlen ¤Ï¹¹¿·¤µ¤ì¤Ê¤¤¡£
+
+  ¸«¤Ä¤«¤Ã¤¿¾ì¹ç¡¢matchlen ¤Ï¸Æ¤Ó½Ð¤·Á°¤Î matchlen ¤è¤ê¤âÂ礭¤¯¤Ê¤ë¡£
+  (¸Æ¤Ó½Ð¤·Á°¤Ç¤Ï matchlen ¤Î°ÕÌ£¤ÏºÇÄã¸Â°ìÃפ·¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤Ê¸»úÎó
+  Ä¹¤Ç¡¢¾È¹ç¾ò·ï¤Î°ì¤Ä¤Ë¤Ê¤Ã¤Æ¤¤¤ë)
+
+  ¤³¤Î´Ø¿ô¤ÎÆþÎϤÏ
+
+      matchlen
+      pos
+
+  ½ÐÎϤÏ
+
+      matchlen
+      matchpos
+
+  ¤È¤¤¤Ã¤¿¤È¤³¤í¡£
+
+  ¤µ¤é¤Ë¡¢insert() ¤ÈƱÍͤνèÍý¤Ç¡¢pos ¤Î°ÌÃÖ¤ò¥Ï¥Ã¥·¥åÇÛÎó¤Ëµ­Ï¿¤·¡¢
+  ¼¡²ó¤Î¸¡º÷¤ËÈ÷¤¨¤ë¡£¤³¤ì¤Ï¤Ä¤¤¤Ç¤Î½èÍý¡£
+---------------------------------------------------------------------------- 
+
+¤³¤ì¤òƧ¤Þ¤¨¤¿¾å¤Ç½èÍýÆâÍƤòºÆÆɤ·¤è¤¦¡£(E) ¡Á (H) ¤À¡£
+
+        /* (E) */
+        lastmatchlen = matchlen;  lastmatchoffset = pos - matchpos - 1;
+        --matchlen;
+
+        /* (F) */    /* (G) */
+        get_next();  match_insert();
+        if (matchlen > remainder) matchlen = remainder;
+
+        /* (H) */
+        if (matchlen > lastmatchlen || lastmatchlen < THRESHOLD) {
+            /* (H.1) */
+            encode_set.output(text[pos - 1], 0);
+            count++;
+        } else {
+
+(H) ¤Î¾ò·ï¤È¤Ï²¿¤Ê¤Î¤«¤ò¸«¤ë¡£¤³¤Î¾ò·ï¤¬¿¿¤Ê¤é¡¢Ê¸»úÎó¤ò¤½¤Î¤Þ¤Þ½ÐÎϤ¹
+¤ë¤Î¤À¤¬¡¢ÁÇľ¤Ë slide ¼­½ñË¡¤Î½èÍý¤ò¹Í¤¨¤ì¤Ð¤³¤Î¾ò·ï¤Ï¡Ö¼­½ñ¤«¤é¸«¤Ä
+¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡×¤È¤Ê¤ë¡£¤¬¡¢¼ÂºÝ¤Ë¤Ï¤â¤¦¾¯¤·Ê£»¨¤À¡£
+
+        /* (H) */
+        if (matchlen > lastmatchlen || lastmatchlen < THRESHOLD) {
+
+matchlen ¤Ï¡¢pos ¤Î°ÌÃÖ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤¿¼­½ñ¾å¤ÎŤµ
+lastmatchlen ¤Ï¡¢pos-1 ¤Î°ÌÃÖ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤¿¼­½ñ¾å¤ÎŤµ
+
+¤Ç¤¢¤ë¤È¤¹¤ë¤È¡¢¤³¤Î¾ò·ï¤Ï¡¢¡Öpos ¤Î°ÌÃ֤Ǹ«¤Ä¤«¤Ã¤¿Ä¹¤µ¤¬¡¢pos-1 ¤Î°Ì
+Ã֤Ǹ«¤Ä¤«¤Ã¤¿Ä¹¤µ¤è¤ê¤âŤ±¤ì¤Ð¡×¤Ã¤È¤Ê¤ë¡£
+
+¤³¤ì¤Ï¤Ä¤Þ¤ê¡¢pos-1 ¤È pos ¤Î¥Ë²Õ½ê¤Ë´Ø¤·¤Æ¼­½ñ¤ò¸¡º÷¤·¤Æ¡¢¤è¤êŤ¯¥Þ¥Ã
+¥Á¤¹¤ëÊý¤òÁª¤Ü¤¦¤È¤·¤Æ¤¤¤ë¤ï¤±¤À¡£matchlen ¤ÎÊý¤¬Ä¹¤¤¤Ê¤é 1 ¤ÄÁ°
+(pos-1)¤Îʸ»ú¤Ï¤½¤Î¤Þ¤Þ½ÐÎϤ·¡¢¼¡¤Î¥ë¡¼¥×¤Ë°Ü¤ë(¤â¤·¡¢¼¡¤Îʸ»ú¤¬
+¤µ¤é¤ËŤ¯¥Þ¥Ã¥Á¤¹¤ë¤Ê¤é¡£¤Þ¤¿¤½¤Î¤Þ¤Þ½ÐÎϤµ¤ì¤ë)
+
+¤³¤Î¾ò·ï¤Ç¡Ö¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡×¤È¤¤¤¦¤Î¤Ï¤É¤¦É½¤µ¤ì¤Æ¤¤¤ë¤«¤ò¹Í¤¨¤ë¡£
+¤â¤·¡¢pos ¤Îʸ»úÎ󤬼­½ñ¤Ë¤Ê¤±¤ì¤Ð pos - 1 ¤Îʸ»úÎó¤Ï¡¢¤É¤¦¤¹¤Ù¤­¤«¤È
+¤¤¤¦¤È¡Öpos-1 ¤Îʸ»úÎ󤬸«¤Ä¤«¤Ã¤Æ¤Ê¤±¤ì¤Ð¡£¤½¤Î¤Þ¤Þ½ÐÎÏ¡£¼­½ñ¤Ë¤¢¤Ã¤¿
+¤Ê¤é <lastmatchlen, lastmatchoffset> ¤Î¥Ú¥¢¤ò½ÐÎϡפäȤʤé¤Ê¤±¤ì¤Ð¤Ê
+¤é¤Ê¤¤¡£
+
+lastmatchlen ¤Ï¡¢½é´ü¾õÂ֤ǤϠTHRESHOLD - 1 ¤Ç¤¢¤Ã¤¿¤Î¤Ç¡¢¸«¤Ä¤«¤é¤Ê¤«¤Ã
+¤¿¤È¤¤¤¦¾ò·ï¤Ï (H) ¤Î±¦Â¦¤Î¾ò·ï lastmatchlen < THRESHOLD ¤Ç¤Þ¤ºÉ½¤µ¤ì
+¤Æ¤¤¤ë¡£
+
+¤Ç¤Ï¡¢Î㤨¤Ð lastmatchlen ¤¬ 5 ¤Ç¤¢¤Ã¤¿¤È¤·¤è¤¦¡£¤³¤Î¤È¤­ (E) ¤Î½èÍý¤Ç 
+matchlen ¤Ï lastmatchlen - 1 ¤Ä¤Þ¤ê¡¢4 ¤ËÀßÄꤵ¤ì¤ë¡£¤½¤·¤Æ¡¢match_insert()
+¤Ç¼¡¤Îʸ»úÎ󤬤⤷¼­½ñ¤«¤é¸«¤Ä¤«¤é¤Ê¤±¤ì¤Ð matchlen ¤Ï¹¹¿·¤µ¤ì¤Ê¤¤¤Î¤Ç
+  matchlen < lastmatchlen 
+¤È¤Ê¤ë¡£¤³¤Î¤è¤¦¤Ê¾ò·ï(Á°²ó¸«¤Ä¤«¤ê¡¢º£²ó¸«¤Ä¤«¤é¤Ê¤¤)¾ì¹ç¤Ë¸Â¤ê¡¢(H.2)
+¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¡£¤Ç¤Ï¡¢(H.2) ¤Î½èÍý¤òÄɤ¤¤«¤±¤è¤¦¡£
+
+¤Þ¤º¡¢¤³¤Î¾õÂÖ¤ò¿Þ¼¨¤¹¤ë¡£
+
+----------------------------------------------------------------------------
+
+                         lastmatchlen                  lastmatchlen
+                       |--          --|              |--          --|
+       +---------------+--------------+--------------+--------------+--+
+text   |               |  |  |  |  |  |              |  |  |  |  |  |  |
+       +---------------+--------------+--------------+--------------+--+
+                       ^                             |   \           \
+                      matchpos                    pos-1  pos         pos2
+
+                       |--------------------------|
+                             lastmatchoffset
+
+----------------------------------------------------------------------------
+
+
+            /* (H.2) */
+            encode_set.output(lastmatchlen + (UCHAR_MAX + 1 - THRESHOLD),
+               (lastmatchoffset) & (dicsiz-1) );
+            --lastmatchlen;
+
+            while (--lastmatchlen > 0) {
+                get_next();  insert();
+                count++;
+            }
+            get_next();
+            matchlen = THRESHOLD - 1;
+            match_insert();
+            if (matchlen > remainder) matchlen = remainder;
+        }
+
+¤Þ¤º¡¢<Ťµ, °ÌÃÖ> ¤Î¥Ú¥¢¤ò½ÐÎϤ¹¤ë¡£¤³¤ì¤Ï¤¤¤¤¤À¤í¤¦¡£½ÐÎϤ¹¤ë¡Ö°ÌÃÖ¡×
+¤Ï0 ¤Ê¤é 1 Ê¸»úÁ°¤òɽ¤¹¤Î¤Ç¡¢¼ÂºÝ¤Î¥ª¥Õ¥»¥Ã¥È pos - 1 - matchpos ¤è¤ê
+¤â 1 ¾®¤µ¤¤ÃͤˤʤäƤ¤¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤ª¤³¤¦¡£
+
+¤½¤·¤Æ¡¢lastmatchlen ¤Ï 1 °ú¤«¤ì¤ë¡£¤³¤Î¾ì¹çÎ㤨¤Ð 4 ¤Ë¤Ê¤ë¡£¤·¤¿¤¬¤Ã
+¤Æ¡¢¼¡¤Î¥ë¡¼¥×¤Ç¤Ï 3 Ê¸»ú pos ¤¬ÀèÁ÷¤ê¤µ¤ì¤ë(4 ¤Ç¤Ï¤Ê¤¤)¡£pos ¤Ï´û¤Ë 1 
+ʸ»úÀè¤Ë¿Ê¤ó¤Ç¤¤¤ë¤Î¤Ç¡¢ºÇ½é¤Ë 1 °ú¤¯¤Î¤Ï¤³¤Î¤³¤È¤ò¹Íθ¤·¤Æ¤¤¤ë¡£while 
+¥ë¡¼¥×¤¬½ª¤Ã¤¿¸å¤Ïpos ¤Î°ÌÃ֤ϼºݤ˽ÐÎϤ·¤¿Ê¸»úÎó¤ÎºÇ¸å¤Îʸ»ú pos2-1 
+¤ò»Ø¤·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ë¡£
+
+¤½¤·¤Æ¡¢get_next() ¤Ç¤Þ¤¿ 1 Ê¸»úÀè¤ËÁ÷¤ë¡£pos ¤Ï¿Þ¤Î pos2 ¤Î°ÌÃ֤ˤʤ롣
+¤½¤·¤Æ¡¢match_insert() ¤Ç¡¢¤³¤Î°ÌÃÖ¤Îʸ»úÎó¤ò¾È¹ç¤¹¤ë¡£matchlen ¤Ï¡¢
+THRESHOLD - 1 ¤Ë½é´ü²½¤µ¤ì¤ë¤Î¤Ç pos2 ¤Î°ÌÃÖ¤Îʸ»úÎ󤬼­½ñ¤«¤é¸«¤Ä¤«¤é
+¤Ê¤±¤ì¤Ð matchlen ¤Ï¡¢THRESHOLD-1 ¤À¡£¤³¤ì¤Ï½é´ü¾õÂÖ¤ÈƱ¤¸¾õÂÖ¤ò¼¨¤¹¤Î
+¤Ç¡¢¼¡¤Î¥ë¡¼¥×¤Î½èÍý¤âÁÛÁü¤¬¤Ä¤¯((H) ¤Î¾ò·ï¤Î±¦Â¦ lastmatchlen < THRESHOLD
+¤¬Í­¸ú¤Ë¤Ê¤ë)¡£¤Ç¤Ï¡¢¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ï¤È¤¤¤¦¤È¡¢¼¡¤Î¥ë¡¼¥×¤Ç¤µ¤é¤ËÀè 
+pos2+1 ¤Î¾È¹ç·ë²Ì¤ÈÈæ³Ó¤µ¤ì¤ë¤Î¤Ç¤³¤Î½èÍý¤âÁÛÁü¤¬¤Ä¤¯¡£
+
+ºÇ½é¡¢¤É¤¦¤Ë¤â¤³¤Î½èÍýÆâÍƤ¬Íý²ò¤Ç¤­¤Ê¤«¤Ã¤¿¤Î¤À¤¬¡Ö¸½ºß¤Îʸ»úÎó¤È¡¢¼¡
+¤Îʸ»úÎó¤Î¤½¤ì¤¾¤ì¤Ç¼­½ñ¤ò¸¡º÷¤·¡¢¤è¤êŤ¯¸«¤Ä¤«¤Ã¤¿Êý¤ò»È¤¦¡×¤È¤¤¤¦ºÇ
+Ŭ²½¤ò¹Ô¤Ã¤Æ¤¤¤ë»ö¤¬¤ï¤«¤Ã¤Æ¤·¤Þ¤Ã¤¿¸å¤Ï²òÆɤϴÊñ¤À¤Ã¤¿¡£(¼Â¤Ï¤³¤Î»ö
+¼Â¤â¶µ¤¨¤Æ¤â¤é¤Ã¤¿»ö¤À¡£Á´Á³¥À¥á¤¸¤ã¤ó)
 
 # Local Variables:
 # mode : indented-text