using System;
using System.Collections;
using System.Collections.Generic;
namespace QiHe.CodeLib
{
///
/// The Algorithm object is used to perform the calculating tasks.
///
public class Algorithm
{
public static byte[] ArraySection(byte[] data, int index, int count)
{
byte[] section = new byte[count];
Array.Copy(data, index, section, 0, count);
return section;
}
///
/// Compares two arrays
///
/// The Array
/// The Array
///
public static bool ArrayEqual(byte[] bytes, byte[] data)
{
if (bytes.Length == data.Length)
{
return ArrayEqual(bytes, data, bytes.Length);
}
else
{
return false;
}
}
///
/// Compares two arrays
///
/// The Array
/// The Array
/// The count.
///
public static bool ArrayEqual(byte[] a, byte[] b, int count)
{
for (int i = 0; i < count; i++)
{
if (a[i] != b[i])
{
return false;
}
}
return true;
}
///
/// Sets the indice on an array
///
/// The length.
///
public static int[] ArrayIndice(int length)
{
int[] indice = new int[length];
for (int i = 0; i < length; i++)
{
indice[i] = i;
}
return indice;
}
///
/// Looks for the maximum length of the ArrayList
///
/// list of lists
/// the maximum length
public static int Maximum(ArrayList list)
{
int max = 0;
foreach (ICollection sublist in list)
{
if (max < sublist.Count)
{
max = sublist.Count;
}
}
return max;
}
///
/// Sums the specified list.
///
/// The list.
///
public static int Sum(IList list)
{
int sum = 0;
foreach (int n in list)
{
sum += n;
}
return sum;
}
///
/// Copies the array.
///
/// The SRC.
/// The dest.
/// The start.
public static void CopyArray(byte[] src, byte[] dest, int start)
{
int j = 0;
for (int i = start; i < start + dest.Length; i++)
{
dest[j++] = src[i];
}
}
///
/// Maximums the specified list.
///
/// The list.
///
public static int Maximum(IEnumerable list)
{
int max = int.MinValue;
foreach (int num in list)
{
if (max < num)
{
max = num;
}
}
return max;
}
///
/// Minimums the specified list.
///
/// The list.
///
public static int Minimum(IEnumerable list)
{
int min = int.MaxValue;
foreach (int num in list)
{
if (min > num)
{
min = num;
}
}
return min;
}
///
/// Minimums the specified list.
///
/// The list.
///
public static uint Minimum(IEnumerable list)
{
uint min = uint.MaxValue;
foreach (uint num in list)
{
if (min > num)
{
min = num;
}
}
return min;
}
///
/// Return the postion of the maximum in the list.
///
/// The list.
///
public static int PosofMaximum(IList list)
{
int index = 0;
int max = list[0];
for (int i = 1; i < list.Count; i++)
{
if (list[i] > max)
{
max = list[i];
index = i;
}
}
return index;
}
///
/// Return the postion of the Minimum in the list.
///
/// The list.
///
public static int PosofMinimum(IList list)
{
int index = 0;
int min = list[0];
for (int i = 1; i < list.Count; i++)
{
if (list[i] < min)
{
min = list[i];
index = i;
}
}
return index;
}
///
/// Return the postion of the Minimum in the list.
///
/// The list.
///
public static int PosofMinimum(int[] list)
{
int index = 0;
int min = list[0];
for (int i = 1; i < list.Length; i++)
{
if (list[i] < min)
{
min = list[i];
index = i;
}
}
return index;
}
///
/// Return the postion of the Maximum in the list.
///
/// The list.
///
public static List PosofMaximums(IList list)
{
int max = int.MinValue;
List maxIndice = new List();
for (int index = 0; index < list.Count; index++)
{
int num = list[index];
if (num > max)
{
max = num;
maxIndice.Clear();
}
if (num == max)
{
maxIndice.Add(index);
}
}
return maxIndice;
}
///
/// Return the postion of the Minimum in the list.
///
/// The list.
///
public static List PosofMinimums(IList list)
{
int min = int.MaxValue;
List minIndice = new List();
for (int index = 0; index < list.Count; index++)
{
int num = list[index];
if (num < min)
{
min = num;
minIndice.Clear();
}
if (num == min)
{
minIndice.Add(index);
}
}
return minIndice;
}
///
/// Flats the specified groups.
///
///
/// The groups.
///
public static List Flat(List> groups)
{
List items = new List();
foreach (List group in groups)
{
items.AddRange(group);
}
return items;
}
}
}