using System; using System.Collections; using System.Collections.Concurrent; namespace BinaryObjectScanner.Utilities { public static class Extensions { #region ConcurrentQueue /// /// Add a range of values from one queue to another /// /// Queue to add data to /// Array to get data from public static void AddRange(this ConcurrentQueue original, string[] values) { if (values == null || values.Length == 0) return; for (int i = 0; i < values.Length; i++) { original.Enqueue(values[i]); } } /// /// Add a range of values from one queue to another /// /// Queue to add data to /// Queue to get data from public static void AddRange(this ConcurrentQueue original, ConcurrentQueue values) { while (!values.IsEmpty) { if (!values.TryDequeue(out string value)) return; original.Enqueue(value); } } #endregion #region BitArray /// /// Convert a bit array into a byte /// public static byte AsByte(this BitArray array) { byte value = 0; int maxValue = Math.Min(8, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (byte)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into an sbyte /// public static sbyte AsSByte(this BitArray array) { sbyte value = 0; int maxValue = Math.Min(val1: 8, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (sbyte)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into a short /// public static short AsInt16(this BitArray array) { short value = 0; int maxValue = Math.Min(16, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (short)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into a ushort /// public static ushort AsUInt16(this BitArray array) { ushort value = 0; int maxValue = Math.Min(16, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (ushort)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into an int /// public static int AsInt32(this BitArray array) { int value = 0; int maxValue = Math.Min(32, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (int)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into a uint /// public static uint AsUInt32(this BitArray array) { uint value = 0; int maxValue = Math.Min(32, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (uint)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into a long /// public static long AsInt64(this BitArray array) { long value = 0; int maxValue = Math.Min(64, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (long)(array[i] ? 1 : 0); } return value; } /// /// Convert a bit array into a ulong /// public static ulong AsUInt64(this BitArray array) { ulong value = 0; int maxValue = Math.Min(64, array.Length); for (int i = maxValue - 1; i >= 0; i--) { value <<= 1; value |= (ulong)(array[i] ? 1 : 0); } return value; } #endregion } }