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