// /*************************************************************************** // Aaru Data Preservation Suite // ---------------------------------------------------------------------------- // // Filename : ArrayFill.cs // Author(s) : Natalia Portillo // // Component : Helpers. // // --[ Description ] ---------------------------------------------------------- // // Fills an array with a specified value. // // --[ License ] -------------------------------------------------------------- // // No license specified by creator. // // Published on https://github.com/mykohsu/Extensions/blob/master/ArrayExtensions.cs // // Assuming open source. // // ---------------------------------------------------------------------------- // Copyright © 2011-2024 Natalia Portillo // Copyright(C) 2014 mykohsu // ****************************************************************************/ using System; using System.Text; namespace Aaru.Helpers; public static partial class ArrayHelpers { /// Fills an array with the specified value /// Array /// Value /// Array type public static void ArrayFill(T[] destinationArray, T value) => ArrayFill(destinationArray, [value]); /// Fills an array with the contents of the specified array /// Array /// Value /// Array type public static void ArrayFill(T[] destinationArray, T[] value) { ArgumentNullException.ThrowIfNull(destinationArray); if(value.Length > destinationArray.Length) throw new ArgumentException(Localization.Length_of_value_array_must_not_be_more_than_length_of_destination); // set the initial array value Array.Copy(value, destinationArray, value.Length); int arrayToFillHalfLength = destinationArray.Length / 2; int copyLength; for(copyLength = value.Length; copyLength < arrayToFillHalfLength; copyLength <<= 1) Array.Copy(destinationArray, 0, destinationArray, copyLength, copyLength); Array.Copy(destinationArray, 0, destinationArray, copyLength, destinationArray.Length - copyLength); } /// Converts a byte array to its hexadecimal representation /// Byte array /// true to use uppercase /// public static string ByteArrayToHex(byte[] array, bool upper = false) { var sb = new StringBuilder(); for(long i = 0; i < array.LongLength; i++) sb.Append($"{array[i]:x2}"); return upper ? sb.ToString().ToUpper() : sb.ToString(); } }