Improve indexofbytes speed

~10% faster wew
removes range check when checking successive bytes
This commit is contained in:
Kurt
2017-07-10 23:35:59 -07:00
parent 6c82b815d1
commit a1ea88a2bc

View File

@@ -170,16 +170,20 @@ public static char[] Reverse(char[] charArray)
public static int IndexOfBytes(byte[] array, byte[] pattern, int startIndex, int count)
{
int len = pattern.Length;
int endIndex = count > 0 ? startIndex + count + 1 : array.Length - pattern.Length;
for (int i = startIndex; i < endIndex; i++)
int endIndex = count > 0 ? startIndex + count : array.Length - pattern.Length;
int i = startIndex;
int j = 0;
while (true)
{
for (int j = 0; j < len; j++)
if (pattern[j] != array[i + j])
goto next_i;
return i;
next_i:;
if (pattern[j] != array[i + j])
{
if (++i == endIndex)
return -1;
j = 0;
}
else if (++j == len)
return i;
}
return -1;
}
// Misc