Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 105

Автор Π”ΠΆΡƒΠ»ΠΈΠ°Π½ Π‘Π°ΠΊΠ½Π΅Π»Π»

ΠœΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ описали ΡΡƒΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π—ΠΈΠ²Π° ΠΈ ЛСмпСля (ЛСмпСля-Π—ΠΈΠ²Π°), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² настоящСС врСмя ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ LZ77.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ кодирования Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹Ρ… символов ΠΈ ΠΏΠ°Ρ€ расстояниС/Π΄Π»ΠΈΠ½Π°

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ сказано ΠΎ нСбольшом нюансС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°: ΠΊΠ°ΠΊ Π² процСссС считывания сТатых Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ символ ΠΎΡ‚ ΠΊΠΎΠ΄Π° расстояниС/Π΄Π»ΠΈΠ½Π°? Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Π½Π΅ сущСствуСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ различия ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ символом ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π±Π°ΠΉΡ‚ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояниС/Π΄Π»ΠΈΠ½Π°. Одно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ Π±ΠΈΡ‚Π° Ρ„Π»Π°Π³Π° ΠΏΠ΅Ρ€Π΅Π΄ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ символом ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ расстояниС/Π΄Π»ΠΈΠ½Π°. Если Π±ΠΈΡ‚ Ρ„Π»Π°Π³Π° являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ считываСмый ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ символом. Если Ρ„Π»Π°Π³ являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ считываСмый ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ°Ρ€ΠΎΠΉ расстояниС/Π΄Π»ΠΈΠ½Π°. Однако ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ нСобходимости Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… Π±ΠΈΡ‚ΠΎΠ², сводя Π½Π° Π½Π΅Ρ‚ прСимущСство использования ΠΎΠ΄Π½ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π°ΠΉΡ‚ΠΎΠ².

ΠžΠ±Ρ‰ΠΈΠΉ способ избавлСния ΠΎΡ‚ этого нСдостатка состоит Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Ρ„Π»Π°Π³Π°, состоящСго ΠΈΠ· восьми Π±ΠΈΡ‚ΠΎΠ², ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ…, Ρ‡Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ восСмь ΠΊΠΎΠ΄ΠΎΠ². ΠŸΡ€ΠΈ этом ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΠΈΡ‚ опрСдСляСт, Ρ‡Π΅ΠΌ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π±Π°ΠΉΡ‚ΠΎΠΌ Ρ„Π»Π°Π³Π°, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±ΠΈΡ‚ - Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ для 8 Π±ΠΈΡ‚ΠΎΠ² ΠΈ ΠΊΠΎΠ΄ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π±Π°ΠΉΡ‚ Ρ„Π»Π°Π³Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту схСму, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ (ΠΈ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ) сТатый ΠΏΠΎΡ‚ΠΎΠΊ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ².

Аналогичная схСма использовалась Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ EXPAND.EXE ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft, которая ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»Π°ΡΡŒ Π² составС M;

DOS ΠΈ Windows 3.1 (Π² соврСмСнных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft вмСсто Π½Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ CAB-Ρ„Π°ΠΉΠ»Ρ‹). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ помнят, Ρ‡Ρ‚ΠΎ часто Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° дискСтах DOS ΠΈΠΌΠ΅Π»ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ FILENAME *Π•Π₯_, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° EXPAND.EXE Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° ΠΈΡ… Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ послСдний символ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΈ восстановлСнного Ρ„Π°ΠΉΠ»Π°. Π’ вСрсии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° LZ77, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ²ΡˆΠ΅ΠΉΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Microsoft, ΠΊΠΎΠ΄Ρ‹ ΠΏΠ°Ρ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояниС/Π΄Π»ΠΈΠ½Π° всСгда ΠΈΠΌΠ΅Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ€Π°Π²Π½Ρ‹ΠΉ 2 Π±Π°ΠΉΡ‚Π°ΠΌ. ΠŸΡ€ΠΈ этом 12 Π±ΠΈΡ‚ использовались для указания значСния расстояния (Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² этой вСрсии использовалась цикличСская ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ², ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ расстояния прСдставляло собой Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ смСщСния ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ), Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ 4 Π±ΠΈΡ‚Π° слуТили для опрСдСлСния значСния Π΄Π»ΠΈΠ½Ρ‹.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ознакомились с Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ, ΠΏΠΎΡ€Π° ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ряд ΠΏΡ€Π°Π²ΠΈΠ». ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ΠΏΠ°Ρ€Ρ‹ расстояниС/Π΄Π»ΠΈΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ всСгда Ρ€Π°Π²Π΅Π½ 2 Π±Π°ΠΉΡ‚Π°ΠΌ - Π΄Π»ΠΈΠ½Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слова - ΠΏΡ€ΠΈΡ‡Π΅ΠΌ ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ 13 Π±ΠΈΡ‚ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для указания значСния расстояния, Π° 3 ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Π±ΠΈΡ‚Π° - для опрСдСлСния значСния Π΄Π»ΠΈΠ½Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для указания значСния расстояния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 13 Π±ΠΈΡ‚, тСорСтичСски ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ расстояния ΠΎΡ‚ 0 Π΄ΠΎ 8191 Π±Π°ΠΉΡ‚Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° составит 8 Кб. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ расстояния ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ€Π°Π²Π½ΠΎΠ΅ 0 (Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС соотвСтствиС ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, эти 13 Π±ΠΈΡ‚ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ значСния ΠΎΡ‚ 1 Π΄ΠΎ 8192, Π° Π½Π΅ ΠΎΡ‚ 0 Π΄ΠΎ 8191, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π·Π° счСт простого добавлСния Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹. ВСорСтичСски, трСмя Π±ΠΈΡ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ 0 Π΄ΠΎ 7. Однако вспомним, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояниС/Π΄Π»ΠΈΠ½Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ строки, состоящиС ΠΈΠ· Ρ‚Ρ€Π΅Ρ… ΠΈ Π±ΠΎΠ»Π΅Π΅ символов. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π° счСт простого добавлСния 3 цСлСсообразно ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 3 Π±ΠΈΡ‚Π° ΠΊΠ°ΠΊ значСния Π΄Π»ΠΈΠ½Ρ‹ ΠΎΡ‚ 3 Π΄ΠΎ 10 Π±Π°ΠΉΡ‚ΠΎΠ².

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ расстояния ΠΈ Π΄Π»ΠΈΠ½Ρ‹ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ слова, Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

Code := ((Distance-1) shl 3) + (Length-3);

А для восстановлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояния ΠΈ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Length := (Code and $7) +3;

Distance := (Code shr 3)+ 1;

ВосстановлСниС с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° LZ77

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ сТатия Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ восстановлСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ концСпция ΠΏΡ€ΠΎΡ‰Π΅ для Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ процСссС восстановлСния ΠΌΡ‹ считываСм Π±Π°ΠΉΡ‚ Ρ„Π»Π°Π³Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ для опрСдСлСния способа считывания ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… восьми ΠΊΠΎΠ΄ΠΎΠ². Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±ΠΈΡ‚ Π² Π±Π°ΠΉΡ‚Π΅ Ρ„Π»Π°Π³Π° являСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ, ΠΌΡ‹ считываСм ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° 1 Π±Π°ΠΉΡ‚ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ символ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ записан нСпосрСдствСнно Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. И Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Ссли Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±ΠΈΡ‚ являСтся Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΌ, ΠΌΡ‹ считываСм ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° 2 Π±Π°ΠΉΡ‚Π° ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅ΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° значСния расстояния ΠΈ Π΄Π»ΠΈΠ½Ρ‹. Π—Π°Ρ‚Π΅ΠΌ эти значСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ Ρ€Π°Π½Π΅Π΅ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ записан Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ.

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ символа ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Ρ‚Ρ€Π΅Ρ… Π΄ΠΎ 10 символов, ΠΈΡ… Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, Π½ΠΎ ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Π΅Ρ† Π±ΡƒΡ„Π΅Ρ€Π° ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΡΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ расстояниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π» 8192 Π±Π°ΠΉΡ‚ΠΎΠ². ЕстСствСнно, Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π±ΡƒΡ„Π΅Ρ€ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ символа ΠΈΠ»ΠΈ строки символов - это Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ Π±Ρ‹ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ цикличСская ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ - ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ индСксами. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π° этапС сТатия Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ (ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΌΡ‹ вскорС рассмотрим), цСлСсообразно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ класса, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠ±ΠΎΠΈΡ… процСссах.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ описанию ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² восстановлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для этого класса, я Ρ…ΠΎΡ‡Ρƒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСбольшой ΠΏΡ€ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Deflate ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ FKZIP. Π•Ρ‰Π΅ Ρ€Π°Π· взглянитС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСдлоТСния, сТатиС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Ρ€Π°Π½Π΅Π΅. На ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этапов описания Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ситуация:

-------+

a cat is | a cat is a cat

-------+^

ΠΈ ΠΌΡ‹ вычислили ΠΏΠ°Ρ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояниС/Π΄Π»ΠΈΠ½Π° <9,9>. Однако ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ…ΠΈΡ‚Ρ€ΠΎΡΡ‚ΡŒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Ρ‚ΡŒ сопоставлСниС Π½Π° 9 символах? Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС символов, выйдя Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΈ продолТая сопоставлСниС с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ символом ΠΈ с символами, располоТСнными справа ΠΎΡ‚ Π½Π΅Π³ΠΎ. ЀактичСски, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соотвСтствиС 14 символов, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΡ€ΠΈ этом ΠΊΠΎΠ΄ <9,14>, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ расстояния. ВсС это Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ достаточно Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ, Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом происходит Π²ΠΎ врСмя дСкодирования? Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ дСкодирования ΠΊΠΎΠ΄Π° <9,14> ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

--------+

a cat is I

--------+ ^

ΠœΡ‹ возвращаСмся Π² ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅ΠΌ ΠΎΠΊΠ½Π΅ Π½Π° 9 символов Π½Π°Π·Π°Π΄ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ символы, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут 14-ΠΉ символ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ символы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

ПослС копирования дСвяти символов ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ

--------+

a cat is I a cat is

--------+ ^________^

__________ΠΎΡ‚______Π΄ΠΎ

Π³Π΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈ Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… пяти символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· возникновСния ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ расстояния (хотя приходится ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для копирования Π΄Π°Π½Π½Ρ‹Ρ… нСльзя Π±Ρ‹Π»ΠΎ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ Move).

Π’ΠΎ врСмя восстановлСния ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ класс ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ опрСдСляСт, Ρ‡Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±ΡƒΡ„Π΅Ρ€Π΅ трСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ, Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΎΠ½ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π±ΡƒΡ„Π΅Ρ€Π΅. Для выполнСния восстановлСния Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° основных ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ³ΠΎ символа ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹ расстояниС/Π΄Π»ΠΈΠ½Π°. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эти дСйствия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ классом ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ±ΠΎΠΈΡ… случаях. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, класс - Π»ΡƒΡ‡ΡˆΠΈΠΉ Π°Π³Π΅Π½Ρ‚ выполнСния прСобразования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ расстояния ΠΈ Π΄Π»ΠΈΠ½Ρ‹. Код Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса класса, слуТСбных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² листингС 11.23.

Листинг 11.23. Код, связанный с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ, класса ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°


type

TtdLZSlidingWindow = class private

FBuffer : PAnsiChar;{цикличСский Π±ΡƒΡ„Π΅Ρ€}

FBufferEnd : PAnsiChar;{конСчная Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΡ„Π΅Ρ€Π°}

FCompressing : boolean;{true=ΡΠΆΠ°Ρ‚ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…}

FCurrent : PAnsiChar;{Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ символ}

FLookAheadEnd : PAnsiChar;{ΠΊΠΎΠ½Π΅Ρ† ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ просмотра}

FMidPoint : PAnsiChar;{срСдняя Ρ‚ΠΎΡ‡ΠΊΠ° Π±ΡƒΡ„Π΅Ρ€Π°}

FName : TtdNameString;{имя ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°}

FStart : PAnsiChar;{Π½Π°Ρ‡Π°Π»ΠΎ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π³ΠΎ ΠΎΠΊΠ½Π°}

FStartOffset : longint;{смСщСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° для FStart}

FStream : TStream;{Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ}

protected


procedure swAdvanceAfterAdd(aCount : integer);

procedure swReadFromStream;

procedure swSetCapacity(aValue : longint);

procedure swWriteToStream(aFinalBlock : boolean);

public


constructor Create(aStream : TStream;

aCompressing : boolean);

destructor Destroy; override;

{ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΊ Π²ΠΎ врСмя сТатия, Ρ‚Π°ΠΊ ΠΈ Π²ΠΎ врСмя восстановлСния}

procedure Clear;

{ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π²ΠΎ врСмя сТатия}