while others dislike them being extra commits, let's clean them up once and for all for the existing code. If it's ugly, let it only be ugly once :-) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5507 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Common/CRC.cpp
 | 
						|
 | 
						|
#include "StdAfx.h"
 | 
						|
 | 
						|
#include "CRC.h"
 | 
						|
 | 
						|
static const UInt32 kCRCPoly = 0xEDB88320;
 | 
						|
 | 
						|
UInt32 CCRC::Table[256];
 | 
						|
 | 
						|
void CCRC::InitTable()
 | 
						|
{
 | 
						|
  for (UInt32 i = 0; i < 256; i++)
 | 
						|
  {
 | 
						|
    UInt32 r = i;
 | 
						|
    for (int j = 0; j < 8; j++)
 | 
						|
      if (r & 1)
 | 
						|
        r = (r >> 1) ^ kCRCPoly;
 | 
						|
      else
 | 
						|
        r >>= 1;
 | 
						|
    CCRC::Table[i] = r;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class CCRCTableInit
 | 
						|
{
 | 
						|
public:
 | 
						|
  CCRCTableInit() { CCRC::InitTable(); }
 | 
						|
} g_CRCTableInit;
 | 
						|
 | 
						|
void CCRC::UpdateByte(Byte b)
 | 
						|
{
 | 
						|
  _value = Table[((Byte)(_value)) ^ b] ^ (_value >> 8);
 | 
						|
}
 | 
						|
 | 
						|
void CCRC::UpdateUInt16(UInt16 v)
 | 
						|
{
 | 
						|
  UpdateByte(Byte(v));
 | 
						|
  UpdateByte(Byte(v >> 8));
 | 
						|
}
 | 
						|
 | 
						|
void CCRC::UpdateUInt32(UInt32 v)
 | 
						|
{
 | 
						|
  for (int i = 0; i < 4; i++)
 | 
						|
    UpdateByte((Byte)(v >> (8 * i)));
 | 
						|
}
 | 
						|
 | 
						|
void CCRC::UpdateUInt64(UInt64 v)
 | 
						|
{
 | 
						|
  for (int i = 0; i < 8; i++)
 | 
						|
    UpdateByte((Byte)(v >> (8 * i)));
 | 
						|
}
 | 
						|
 | 
						|
void CCRC::Update(const void *data, size_t size)
 | 
						|
{
 | 
						|
  UInt32 v = _value;
 | 
						|
  const Byte *p = (const Byte *)data;
 | 
						|
  for (; size > 0 ; size--, p++)
 | 
						|
    v = Table[((Byte)(v)) ^ *p] ^ (v >> 8);
 | 
						|
  _value = v;
 | 
						|
}
 |