| 5 | |
| 6 | namespace NNetliba { |
| 7 | ui32 CalcChecksum(const void* p, int size) { |
| 8 | //return 0; |
| 9 | //return CalcCrc32(p, size); |
| 10 | i64 sum = 0; |
| 11 | const unsigned char *pp = (const unsigned char*)p, *pend = pp + size; |
| 12 | for (const unsigned char* pend4 = pend - 3; pp < pend4; pp += 4) |
| 13 | sum += *(const ui32*)pp; |
| 14 | |
| 15 | ui32 left = 0, pos = 0; |
| 16 | for (; pp < pend; ++pp) { |
| 17 | pos += ((ui32)*pp) << left; |
| 18 | left += 8; |
| 19 | } |
| 20 | |
| 21 | sum += pos; |
| 22 | sum = (sum & 0xffffffff) + (sum >> 32); |
| 23 | sum += sum >> 32; |
| 24 | return (ui32)~sum; |
| 25 | } |
| 26 | |
| 27 | ui32 CalcChecksum(const TBlockChain& chain) { |
| 28 | TIncrementalChecksumCalcer ics; |
no test coverage detected