From 1b06751c68a41d8d8b52075a7ecfe662286f321d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Sat, 9 Nov 2024 22:06:46 -0500 Subject: [PATCH] Move helper to main utility class --- SabreTools.Hashing/Checksum/BitOperations.cs | 16 ---------------- SabreTools.Hashing/Checksum/Crc.cs | 5 +++-- SabreTools.Hashing/Checksum/CrcTable.cs | 6 ++++-- SabreTools.Hashing/HashOperations.cs | 20 ++++++++++++++++++++ 4 files changed, 27 insertions(+), 20 deletions(-) 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 ///