The Labs \ Source Viewer \ SSCLI \ System.IO.Compression \ CompressionTracingSwitchLevel

  1. //------------------------------------------------------------------------------
  2. // <copyright file="DecodeHelper.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.IO.Compression
  16. {
  17.     using System;
  18.     using System.Diagnostics;
  19.    
  20.     // This class contains functions to do bit conversion and CRC calculation.
  21.    
  22.     static internal class DecodeHelper
  23.     {
  24.        
  25.         // Table for CRC calculation
  26.         static readonly uint[] crcTable = new uint[256] {0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, 249268274u, 2044508324u,
  27.         3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, 498536548u, 1789927666u, 4089016648u, 2227061214u,
  28.         450548861u, 1843258603u, 4107580753u, 2211677639u, 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u,
  29.         4195302755u, 2366115317u, 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u,
  30.         901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, 651767980u, 1373503546u,
  31.         3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, 671266974u, 1594198024u, 3322730930u, 2970347812u,
  32.         795835527u, 1483230225u, 3244367275u, 3060149565u, 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u,
  33.         2680153253u, 3904427059u, 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u,
  34.         1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, 1706088902u, 314042704u,
  35.         2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, 1303535960u, 984961486u, 2747007092u, 3569037538u,
  36.         1256170817u, 1037604311u, 2765210733u, 3554079995u, 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u,
  37.         2852801631u, 3708648649u, 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u,
  38.         1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, 3988292384u, 2596254646u,
  39.         62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, 3814918930u, 2489596804u, 225274430u, 2053790376u,
  40.         3826175755u, 2466906013u, 167816743u, 2097651377u, 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u,
  41.         426522225u, 1852507879u, 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u,
  42.         3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, 3624741850u, 2936675148u,
  43.         906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, 3412177804u, 3160834842u, 628085408u, 1382605366u,
  44.         3423369109u, 3138078467u, 570562233u, 1426400815u, 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u,
  45.         752459403u, 1541320221u, 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u,
  46.         2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, 2262029012u, 4057260610u,
  47.         1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, 2282248934u, 4279200368u, 1711684554u, 285281116u,
  48.         2405801727u, 4167216745u, 1634467795u, 376229701u, 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u,
  49.         1231636301u, 1047427035u, 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u,
  50.         3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, 3009837614u, 3294710456u,
  51.         1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u};
  52.        
  53.         // Calculate CRC based on the old CRC and the new bytes
  54.         // See RFC1952 for details.
  55.         public static uint UpdateCrc32(uint crc32, byte[] buffer, int offset, int length)
  56.         {
  57.             Debug.Assert((buffer != null) && (offset >= 0) && (length >= 0) && (offset <= buffer.Length - length), "check the caller");
  58.            
  59.             crc32 ^= 4294967295u;
  60.            
  61.             while (--length >= 0) {
  62.                 crc32 = crcTable[(crc32 ^ buffer[offset++]) & 255] ^ (crc32 >> 8);
  63.             }
  64.            
  65.             crc32 ^= 4294967295u;
  66.             return crc32;
  67.         }
  68.        
  69.         // Reverse 'length' of the bits in code
  70.         public static uint BitReverse(uint code, int length)
  71.         {
  72.             uint new_code = 0;
  73.            
  74.             Debug.Assert(length > 0 && length <= 16, "Invalid len");
  75.             do {
  76.                 new_code |= (code & 1);
  77.                 new_code <<= 1;
  78.                 code >>= 1;
  79.             }
  80.             while (--length > 0);
  81.            
  82.             return new_code >> 1;
  83.         }
  84.        
  85.     }
  86.    
  87.    
  88.     internal enum CompressionTracingSwitchLevel
  89.     {
  90.         Off = 0,
  91.         Informational = 1,
  92.         Verbose = 2
  93.     }
  94.    
  95.     internal class CompressionTracingSwitch : Switch
  96.     {
  97.         static internal CompressionTracingSwitch tracingSwitch = new CompressionTracingSwitch("CompressionSwitch", "Compression Library Tracing Switch");
  98.        
  99.         internal CompressionTracingSwitch(string displayName, string description) : base(displayName, description)
  100.         {
  101.         }
  102.        
  103.         public static bool Verbose {
  104.             get { return tracingSwitch.SwitchSetting >= (int)CompressionTracingSwitchLevel.Verbose; }
  105.         }
  106.        
  107.         public static bool Informational {
  108.             get { return tracingSwitch.SwitchSetting >= (int)CompressionTracingSwitchLevel.Informational; }
  109.         }
  110.     }
  111. }

Developer Fusion