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
}
}