Files
BinaryObjectScanner/BinaryObjectScanner.Utilities/Extensions.cs

185 lines
4.8 KiB
C#
Raw Normal View History

using System;
using System.Collections;
2022-12-15 00:13:24 -08:00
using System.Collections.Concurrent;
2023-03-07 12:04:48 -05:00
namespace BinaryObjectScanner.Utilities
{
2022-12-15 00:13:24 -08:00
public static class Extensions
{
2022-12-15 00:13:24 -08:00
#region ConcurrentQueue
2023-03-13 16:17:21 -04:00
/// <summary>
/// Add a range of values from one queue to another
/// </summary>
/// <param name="original">Queue to add data to</param>
/// <param name="values">Array to get data from</param>
public static void AddRange(this ConcurrentQueue<string> original, string[] values)
{
if (values == null || values.Length == 0)
return;
for (int i = 0; i < values.Length; i++)
{
original.Enqueue(values[i]);
}
}
2022-12-15 00:13:24 -08:00
/// <summary>
/// Add a range of values from one queue to another
/// </summary>
/// <param name="original">Queue to add data to</param>
/// <param name="values">Queue to get data from</param>
public static void AddRange(this ConcurrentQueue<string> original, ConcurrentQueue<string> values)
{
while (!values.IsEmpty)
{
if (!values.TryDequeue(out string value))
return;
original.Enqueue(value);
}
}
#endregion
#region BitArray
/// <summary>
/// Convert a bit array into a byte
/// </summary>
public static byte AsByte(this BitArray array)
{
byte value = 0;
int maxValue = Math.Min(8, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (byte)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into an sbyte
/// </summary>
public static sbyte AsSByte(this BitArray array)
{
sbyte value = 0;
2022-12-17 22:01:00 -08:00
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;
}
/// <summary>
/// Convert a bit array into a short
/// </summary>
public static short AsInt16(this BitArray array)
{
short value = 0;
int maxValue = Math.Min(16, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (short)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into a ushort
/// </summary>
public static ushort AsUInt16(this BitArray array)
{
ushort value = 0;
int maxValue = Math.Min(16, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (ushort)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into an int
/// </summary>
public static int AsInt32(this BitArray array)
{
int value = 0;
int maxValue = Math.Min(32, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (int)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into a uint
/// </summary>
public static uint AsUInt32(this BitArray array)
{
uint value = 0;
int maxValue = Math.Min(32, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (uint)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into a long
/// </summary>
public static long AsInt64(this BitArray array)
{
long value = 0;
int maxValue = Math.Min(64, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (long)(array[i] ? 1 : 0);
}
return value;
}
/// <summary>
/// Convert a bit array into a ulong
/// </summary>
public static ulong AsUInt64(this BitArray array)
{
ulong value = 0;
int maxValue = Math.Min(64, array.Length);
2022-12-17 22:01:00 -08:00
for (int i = maxValue - 1; i >= 0; i--)
{
value <<= 1;
value |= (ulong)(array[i] ? 1 : 0);
}
return value;
}
#endregion
}
}