diff --git a/SabreTools.Hashing/Checksum/BitOperations.cs b/SabreTools.Hashing/Checksum/BitOperations.cs
index 2a76b5d..a372d13 100644
--- a/SabreTools.Hashing/Checksum/BitOperations.cs
+++ b/SabreTools.Hashing/Checksum/BitOperations.cs
@@ -2,22 +2,6 @@ namespace SabreTools.Hashing.Checksum
{
internal static class BitOperations
{
- ///
- /// Reverse the endianness of a value
- ///
- public static ulong ReverseBits(ulong value, int bitWidth)
- {
- ulong reverse = 0;
- for (int i = 0; i < bitWidth; i++)
- {
- reverse <<= 1;
- reverse |= value & 1;
- value >>= 1;
- }
-
- return reverse;
- }
-
///
/// Clamp a value to a certain bit width and convert to a byte array
///
diff --git a/SabreTools.Hashing/Checksum/Crc.cs b/SabreTools.Hashing/Checksum/Crc.cs
index 262eb58..2029d59 100644
--- a/SabreTools.Hashing/Checksum/Crc.cs
+++ b/SabreTools.Hashing/Checksum/Crc.cs
@@ -1,4 +1,5 @@
using System;
+using static SabreTools.Hashing.HashOperations;
namespace SabreTools.Hashing.Checksum
{
@@ -27,7 +28,7 @@ namespace SabreTools.Hashing.Checksum
Def = def;
_table = new CrcTable(def);
- _hash = def.ReflectIn ? BitOperations.ReverseBits(def.Init, def.Width) : def.Init;
+ _hash = def.ReflectIn ? ReverseBits(def.Init, def.Width) : def.Init;
}
///
@@ -57,7 +58,7 @@ namespace SabreTools.Hashing.Checksum
// Handle mutual reflection
if (Def.ReflectIn ^ Def.ReflectOut)
- localHash = BitOperations.ReverseBits(localHash, Def.Width);
+ localHash = ReverseBits(localHash, Def.Width);
// Handle XOR
localHash ^= Def.XorOut;
diff --git a/SabreTools.Hashing/Checksum/CrcTable.cs b/SabreTools.Hashing/Checksum/CrcTable.cs
index 4f80d6c..d7393f7 100644
--- a/SabreTools.Hashing/Checksum/CrcTable.cs
+++ b/SabreTools.Hashing/Checksum/CrcTable.cs
@@ -1,3 +1,5 @@
+using static SabreTools.Hashing.HashOperations;
+
namespace SabreTools.Hashing.Checksum
{
internal class CrcTable
@@ -55,7 +57,7 @@ namespace SabreTools.Hashing.Checksum
// Get the starting value for this index
ulong point = i;
if (!_processBitwise && def.ReflectIn)
- point = BitOperations.ReverseBits(point, _processBits);
+ point = ReverseBits(point, _processBits);
// Shift to account for storage
point <<= _definition.Width - _processBits;
@@ -71,7 +73,7 @@ namespace SabreTools.Hashing.Checksum
// Reflect if necessary
if (def.ReflectIn)
- point = BitOperations.ReverseBits(point, def.Width);
+ point = ReverseBits(point, def.Width);
// Shift back to account for storage
point &= ulong.MaxValue >> (64 - def.Width);
diff --git a/SabreTools.Hashing/HashOperations.cs b/SabreTools.Hashing/HashOperations.cs
index 3d7fdc5..74e8974 100644
--- a/SabreTools.Hashing/HashOperations.cs
+++ b/SabreTools.Hashing/HashOperations.cs
@@ -62,6 +62,26 @@ namespace SabreTools.Hashing
#endregion
+ #region Reverse
+
+ ///
+ /// Reverse the endianness of a value
+ ///
+ public static ulong ReverseBits(ulong value, int bitWidth)
+ {
+ ulong reverse = 0;
+ for (int i = 0; i < bitWidth; i++)
+ {
+ reverse <<= 1;
+ reverse |= value & 1;
+ value >>= 1;
+ }
+
+ return reverse;
+ }
+
+ #endregion
+
#region Rotate
///