Skip to content

Commit 1af187b

Browse files
committed
partial hash
support hashing part of an array
1 parent a77ead9 commit 1af187b

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

MurmurHash/Managed/Murmur128ManagedX64.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,15 @@ protected override void HashCore(byte[] array, int ibStart, int cbSize)
4646

4747
// only compute the hash if we have data to hash
4848
if (cbSize > 0)
49-
Body(array, cbSize);
49+
Body(array, ibStart, cbSize);
5050
}
5151

5252
[MethodImpl(MethodImplOptions.AggressiveInlining)]
53-
private void Body(byte[] data, int length)
53+
private void Body(byte[] data, int start, int length)
5454
{
55-
int remaining = length & 15;
56-
int alignedLength = length - remaining;
57-
for (int i = 0; i < alignedLength; i += 16)
55+
int remainder = length & 15;
56+
int alignedLength = start + (length - remainder);
57+
for (int i = start; i < alignedLength; i += 16)
5858
{
5959
ulong k1 = BitConverter.ToUInt64(data, i);
6060
ulong k2 = BitConverter.ToUInt64(data, i + 8);
@@ -66,8 +66,8 @@ private void Body(byte[] data, int length)
6666
H2 = (H2.RotateLeft(31) + H1) * 5 + 0x38495ab5;
6767
}
6868

69-
if (remaining > 0)
70-
Tail(data, alignedLength, remaining);
69+
if (remainder > 0)
70+
Tail(data, alignedLength, remainder);
7171
}
7272

7373
[MethodImpl(MethodImplOptions.AggressiveInlining)]

MurmurHash/Managed/Murmur128ManagedX86.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -49,15 +49,15 @@ protected override void HashCore(byte[] array, int ibStart, int cbSize)
4949

5050
// only compute the hash if we have data to hash
5151
if (cbSize > 0)
52-
Body(array, cbSize);
52+
Body(array, ibStart, cbSize);
5353
}
5454

5555
[MethodImpl(MethodImplOptions.AggressiveInlining)]
56-
private void Body(byte[] data, int length)
56+
private void Body(byte[] data, int start, int length)
5757
{
58-
int remaining = length & 15;
59-
int alignedLength = length - remaining;
60-
for (int i = 0; i < alignedLength; i += 16)
58+
int remainder = length & 15;
59+
int alignedLength = start + (length - remainder);
60+
for (int i = start; i < alignedLength; i += 16)
6161
{
6262
uint k1 = BitConverter.ToUInt32(data, i),
6363
k2 = BitConverter.ToUInt32(data, i + 4),
@@ -77,8 +77,8 @@ private void Body(byte[] data, int length)
7777
H4 = (H4.RotateLeft(13) + H1) * 5 + 0x32ac3b17;
7878
}
7979

80-
if (remaining > 0)
81-
Tail(data, alignedLength, remaining);
80+
if (remainder > 0)
81+
Tail(data, alignedLength, remainder);
8282
}
8383

8484
[MethodImpl(MethodImplOptions.AggressiveInlining)]

0 commit comments

Comments
 (0)