Beispiel #1
0
 /// <summary>
 /// Скопировать из другого массива бит
 /// </summary>
 /// <param name="mba">Массив бит</param>
 public MyBitArray(MyBitArray mba)
 {
     this.length = mba.Length;
     this.array = new bool[length];
     for (int i = 0; i < array.Length; i++)
         array[i] = mba[i];
 }
Beispiel #2
0
 /// <summary>
 /// Сравнить массив бит с другим массивом бит
 /// </summary>
 /// <param name="mba">Массив бит</param>
 /// <returns>True если одинаковы, иначе False</returns>
 public bool Equals(MyBitArray mba)
 {
     if (this.Length != mba.Length) return false;
     for (int i = 0; i < this.Length; i++)
         if (this[i] != mba[i])
             return false;
     return true;
 }
Beispiel #3
0
 /// <summary>
 /// Циклический сдвиг вправо на <paramref name="count"/> позиций
 /// </summary>
 /// <param name="mba">Массив бит</param>
 /// <param name="count">Количество позиций</param>
 /// <returns>Циклически сдвинутый вправо массив бит</returns>
 public static MyBitArray operator >>(MyBitArray mba, int count)
 {
     for (int i = 0; i < count; i++)
     {
         MyBitArray nmba = new MyBitArray(mba.Length);
         Copy(mba, 0, ref nmba, 1, mba.Length - 1);
         nmba[0] = mba[mba.Length-1];
         mba = nmba;
     }
     return mba;
 }
Beispiel #4
0
 /// <summary>
 /// Копирование из массива бит <paramref name="Source"/> с позиции <paramref name="SourceIndex"/> в массив бит <paramref name="Destination"/> с позиции <paramref name="DestinationIndex"/> <paramref name="Count"/> элементов
 /// </summary>
 /// <param name="Source">Источник</param>
 /// <param name="SourceIndex">Индекс в источнике</param>
 /// <param name="Destination">Назначение</param>
 /// <param name="DestinationIndex">Индекс в назначении</param>
 /// <param name="Count">Количество</param>
 public static void Copy(MyBitArray Source, int SourceIndex, ref MyBitArray Destination, int DestinationIndex, int Count)
 {
     try
     {
         if (Destination.Length - DestinationIndex < Count)
             throw new Exception("Выбранный фрагмент массива не умещается в заданный фрагмент массива.");
         if (Source.Length - SourceIndex < Count)
             throw new Exception("Выбранный фрагмент массива меньше указанной длины копирования.");
         for (int i = SourceIndex; i < Source.Length; i++)
             if (Count != 0)
             {
                 Destination[DestinationIndex + i - SourceIndex] = Source[i];
                 Count--;
             }
             else
                 break;
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message + " @MyBitArrayCopy");
     }
 }
Beispiel #5
0
 /// <summary>
 /// Циклический сдвиг вправо на <paramref name="count"/> позиций
 /// </summary>
 /// <param name="arr">Массив бит</param>
 /// <param name="count">Количество позиций</param>
 /// <returns>Циклически сдвинутый вправо массив бит</returns>
 public static MyBitArray cicleShiftRight(MyBitArray arr, int count)//>>
 {
     for (int c = 0; c < count; c++)
     {
         bool temp = arr[arr.Length - 1];
         for (int i = arr.Length - 1; i > 0; i--)
         {
             arr[i] = arr[i - 1];
         }
         arr[0] = temp;
     }
     return arr;
 }
Beispiel #6
0
 /// <summary>
 /// Циклический сдвиг влево на <paramref name="count"/> позиций
 /// </summary>
 /// <param name="arr">Массив бит</param>
 /// <param name="count">Количество позиций</param>
 /// <returns>Циклически сдвинутый влево массив бит</returns>
 public static MyBitArray cicleShiftLeft(MyBitArray arr)//<<
 {
     MyBitArray B = new MyBitArray(arr);
     MyBitArray.Copy(arr, 1, ref B, 0, arr.Length - 1);
     B[B.Length - 1] = arr[0];
     return B;
 }
Beispiel #7
0
        /// <summary>
        /// Отрезать с конца <paramref name="Length"/> бит
        /// </summary>
        /// <param name="A">Массив бит</param>
        /// <param name="Length">Количество отрезаемых бит</param>
        /// <returns>Обрезанный массив бит</returns>
        public static MyBitArray TrimEnd(MyBitArray A, int Length)
        {
            try
            {
                if (Length > A.Length)
                    throw new Exception("Длина отреза больше длины самого массива");
                if (Length == 0)
                    return A;

                MyBitArray B = new MyBitArray(A.Length - Length);
                //Console.WriteLine("{0} {1} {2} {3} {4} @TRIMEND", "A" + A.Length, 0, "B" + B.Length,0, A.Length - Length);
                MyBitArray.Copy(A, 0, ref B, 0, A.Length - Length);
                return B;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message + " @MyBitArrayTrimEnd");
                return new MyBitArray(0);
            }
        }
Beispiel #8
0
 /// <summary>
 /// Убрать слева незначащие нули
 /// </summary>
 /// <param name="A">Массив бит</param>
 /// <returns>Массив бит</returns>
 public static MyBitArray TrimStart(MyBitArray A)
 {
     try
     {
         for (int i = 0; i < A.length; i++)
             if (A[i])
                 return TrimStart(A, i);
         return new MyBitArray(0);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message + " @MyBitArrayTrimStart");
         return new MyBitArray(0);
     }
 }
Beispiel #9
0
 /// <summary>
 /// Отрезать с начала <paramref name="Length"/> бит
 /// </summary>
 /// <param name="A">Массив бит</param>
 /// <param name="Length">Количество бит</param>
 /// <returns>Обрезанный массив</returns>
 public static MyBitArray TrimStart(MyBitArray A, int Length)
 {
     try
     {
         if (Length > A.Length)
             throw new Exception("Длина отреза больше длины самого массива");
         if (Length == 0)
             return A;
         MyBitArray r = new MyBitArray(A.Length - Length);
         MyBitArray.Copy(A, Length, ref r, 0, A.Length - Length);
         return r;
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message + " @MyBitArrayTrimStart");
         return new MyBitArray(0);
     }
 }
Beispiel #10
0
 /// <summary>
 /// Дописать справа <paramref name="count"/> нулей
 /// </summary>
 /// <param name="A">Массив бит</param>
 /// <param name="count">Количество нулей</param>
 /// <returns>Дополненный массив бит</returns>
 public static MyBitArray PadRight(MyBitArray A, int count)
 {
     MyBitArray B = new MyBitArray(A.Length + count, false);
     MyBitArray.Copy(A, 0, ref B, 0, A.Length);
     return B;
 }
Beispiel #11
0
 /// <summary>
 /// Преобразовать строку в массив бит
 /// </summary>
 /// <param name="s">Строка</param>
 /// <returns>Массив бит</returns>
 public static MyBitArray FromString(string s)
 {
     MyBitArray mba = new MyBitArray(s.Length);
     for (int i = 0; i < s.Length; i++)
         mba[i] = s[i] == '1' ? true : false;
     return mba;
 }