toolsandutils/e32tools/host/h_mem.cpp
changeset 0 83f4b4db085c
child 1 d4b442d23379
equal deleted inserted replaced
-1:000000000000 0:83f4b4db085c
       
     1 // Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #include <stdlib.h>   
       
    17 #include <malloc.h>
       
    18 #include <stdio.h>
       
    19 #include <string.h>
       
    20 
       
    21 #include "h_utl.h"
       
    22 
       
    23 TAny *HMem::Alloc(TAny * const aBaseAddress,const TUint32 aImageSize)
       
    24 	{
       
    25 	if (aBaseAddress != 0)
       
    26 		{
       
    27 		Print(EError, "Allocating at a specified address is not supported on this system.\n");
       
    28 		return 0;
       
    29 		}
       
    30 
       
    31 	TAny *address = malloc(aImageSize);
       
    32 	return (address);
       
    33 	}
       
    34 
       
    35 void HMem::Free(TAny * const aMem)
       
    36 	{
       
    37 	free(aMem);
       
    38 	}
       
    39 
       
    40 void HMem::Copy(TAny * const aDestAddr,const TAny * const aSourceAddr,const TUint32 aLength)
       
    41 	{
       
    42 	memcpy(aDestAddr,aSourceAddr,(size_t)aLength);
       
    43 	}
       
    44 
       
    45 void HMem::Move(TAny * const aDestAddr,const TAny * const aSourceAddr,const TUint32 aLength)
       
    46 	{
       
    47 	memmove(aDestAddr,aSourceAddr,(size_t)aLength);
       
    48 	}
       
    49 
       
    50 void HMem::Set(TAny * const aDestAddr, const TUint8 aFillChar, const TUint32 aLength)
       
    51 	{		
       
    52 	memset(aDestAddr, aFillChar, aLength);
       
    53 	}
       
    54 
       
    55 void HMem::FillZ(TAny * const aDestAddr, const TUint32 aLength)
       
    56 	{		
       
    57 	memset(aDestAddr, 0, aLength);
       
    58 	}
       
    59 
       
    60 TUint HMem::CheckSum(TUint *aPtr, TInt aSize)
       
    61 	{
       
    62 	TUint sum=0;
       
    63 	aSize/=4;
       
    64 	while (aSize-->0)
       
    65 		sum+=*aPtr++;
       
    66 	return sum;
       
    67 	}
       
    68 
       
    69 TUint HMem::CheckSum8(TUint8 *aPtr, TInt aSize)
       
    70 	{
       
    71 	TUint sum=0;
       
    72 	while (aSize-->0)
       
    73 		sum+=*aPtr++;
       
    74 	return sum;
       
    75 	}
       
    76 
       
    77 TUint HMem::CheckSumOdd8(TUint8 *aPtr, TInt aSize)
       
    78 	{
       
    79 	return CheckSumEven8(aPtr+2, aSize-2);
       
    80 	}
       
    81 
       
    82 TUint HMem::CheckSumEven8(TUint8 *aPtr, TInt aSize)
       
    83 	{
       
    84 	TUint sum=0;
       
    85 	while (aSize>0)
       
    86 		{
       
    87 		sum+=(TUint)aPtr[0]+aPtr[1];
       
    88 		aPtr+=4;
       
    89 		aSize-=4;
       
    90 		}
       
    91 	return sum;
       
    92 	}
       
    93 
       
    94 static const TUint32 CrcTab32[256] =
       
    95 	{
       
    96 	0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
       
    97 	0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
       
    98 	0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
       
    99 	0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
       
   100 	0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
       
   101 	0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
       
   102 	0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
       
   103 	0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
       
   104 	0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
       
   105 	0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
       
   106 	0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
       
   107 	0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
       
   108 	0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
       
   109 	0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
       
   110 	0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
       
   111 	0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
       
   112 	0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
       
   113 	0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
       
   114 	0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
       
   115 	0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
       
   116 	0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
       
   117 	0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
       
   118 	0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
       
   119 	0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
       
   120 	0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
       
   121 	0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
       
   122 	0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
       
   123 	0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
       
   124 	0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
       
   125 	0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
       
   126 	0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
       
   127 	0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
       
   128 	0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
       
   129 	0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
       
   130 	0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
       
   131 	0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
       
   132 	0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
       
   133 	0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
       
   134 	0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
       
   135 	0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
       
   136 	0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
       
   137 	0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
       
   138 	0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
       
   139 	0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
       
   140 	0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
       
   141 	0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
       
   142 	0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
       
   143 	0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
       
   144 	0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
       
   145 	0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
       
   146 	0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
       
   147 	0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
       
   148 	0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
       
   149 	0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
       
   150 	0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
       
   151 	0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
       
   152 	0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
       
   153 	0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
       
   154 	0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
       
   155 	0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
       
   156 	0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
       
   157 	0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
       
   158 	0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
       
   159 	0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d
       
   160 	};
       
   161 
       
   162 /**
       
   163 Performs a CCITT CRC-32 checksum on the specified data.
       
   164 
       
   165 On return from this function, the referenced 32 bit integer contains the CRC
       
   166 value.
       
   167 
       
   168 @param aCrc		A reference to a 32 bit integer to contain the CRC value. 
       
   169 @param aPtr		A pointer to the start of the data to be checksummed. 
       
   170 @param aLength	The length of the data to be checksummed.
       
   171 */
       
   172 void HMem::Crc32(TUint32& aCrc, const TAny* aPtr, TInt aLength)
       
   173 	{
       
   174 	const TUint8* p = (const TUint8*)aPtr;
       
   175 	const TUint8* q = p + aLength;
       
   176 	TUint32 crc = aCrc;
       
   177 	while (p < q)
       
   178 		crc = (crc >> 8) ^ CrcTab32[(crc ^ *p++) & 0xff];
       
   179 	aCrc = crc;
       
   180 	}