crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianUtils/Utilities/CRC32Checksum.cs
changeset 0 818e61de6cd1
equal deleted inserted replaced
-1:000000000000 0:818e61de6cd1
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 * 
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 using System;
       
    18 using System.Collections.Generic;
       
    19 using System.Text;
       
    20 
       
    21 namespace SymbianUtils.Utilities
       
    22 {
       
    23     public class CRC32Checksum
       
    24     {
       
    25         #region Constructors
       
    26         public CRC32Checksum()
       
    27             : this( 0 )
       
    28 		{
       
    29         }
       
    30 
       
    31         public CRC32Checksum( uint aValue )
       
    32         {
       
    33             iCRC = aValue;
       
    34         }
       
    35         #endregion
       
    36 
       
    37         #region API
       
    38         public void Reset()
       
    39 		{
       
    40 			iCRC = 0;
       
    41 		}
       
    42 
       
    43         public void Checksum( byte aByte )
       
    44         {
       
    45             iCRC = ( iCRC >> 8 ) ^ KCCIT_CRC_Table[ ( iCRC ^ aByte ) & 0xff ];
       
    46         }
       
    47 
       
    48         public void Checksum( byte[] aBuffer )
       
    49         {
       
    50             Checksum( aBuffer, 0, aBuffer.Length );
       
    51         }
       
    52 
       
    53         public void Checksum( byte[] aBuffer, int aOffset, int aCount )
       
    54         {
       
    55             for ( int i = aOffset; i < aOffset + aCount; i++ )
       
    56 			{
       
    57                 iCRC = ( iCRC >> 8 ) ^ KCCIT_CRC_Table[ ( iCRC ^ aBuffer[ i ] ) & 0xff ];
       
    58 			}
       
    59 		}
       
    60         #endregion
       
    61 
       
    62         #region Properties
       
    63         public uint Value
       
    64         {
       
    65             get { return iCRC; }
       
    66         }
       
    67 
       
    68         public byte[] ValueArray
       
    69         {
       
    70             get
       
    71             {
       
    72                 byte[] result = new byte[ 4 ];
       
    73                 //
       
    74                 result[ 0 ] = (byte) ( ( iCRC >> 24 ) & 0xFF );
       
    75                 result[ 1 ] = (byte) ( ( iCRC >> 16 ) & 0xFF );
       
    76                 result[ 2 ] = (byte) ( ( iCRC >> 8 ) & 0xFF );
       
    77                 result[ 3 ] = (byte) ( ( iCRC >> 0 ) & 0xFF );
       
    78                 //
       
    79                 return result;
       
    80             }
       
    81         }
       
    82         #endregion
       
    83 
       
    84         #region Internal lookup table
       
    85         private readonly static uint[] KCCIT_CRC_Table = new uint[]
       
    86 			{
       
    87 			0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
       
    88 			0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
       
    89 			0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
       
    90 			0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
       
    91 			0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
       
    92 			0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
       
    93 			0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
       
    94 			0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
       
    95 			0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
       
    96 			0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
       
    97 			0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
       
    98 			0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
       
    99 			0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
       
   100 			0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
       
   101 			0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
       
   102 			0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
       
   103 			0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
       
   104 			0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
       
   105 			0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
       
   106 			0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
       
   107 			0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
       
   108 			0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
       
   109 			0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
       
   110 			0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
       
   111 			0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
       
   112 			0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
       
   113 			0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
       
   114 			0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
       
   115 			0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
       
   116 			0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
       
   117 			0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
       
   118 			0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
       
   119 			0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
       
   120 			0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
       
   121 			0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
       
   122 			0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
       
   123 			0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
       
   124 			0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
       
   125 			0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
       
   126 			0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
       
   127 			0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
       
   128 			0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
       
   129 			0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
       
   130 			0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
       
   131 			0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
       
   132 			0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
       
   133 			0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
       
   134 			0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
       
   135 			0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
       
   136 			0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
       
   137 			0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
       
   138 			0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
       
   139 			0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
       
   140 			0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
       
   141 			0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
       
   142 			0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
       
   143 			0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
       
   144 			0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
       
   145 			0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
       
   146 			0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
       
   147 			0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
       
   148 			0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
       
   149 			0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
       
   150 			0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
       
   151 			};
       
   152 		#endregion
       
   153 
       
   154         #region Data members
       
   155         private uint iCRC = 0;
       
   156         #endregion
       
   157     }
       
   158 }