35 writes to _bits
System.Runtime.Numerics (35)
System\Numerics\BigInteger.cs (35)
77_bits = null; 89_bits = null; 94_bits = [value]; 105_bits = null; 127_bits = [(nuint)x]; 131_bits = x <= uint.MaxValue ? [((uint)x)] : [(uint)x, (uint)(x >> BitsPerUInt32)]; 144_bits = null; 151_bits = [(nuint)value]; 155_bits = value <= uint.MaxValue ? [((uint)value)] : [(uint)value, (uint)(value >> BitsPerUInt32)]; 174_bits = null; 231_bits = new nuint[cu + 1]; 241_bits = new nuint[cu + 2]; 281_bits = null; 289_bits = new nuint[nuintSize]; 302_bits = new nuint[size]; 320_bits = null; 371_bits = null; 395_bits = null; 399_bits = [(uint)_sign]; 491_bits = null; 500_bits = val.AsSpan(0, len).ToArray(); 505_bits = val; 511_bits = val; 530_bits = bits; 561_bits = null; 571_bits = value.ToArray(); 641_bits = null; 648_bits = trimLen == 1 ? [magnitude] : value[..trimLen].ToArray(); 654_bits = [magnitude]; 661_bits = [value[0]]; 666_bits = null; 686_bits = value.ToArray(); 706_bits = null; 710_bits = new nuint[bits32.Length]; 716_bits = new nuint[nuintLen];
373 references to _bits
System.Runtime.Numerics (373)
System\Number.BigInteger.cs (3)
833if (value._bits == null) 871int base1E9BufferLength = (int)(value._bits.Length * digitRatio) + 1; 875BigIntegerToBase1E9(value._bits, base1E9Buffer, out int written);
System\Numerics\BigInteger.cs (370)
46/// <see cref="_sign"/> and <see cref="_bits"/> is <see langword="null"/>. 47/// For all other values, <see cref="_sign"/> is +1 or -1 and the magnitude is in <see cref="_bits"/>. 232_bits[cu] = (nuint)(man >> cbit); 235_bits[cu - 1] = (nuint)(man << (64 - cbit)); 242_bits[cu + 1] = (uint)(man >> (cbit + BitsPerUInt32)); 243_bits[cu] = (uint)(man >> cbit); 246_bits[cu - 1] = (nuint)(uint)man << (BitsPerUInt32 - cbit); 290_bits[0] = (uint)bits[0]; 293_bits[0] |= (nuint)(uint)bits[1] << 32; 296_bits[1] = (uint)bits[2]; 303_bits[0] = (uint)bits[0]; 306_bits[1] = (uint)bits[1]; 309_bits[2] = (uint)bits[2]; 317if (_bits.Length is 1 && _bits[0] <= int.MaxValue) 319_sign = _sign < 0 ? -(int)_bits[0] : (int)_bits[0]; 694/// Reads <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 711Buffer.BlockCopy(bits32, 0, _bits, 0, bits32.Length * sizeof(uint)); 721_bits[i / 2] = (nuint)(lo | (hi << 32)); 730/// Serializes <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 739if (_bits is not null) 743bits32 = new uint[_bits.Length]; 744Buffer.BlockCopy(_bits, 0, bits32, 0, _bits.Length * sizeof(uint)); 748int len = _bits.Length * 2; 749if ((uint)(_bits[^1] >> 32) == 0) 755for (int i = 0; i < _bits.Length; i++) 757bits32[i * 2] = (uint)_bits[i]; 760bits32[i * 2 + 1] = (uint)(_bits[i] >> 32); 779if (_bits is null) 789int iu = _bits.Length - 1; 790return BitOperations.IsPow2(_bits[iu]) && !_bits.AsSpan(0, iu).ContainsAnyExcept(0u); 796public bool IsOne => _sign == 1 && _bits is null; 798public bool IsEven => _bits is null ? (_sign & 1) == 0 : (_bits[0] & 1) == 0; 888return new BigInteger((int)NumericsHelpers.Abs(value._sign), value._bits); 918bool trivialDividend = dividend._bits is null; 919bool trivialDivisor = divisor._bits is null; 937Debug.Assert(dividend._bits is not null); 941int size = dividend._bits.Length; 946BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest); 952Debug.Assert(divisor._bits is not null); 961int commonOffset = dividend._bits[0] == 0 && divisor._bits[0] == 0 962? BigIntegerCalculator.GetCommonLimbOffset(dividend._bits, divisor._bits) 964ReadOnlySpan<nuint> dividendBits = dividend._bits.AsSpan(commonOffset); 965ReadOnlySpan<nuint> divisorBits = divisor._bits.AsSpan(commonOffset); 974int size = dividend._bits.Length; 1027if (value._bits is null) 1039h = value._bits[^1]; 1040m = value._bits.Length > 1 ? value._bits[^2] : 0; 1043b = (long)value._bits.Length * 64 - c; 1050h = (uint)value._bits[^1]; 1051m = value._bits.Length > 1 ? (uint)value._bits[^2] : 0; 1052l = value._bits.Length > 2 ? (uint)value._bits[^3] : 0; 1056b = (long)value._bits.Length * 32 - c; 1094bool trivialLeft = left._bits is null; 1095bool trivialRight = right._bits is null; 1104Debug.Assert(right._bits is not null); 1106? BigIntegerCalculator.Gcd(right._bits, NumericsHelpers.Abs(left._sign)) 1107: new BigInteger(+1, right._bits); 1112Debug.Assert(left._bits is not null); 1114? BigIntegerCalculator.Gcd(left._bits, NumericsHelpers.Abs(right._sign)) 1115: new BigInteger(+1, left._bits); 1118Debug.Assert(left._bits is not null && right._bits is not null); 1119return GreatestCommonDivisor(left._bits, right._bits); 1192if (value._bits is null) 1205ReadOnlySpan<nuint> bits = value._bits; 1253Debug.Assert(dividend._bits is not null); 1260ReadOnlySpan<nuint> dividendBits = dividend._bits; 1334bool trivialValue = value._bits is null; 1335bool trivialExponent = exponent._bits is null; 1336bool trivialModulus = modulus._bits is null; 1343trivialValue ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, NumericsHelpers.Abs(modulus._sign)) : 1344trivialExponent ? BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) : 1345BigIntegerCalculator.Pow(value._bits!, exponent._bits!, NumericsHelpers.Abs(modulus._sign)); 1351int size = (modulus._bits?.Length ?? 1) << 1; 1357BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1361BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, modulus._bits!, bits); 1366BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1370BigIntegerCalculator.Pow(value._bits!, exponent._bits!, modulus._bits!, bits); 1406bool trivialValue = value._bits is null; 1665int size = BigIntegerCalculator.PowBound(power, value._bits!.Length); 1668BigIntegerCalculator.Pow(value._bits, power, bits); 1678if (_bits is null) 1684hash.AddBytes(MemoryMarshal.AsBytes(_bits.AsSpan())); 1696if (_bits is null) 1703if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1712return _bits[0] == uu; 1717? (uint)_bits[0] == uu 1718: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == uu; 1730if (_bits is null) 1735int cu = _bits.Length; 1744return _bits[0] == other; 1749? (uint)_bits[0] == other 1750: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == other; 1756return _sign == other._sign && _bits.AsSpan().SequenceEqual(other._bits); 1761if (_bits is null) 1768if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1778uuTmp = _bits[0]; 1783? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1784: (uint)_bits[0]; 1798if (_bits is null) 1803int cu = _bits.Length; 1814uuTmp = _bits[0]; 1819? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1820: (uint)_bits[0]; 1835if (_bits is null) 1838other._bits is not null ? -other._sign : 1844if (other._bits is null) 1849int bitsResult = BigIntegerCalculator.Compare(_bits, other._bits); 2013nuint[]? bits = _bits; 2189Debug.Assert(_bits is null || _sign == 0 ? buffer.Length == 2 : buffer.Length >= _bits.Length + 1); 2193if (_bits is null) 2200_bits.CopyTo(buffer); 2201buffer = buffer.Slice(0, _bits.Length + 1); 2264if ((_bits is null) || (_bits.Length <= 4)) 2279highBits = _bits[^1]; 2280lowBitsCount = _bits.Length - 1; 2284highBits = ((ulong)_bits[^1] << BitsPerUInt32) + (uint)_bits[^2]; 2285lowBitsCount = _bits.Length - 2; 2400if (left._bits is null && right._bits is null) 2406? Add(left._bits, left._sign, right._bits, -right._sign) 2407: Subtract(left._bits, left._sign, right._bits, right._sign); 2548if (value._bits is null) 2559nuint[]? bits = value._bits; 2592nuint[]? bits = value._bits; 2726nuint[]? bits = value._bits; 2745nuint[]? bits = value._bits; 2768if (value._bits is null) 2773if (value._bits.Length > 1) 2781return checked((int)value._bits[0]); 2784if (value._bits[0] > UInt32HighBit) 2790return -(int)value._bits[0]; 2795if (value._bits is null) 2800int len = value._bits.Length; 2811uu = value._bits[0]; 2816? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2817: (uint)value._bits[0]; 2835if (value._bits is null) 2840int len = value._bits.Length; 2852uu = len > 1 ? new UInt128(value._bits[1], value._bits[0]) : (UInt128)(ulong)value._bits[0]; 2857((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2858((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2864? (UInt128)((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2865: (UInt128)(uint)value._bits[0]; 2890nuint[]? bits = value._bits; 2920if (value._bits is null) 2926return value._bits.Length <= 1 && value._sign >= 0 2927? checked((uint)value._bits[0]) 2935if (value._bits is null) 2940int len = value._bits.Length; 2949return value._bits[0]; 2953? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2954: (uint)value._bits[0]; 2963if (value._bits is null) 2968int len = value._bits.Length; 2979? new UInt128(value._bits[1], value._bits[0]) 2980: (UInt128)(ulong)value._bits[0]; 2985((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2986((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2991return ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]); 2994return (uint)value._bits[0]; 3198left._bits is null && right._bits is null ? (BigInteger)(left._sign & right._sign) : 3213return left._bits is null && right._bits is null 3219left._bits is null && right._bits is null 3229int xLen = left._bits?.Length ?? 1; 3230int yLen = right._bits?.Length ?? 1; 3248int xLen = left._bits?.Length ?? 1; 3249int yLen = right._bits?.Length ?? 1; 3258int xLen = left._bits?.Length ?? 1; 3259int yLen = right._bits?.Length ?? 1; 3269left._bits, left._sign, 3270right._bits, right._sign, 3299if (value._bits is null) 3305ReadOnlySpan<nuint> bits = value._bits; 3413if (value._bits is null) 3426ReadOnlySpan<nuint> bits = value._bits; 3466if (value._bits is null) 3476int size = value._bits.Length + 1; 3479BigIntegerCalculator.Add(value._bits, 1, bits); 3486Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 3488BigIntegerCalculator.Subtract(value._bits, 1, bits); 3496public static BigInteger operator -(BigInteger value) => new BigInteger(-value._sign, value._bits); 3502if (value._bits is null) 3511int size = value._bits.Length + 1; 3514BigIntegerCalculator.Add(value._bits, 1, bits); 3520Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 3522BigIntegerCalculator.Subtract(value._bits, 1, bits); 3532if (value._bits is null) 3541Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 3543BigIntegerCalculator.Subtract(value._bits, 1, bits); 3549int size = value._bits.Length + 1; 3552BigIntegerCalculator.Add(value._bits, 1, bits); 3562if (left._bits is null && right._bits is null) 3568? Subtract(left._bits, left._sign, right._bits, -right._sign) 3569: Add(left._bits, left._sign, right._bits, right._sign); 3574if (left._bits is null && right._bits is null) 3591return Multiply(left._bits, left._sign, right._bits, right._sign); 3651bool trivialDividend = dividend._bits is null; 3652bool trivialDivisor = divisor._bits is null; 3668Debug.Assert(dividend._bits is not null); 3670int size = dividend._bits.Length; 3674BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient); 3683Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3690int commonOffset = dividend._bits[0] == 0 && divisor._bits[0] == 0 3691? BigIntegerCalculator.GetCommonLimbOffset(dividend._bits, divisor._bits) 3693ReadOnlySpan<nuint> dividendBits = dividend._bits.AsSpan(commonOffset); 3694ReadOnlySpan<nuint> divisorBits = divisor._bits.AsSpan(commonOffset); 3723bool trivialDividend = dividend._bits is null; 3724bool trivialDivisor = divisor._bits is null; 3740Debug.Assert(dividend._bits is not null); 3741nuint remainder = BigIntegerCalculator.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign)); 3745Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3752int commonOffset = dividend._bits[0] == 0 && divisor._bits[0] == 0 3753? BigIntegerCalculator.GetCommonLimbOffset(dividend._bits, divisor._bits) 3755ReadOnlySpan<nuint> dividendBits = dividend._bits.AsSpan(commonOffset); 3756ReadOnlySpan<nuint> divisorBits = divisor._bits.AsSpan(commonOffset); 3763int size = dividend._bits.Length; 3867nuint[]? bits = _bits; 3903if (_bits is not null) 3908Debug.Assert(_bits.Length > 0); 3910Debug.Assert(_bits.Length > 1 || _bits[0] > int.MaxValue); 3912Debug.Assert(_bits[^1] != 0); 3914Debug.Assert(_bits.Length <= MaxLength); 3945if (value._bits is null) 3974if (value._bits is null) 3990return BitOperations.LeadingZeroCount(value._bits[^1]) & 31; 3996if (value._bits is null) 4007for (int i = 0; i < value._bits.Length; i++) 4009nuint part = value._bits[i]; 4018int firstNonZero = value._bits.AsSpan().IndexOfAnyExcept((nuint)0); 4024part = ~value._bits[i] + 1; 4028while (i < value._bits.Length) 4031part = ~value._bits[i]; 4039if (Environment.Is64BitProcess && (uint)(value._bits[^1] >> BitsPerUInt32) == 0) 4058if (value._bits is null) 4066return Rotate(value._bits, neg, rotateAmount); 4079if (value._bits is null) 4087return Rotate(value._bits, neg, -(long)rotateAmount); 4354if (value._bits is null) 4362nuint part = value._bits[0]; 4365for (int i = 1; (part == 0) && (i < value._bits.Length); i++) 4367part = value._bits[i]; 4392nuint[]? bits = _bits; 4432nuint[]? bits = _bits; 4510nuint[]? bits = _bits; 4585nuint[]? bits = _bits; 4636return value._bits is null 4638: (BigInteger)(((long)value._bits.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1])); 4683if (value._bits is null) 4690if (sign._bits is null) 4707return value._bits is null 4785return value._bits is null 4787: (value._bits[0] & 1) == 0; 4820return value._bits is null 4822: (value._bits[0] & 1) != 0; 5371if (value._bits is not null) 5388if (value._bits is not null) 5430if (value._bits is not null) 5447if (value._bits is not null) 5491if (value._bits is not null) 5514if (value._bits is not null) 5570if (value._bits is not null) 5572nuint bits = value._bits[0]; 5593if (value._bits is not null) 5595nuint bits = value._bits[0]; 5641if (value._bits is not null) 5643actualResult = IsNegative(value) ? (short)(~value._bits[0] + 1) : (short)value._bits[0]; 5657if (value._bits is not null) 5659actualResult = IsNegative(value) ? (int)(~value._bits[0] + 1) : (int)value._bits[0]; 5673if (value._bits is not null) 5679bits = value._bits[0]; 5685if (value._bits.Length >= 2) 5687bits = value._bits[1]; 5691bits |= value._bits[0]; 5713if (value._bits is not null) 5720lowerBits = value._bits[0]; 5722if (value._bits.Length >= 2) 5724upperBits = value._bits[1]; 5729if (value._bits.Length >= 4) 5731upperBits = value._bits[3]; 5735if (value._bits.Length >= 3) 5737upperBits |= value._bits[2]; 5740if (value._bits.Length >= 2) 5742lowerBits = value._bits[1]; 5746lowerBits |= value._bits[0]; 5770if (value._bits is not null) 5772nuint bits = value._bits[0]; 5799if (value._bits is not null) 5801actualResult = IsNegative(value) ? (sbyte)(~value._bits[0] + 1) : (sbyte)value._bits[0]; 5821if (value._bits is not null) 5823nuint bits = value._bits[0]; 5844if (value._bits is not null) 5846uint bits = (uint)value._bits[0]; 5867if (value._bits is not null) 5873bits = value._bits[0]; 5879if (value._bits.Length >= 2) 5881bits = value._bits[1]; 5885bits |= value._bits[0]; 5907if (value._bits is not null) 5914lowerBits = value._bits[0]; 5916if (value._bits.Length >= 2) 5918upperBits = value._bits[1]; 5923if (value._bits.Length >= 4) 5925upperBits = value._bits[3]; 5929if (value._bits.Length >= 3) 5931upperBits |= value._bits[2]; 5934if (value._bits.Length >= 2) 5936lowerBits = value._bits[1]; 5940lowerBits |= value._bits[0]; 5964if (value._bits is not null) 5966nuint bits = value._bits[0]; 6021if (value._bits is null) 6033ReadOnlySpan<nuint> bits = value._bits;