10[TypeForwardedFrom(
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
44 return MemberwiseClone();
113 if (int32ArrayLengthFromBitLength >
m_array.Length || int32ArrayLengthFromBitLength + 256 <
m_array.Length)
115 Array.Resize(ref
m_array, int32ArrayLengthFromBitLength);
123 m_array[num] &= (1 << remainder) - 1;
125 m_array.AsSpan(num + 1, int32ArrayLengthFromBitLength - num - 1).Clear();
141 : this(
length, defaultValue: false)
159 m_array[^1] = (1 << remainder) - 1;
171 if (
bytes.Length > 268435455)
177 uint num = (uint)
bytes.Length / 4u;
179 for (
int i = 0; i < num; i++)
214 fixed (
bool* ptr =
values)
216 for (; num + 32 <= (uint)
values.Length; num += 32)
228 fixed (
bool* ptr2 =
values)
230 for (; num + 32 <= (uint)
values.Length; num += 32)
238 m_array[num / 32] = ~((num4 << 16) | num3);
246 fixed (
bool* ptr3 =
values)
248 for (; num + 32 <= (uint)
values.Length; num += 32)
274 for (; num < (uint)
values.Length; num++)
279 int num6 =
Div32Rem((
int)num, out remainder);
280 m_array[num6] |= 1 << remainder;
292 if (
values.Length > 67108863)
309 m_array =
new int[int32ArrayLengthFromBitLength];
332 int num = 1 <<
index;
355 span[span.Length - 1] &= (1 << remainder) - 1;
372 int[] array2 =
value.m_array;
374 if (
Length !=
value.Length || (uint)int32ArrayLengthFromBitLength > (uint)
array.Length || (uint)int32ArrayLengthFromBitLength > (uint)array2.Length)
378 switch (int32ArrayLengthFromBitLength)
381 array[6] &= array2[6];
384 array[5] &= array2[5];
387 array[4] &= array2[4];
390 array[3] &= array2[3];
393 array[2] &= array2[2];
396 array[1] &= array2[1];
399 array[0] &= array2[0];
406 fixed (
int* ptr =
array)
408 fixed (
int* ptr2 = array2)
410 for (; num < (uint)(int32ArrayLengthFromBitLength - 7); num += 8)
421 fixed (
int* ptr3 =
array)
423 fixed (
int* ptr4 = array2)
425 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
436 fixed (
int* ptr5 =
array)
438 fixed (
int* ptr6 = array2)
440 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
449 for (; num < (uint)int32ArrayLengthFromBitLength; num++)
451 array[num] &= array2[num];
469 int[] array2 =
value.m_array;
471 if (
Length !=
value.Length || (uint)int32ArrayLengthFromBitLength > (uint)
array.Length || (uint)int32ArrayLengthFromBitLength > (uint)array2.Length)
475 switch (int32ArrayLengthFromBitLength)
478 array[6] |= array2[6];
481 array[5] |= array2[5];
484 array[4] |= array2[4];
487 array[3] |= array2[3];
490 array[2] |= array2[2];
493 array[1] |= array2[1];
496 array[0] |= array2[0];
503 fixed (
int* ptr =
array)
505 fixed (
int* ptr2 = array2)
507 for (; num < (uint)(int32ArrayLengthFromBitLength - 7); num += 8)
518 fixed (
int* ptr3 =
array)
520 fixed (
int* ptr4 = array2)
522 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
533 fixed (
int* ptr5 =
array)
535 fixed (
int* ptr6 = array2)
537 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
546 for (; num < (uint)int32ArrayLengthFromBitLength; num++)
548 array[num] |= array2[num];
566 int[] array2 =
value.m_array;
568 if (
Length !=
value.Length || (uint)int32ArrayLengthFromBitLength > (uint)
array.Length || (uint)int32ArrayLengthFromBitLength > (uint)array2.Length)
572 switch (int32ArrayLengthFromBitLength)
575 array[6] ^= array2[6];
578 array[5] ^= array2[5];
581 array[4] ^= array2[4];
584 array[3] ^= array2[3];
587 array[2] ^= array2[2];
590 array[1] ^= array2[1];
593 array[0] ^= array2[0];
602 fixed (
int* ptr2 =
value.m_array)
604 for (; num < (uint)(int32ArrayLengthFromBitLength - 7); num += 8)
615 fixed (
int* ptr3 =
array)
617 fixed (
int* ptr4 = array2)
619 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
630 fixed (
int* ptr5 =
array)
632 fixed (
int* ptr6 = array2)
634 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
643 for (; num < (uint)int32ArrayLengthFromBitLength; num++)
645 array[num] ^= array2[num];
660 switch (int32ArrayLengthFromBitLength)
663 array[6] = ~array[6];
666 array[5] = ~array[5];
669 array[4] = ~array[4];
672 array[3] = ~array[3];
675 array[2] = ~array[2];
678 array[1] = ~array[1];
681 array[0] = ~array[0];
689 fixed (
int* ptr =
array)
691 for (; num < (uint)(int32ArrayLengthFromBitLength - 7); num += 8)
701 fixed (
int* ptr2 =
array)
703 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
712 fixed (
int* ptr3 =
array)
714 for (; num < (uint)(int32ArrayLengthFromBitLength - 3); num += 4)
721 for (; num < (uint)int32ArrayLengthFromBitLength; num++)
723 array[num] = ~array[num];
754 uint num3 = uint.MaxValue >> 32 - remainder2;
755 m_array[int32ArrayLengthFromBitLength - 1] &= (int)num3;
757 num = int32ArrayLengthFromBitLength - num2;
761 int num4 = int32ArrayLengthFromBitLength - 1;
764 uint num5 = (uint)
m_array[num2] >> remainder;
765 int num6 =
m_array[++num2] << 32 - remainder;
766 m_array[num++] = num6 | (int)num5;
768 uint num7 = uint.MaxValue >> 32 - remainder2;
770 m_array[num++] = (int)(num7 >> remainder);
773 m_array.AsSpan(num, int32ArrayLengthFromBitLength - num).Clear();
800 int num3 = num - num2;
803 int num4 =
m_array[num3] << remainder;
804 uint num5 = (uint)
m_array[--num3] >> 32 - remainder;
805 m_array[num] = num4 | (int)num5;
815 m_array.AsSpan(0, num2).Clear();
834 if (
array is
int[] array2)
844 array2[
index + num] =
m_array[num] & ((1 << remainder) - 1);
847 if (
array is
byte[] array3)
861 int num4 =
Div4Rem(num2, out remainder2);
862 for (
int i = 0; i < num4; i++)
869 destination[remainder2] = (byte)((
m_array[num4] >> remainder2 * 8) & ((1 << (int)num3) - 1));
887 if (
array is
bool[] array4)
903 fixed (
bool* ptr = &array4[
index])
905 for (; num5 + 32 <= (uint)
m_length; num5 += 32)
922 fixed (
bool* ptr2 = &array4[
index])
924 for (; num5 + 32 <= (uint)
m_length; num5 += 32)
926 int value2 =
m_array[num5 / 32];
931 Sse2.
Store((
byte*)(ptr2 + num5), source2);
943 fixed (
bool* ptr3 = &array4[
index])
945 for (; num5 + 32 <= (uint)
m_length; num5 += 32)
947 int value3 =
m_array[num5 / 32];
967 for (; num5 < (uint)
m_length; num5++)
970 int num6 =
Div32Rem((
int)num5, out remainder3);
971 array4[
index + (int)num5] = ((
m_array[num6] >> remainder3) & 1) != 0;
990 return n - 1 + 32 >>> 5;
995 return n - 1 + 4 >>> 2;
1000 return n - 1 + 8 >>> 3;
1003 private static int Div32Rem(
int number, out
int remainder)
1005 uint result = (uint)number / 32u;
1006 remainder = number & 0x1F;
1010 private static int Div4Rem(
int number, out
int remainder)
1012 uint result = (uint)number / 4u;
1013 remainder = number & 3;
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
static readonly bool IsLittleEndian
static void WriteInt32LittleEndian(Span< byte > destination, int value)
static sbyte ReverseEndianness(sbyte value)
static int ReadInt32LittleEndian(ReadOnlySpan< byte > source)
BitArrayEnumeratorSimple(BitArray bitArray)
readonly BitArray _bitArray
InvalidOperationException GetInvalidOperationException(int index)
unsafe BitArray(bool[] values)
static void ThrowArgumentOutOfRangeException(int index)
BitArray(int length, bool defaultValue)
static int GetInt32ArrayLengthFromByteLength(int n)
IEnumerator GetEnumerator()
static int GetInt32ArrayLengthFromBitLength(int n)
unsafe BitArray Or(BitArray value)
unsafe BitArray And(BitArray value)
BitArray LeftShift(int count)
unsafe BitArray Xor(BitArray value)
void Set(int index, bool value)
static int Div4Rem(int number, out int remainder)
BitArray RightShift(int count)
unsafe void CopyTo(Array array, int index)
static int Div32Rem(int number, out int remainder)
static int GetByteArrayLengthFromBitLength(int n)
static Vector64< byte > ZipLow(Vector64< byte > left, Vector64< byte > right)
static new bool IsSupported
static Vector64< byte > ZipHigh(Vector64< byte > left, Vector64< byte > right)
static Vector128< byte > AddPairwise(Vector128< byte > left, Vector128< byte > right)
static Vector64< byte > CompareEqual(Vector64< byte > left, Vector64< byte > right)
static Vector64< byte > Min(Vector64< byte > left, Vector64< byte > right)
static unsafe void Store(byte *address, Vector64< byte > source)
static unsafe Vector128< byte > LoadVector128(byte *address)
static Vector64< byte > And(Vector64< byte > left, Vector64< byte > right)
static Vector64< byte > Not(Vector64< byte > value)
static Vector64< byte > Xor(Vector64< byte > left, Vector64< byte > right)
static Vector64< byte > Or(Vector64< byte > left, Vector64< byte > right)
static new bool IsSupported
static Vector128< byte > Create(byte value)
static unsafe Vector128< byte > CreateScalarUnsafe(byte value)
static Vector128< T > Zero
static Vector256< T > Zero
static Vector256< byte > Create(byte value)
static int MoveMask(Vector256< sbyte > value)
static Vector256< sbyte > And(Vector256< sbyte > left, Vector256< sbyte > right)
static Vector256< sbyte > CompareEqual(Vector256< sbyte > left, Vector256< sbyte > right)
static new bool IsSupported
static Vector256< sbyte > Min(Vector256< sbyte > left, Vector256< sbyte > right)
static Vector256< sbyte > Or(Vector256< sbyte > left, Vector256< sbyte > right)
static Vector256< sbyte > Shuffle(Vector256< sbyte > value, Vector256< sbyte > mask)
static Vector256< sbyte > Xor(Vector256< sbyte > left, Vector256< sbyte > right)
static unsafe Vector256< sbyte > LoadVector256(sbyte *address)
static unsafe void Store(sbyte *address, Vector256< sbyte > source)
static unsafe Vector128< sbyte > LoadVector128(sbyte *address)
static int MoveMask(Vector128< sbyte > value)
static Vector128< byte > Xor(Vector128< byte > left, Vector128< byte > right)
static Vector128< sbyte > CompareEqual(Vector128< sbyte > left, Vector128< sbyte > right)
static unsafe void Store(sbyte *address, Vector128< sbyte > source)
static Vector128< byte > Or(Vector128< byte > left, Vector128< byte > right)
static Vector128< byte > And(Vector128< byte > left, Vector128< byte > right)
static Vector128< byte > Min(Vector128< byte > left, Vector128< byte > right)
static new bool IsSupported
static Vector128< sbyte > Shuffle(Vector128< sbyte > value, Vector128< sbyte > mask)
static new bool IsSupported
static string ArgumentOutOfRange_Index
static string InvalidOperation_EnumNotStarted
static string InvalidOperation_EnumEnded
static string Format(string resourceFormat, object p1)
static string Arg_BitArrayTypeUnsupported
static string InvalidOperation_EnumFailedVersion
static string Arg_ArrayLengthsDiffer
static string Arg_RankMultiDimNotSupported
static string Argument_ArrayTooLarge
static string Argument_InvalidOffLen
static string ArgumentOutOfRange_NeedNonNegNum