public override int GetHashCode()
{
if (_changed)
{
_changed = false;
_hash = 0;
int i;
int size = Size & ~3;
for (i = 0; i < size; i += 4)
{
_hash ^= (int)Buffer[i]
| ((int)Buffer[i + 1] << 8)
| ((int)Buffer[i + 2] << 16)
| ((int)Buffer[i + 3] << 24);
}
if ((Size & 3) != 0)
{
int remnant = 0;
int shift = 0;
for (; i < Size; ++i)
{
remnant |= ((int)Buffer[i]) << shift;
shift += 8;
}
_hash ^= remnant;
}
}
return _hash;
}