35 writes to _bits
System.Runtime.Numerics (35)
System\Numerics\BigInteger.cs (35)
73_bits = null; 85_bits = null; 90_bits = [value]; 101_bits = null; 123_bits = [(nuint)x]; 127_bits = x <= uint.MaxValue ? [((uint)x)] : [(uint)x, (uint)(x >> BitsPerUInt32)]; 140_bits = null; 147_bits = [(nuint)value]; 151_bits = value <= uint.MaxValue ? [((uint)value)] : [(uint)value, (uint)(value >> BitsPerUInt32)]; 170_bits = null; 227_bits = new nuint[cu + 1]; 237_bits = new nuint[cu + 2]; 277_bits = null; 285_bits = new nuint[nuintSize]; 298_bits = new nuint[size]; 316_bits = null; 367_bits = null; 391_bits = null; 395_bits = [(uint)_sign]; 487_bits = null; 496_bits = val.AsSpan(0, len).ToArray(); 501_bits = val; 507_bits = val; 526_bits = bits; 557_bits = null; 567_bits = value.ToArray(); 637_bits = null; 644_bits = trimLen == 1 ? [magnitude] : value[..trimLen].ToArray(); 650_bits = [magnitude]; 657_bits = [value[0]]; 662_bits = null; 682_bits = value.ToArray(); 702_bits = null; 706_bits = new nuint[bits32.Length]; 712_bits = new nuint[nuintLen];
371 references to _bits
System.Runtime.Numerics (371)
System\Number.BigInteger.cs (3)
832if (value._bits == null) 879int base1E9BufferLength = (int)(value._bits.Length * digitRatio) + 1; 883BigIntegerToBase1E9(value._bits, base1E9Buffer, out int written);
System\Numerics\BigInteger.cs (368)
42/// <see cref="_sign"/> and <see cref="_bits"/> is <see langword="null"/>. 43/// For all other values, <see cref="_sign"/> is +1 or -1 and the magnitude is in <see cref="_bits"/>. 228_bits[cu] = (nuint)(man >> cbit); 231_bits[cu - 1] = (nuint)(man << (64 - cbit)); 238_bits[cu + 1] = (uint)(man >> (cbit + BitsPerUInt32)); 239_bits[cu] = (uint)(man >> cbit); 242_bits[cu - 1] = (nuint)(uint)man << (BitsPerUInt32 - cbit); 286_bits[0] = (uint)bits[0]; 289_bits[0] |= (nuint)(uint)bits[1] << 32; 292_bits[1] = (uint)bits[2]; 299_bits[0] = (uint)bits[0]; 302_bits[1] = (uint)bits[1]; 305_bits[2] = (uint)bits[2]; 313if (_bits.Length is 1 && _bits[0] <= int.MaxValue) 315_sign = _sign < 0 ? -(int)_bits[0] : (int)_bits[0]; 690/// Reads <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 707Buffer.BlockCopy(bits32, 0, _bits, 0, bits32.Length * sizeof(uint)); 717_bits[i / 2] = (nuint)(lo | (hi << 32)); 726/// Serializes <see cref="_bits"/> as <see cref="uint"/>[] for backward compatibility with previous 735if (_bits is not null) 739bits32 = new uint[_bits.Length]; 740Buffer.BlockCopy(_bits, 0, bits32, 0, _bits.Length * sizeof(uint)); 744int len = _bits.Length * 2; 745if ((uint)(_bits[^1] >> 32) == 0) 751for (int i = 0; i < _bits.Length; i++) 753bits32[i * 2] = (uint)_bits[i]; 756bits32[i * 2 + 1] = (uint)(_bits[i] >> 32); 775if (_bits is null) 785int iu = _bits.Length - 1; 786return BitOperations.IsPow2(_bits[iu]) && !_bits.AsSpan(0, iu).ContainsAnyExcept(0u); 792public bool IsOne => _sign == 1 && _bits is null; 794public bool IsEven => _bits is null ? (_sign & 1) == 0 : (_bits[0] & 1) == 0; 884return new BigInteger((int)NumericsHelpers.Abs(value._sign), value._bits); 914bool trivialDividend = dividend._bits is null; 915bool trivialDivisor = divisor._bits is null; 933Debug.Assert(dividend._bits is not null); 937int size = dividend._bits.Length; 942BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient, out nuint rest); 948Debug.Assert(divisor._bits is not null); 950if (dividend._bits.Length < divisor._bits.Length) 957int size = dividend._bits.Length; 960size = dividend._bits.Length - divisor._bits.Length + 1; 963BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient, rest); 1002if (value._bits is null) 1014h = value._bits[^1]; 1015m = value._bits.Length > 1 ? value._bits[^2] : 0; 1018b = (long)value._bits.Length * 64 - c; 1025h = (uint)value._bits[^1]; 1026m = value._bits.Length > 1 ? (uint)value._bits[^2] : 0; 1027l = value._bits.Length > 2 ? (uint)value._bits[^3] : 0; 1031b = (long)value._bits.Length * 32 - c; 1049bool trivialLeft = left._bits is null; 1050bool trivialRight = right._bits is null; 1059Debug.Assert(right._bits is not null); 1061? BigIntegerCalculator.Gcd(right._bits, NumericsHelpers.Abs(left._sign)) 1062: new BigInteger(+1, right._bits); 1067Debug.Assert(left._bits is not null); 1069? BigIntegerCalculator.Gcd(left._bits, NumericsHelpers.Abs(right._sign)) 1070: new BigInteger(+1, left._bits); 1073Debug.Assert(left._bits is not null && right._bits is not null); 1075return BigIntegerCalculator.Compare(left._bits, right._bits) < 0 1076? GreatestCommonDivisor(right._bits, left._bits) 1077: GreatestCommonDivisor(left._bits, right._bits); 1130bool trivialValue = value._bits is null; 1131bool trivialExponent = exponent._bits is null; 1132bool trivialModulus = modulus._bits is null; 1139trivialValue ? BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, NumericsHelpers.Abs(modulus._sign)) : 1140trivialExponent ? BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), NumericsHelpers.Abs(modulus._sign)) : 1141BigIntegerCalculator.Pow(value._bits!, exponent._bits!, NumericsHelpers.Abs(modulus._sign)); 1147int size = (modulus._bits?.Length ?? 1) << 1; 1153BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1157BigIntegerCalculator.Pow(NumericsHelpers.Abs(value._sign), exponent._bits!, modulus._bits!, bits); 1162BigIntegerCalculator.Pow(value._bits!, NumericsHelpers.Abs(exponent._sign), modulus._bits!, bits); 1166BigIntegerCalculator.Pow(value._bits!, exponent._bits!, modulus._bits!, bits); 1191bool trivialValue = value._bits is null; 1222int size = BigIntegerCalculator.PowBound(power, value._bits!.Length); 1225BigIntegerCalculator.Pow(value._bits, power, bits); 1235if (_bits is null) 1241hash.AddBytes(MemoryMarshal.AsBytes(_bits.AsSpan())); 1253if (_bits is null) 1260if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1269return _bits[0] == uu; 1274? (uint)_bits[0] == uu 1275: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == uu; 1287if (_bits is null) 1292int cu = _bits.Length; 1301return _bits[0] == other; 1306? (uint)_bits[0] == other 1307: ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) == other; 1313return _sign == other._sign && _bits.AsSpan().SequenceEqual(other._bits); 1318if (_bits is null) 1325if ((_sign ^ other) < 0 || (cu = _bits.Length) > maxLimbs) 1335uuTmp = _bits[0]; 1340? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1341: (uint)_bits[0]; 1355if (_bits is null) 1360int cu = _bits.Length; 1371uuTmp = _bits[0]; 1376? ((ulong)(uint)_bits[1] << 32 | (uint)_bits[0]) 1377: (uint)_bits[0]; 1392if (_bits is null) 1395other._bits is not null ? -other._sign : 1401if (other._bits is null) 1406int bitsResult = BigIntegerCalculator.Compare(_bits, other._bits); 1570nuint[]? bits = _bits; 1746Debug.Assert(_bits is null || _sign == 0 ? buffer.Length == 2 : buffer.Length >= _bits.Length + 1); 1750if (_bits is null) 1757_bits.CopyTo(buffer); 1758buffer = buffer.Slice(0, _bits.Length + 1); 1821if ((_bits is null) || (_bits.Length <= 4)) 1836highBits = _bits[^1]; 1837lowBitsCount = _bits.Length - 1; 1841highBits = ((ulong)_bits[^1] << BitsPerUInt32) + (uint)_bits[^2]; 1842lowBitsCount = _bits.Length - 2; 1948if (left._bits is null && right._bits is null) 1954? Add(left._bits, left._sign, right._bits, -right._sign) 1955: Subtract(left._bits, left._sign, right._bits, right._sign); 2026if (value._bits is null) 2037nuint[]? bits = value._bits; 2070nuint[]? bits = value._bits; 2204nuint[]? bits = value._bits; 2223nuint[]? bits = value._bits; 2246if (value._bits is null) 2251if (value._bits.Length > 1) 2259return checked((int)value._bits[0]); 2262if (value._bits[0] > UInt32HighBit) 2268return -(int)value._bits[0]; 2273if (value._bits is null) 2278int len = value._bits.Length; 2289uu = value._bits[0]; 2294? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2295: (uint)value._bits[0]; 2313if (value._bits is null) 2318int len = value._bits.Length; 2330uu = len > 1 ? new UInt128(value._bits[1], value._bits[0]) : (UInt128)(ulong)value._bits[0]; 2335((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2336((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2342? (UInt128)((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2343: (UInt128)(uint)value._bits[0]; 2368nuint[]? bits = value._bits; 2398if (value._bits is null) 2404return value._bits.Length <= 1 && value._sign >= 0 2405? checked((uint)value._bits[0]) 2413if (value._bits is null) 2418int len = value._bits.Length; 2427return value._bits[0]; 2431? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2432: (uint)value._bits[0]; 2441if (value._bits is null) 2446int len = value._bits.Length; 2457? new UInt128(value._bits[1], value._bits[0]) 2458: (UInt128)(ulong)value._bits[0]; 2463((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2464((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2469return ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]); 2472return (uint)value._bits[0]; 2676left._bits is null && right._bits is null ? (BigInteger)(left._sign & right._sign) : 2691return left._bits is null && right._bits is null 2697left._bits is null && right._bits is null 2707int xLen = left._bits?.Length ?? 1; 2708int yLen = right._bits?.Length ?? 1; 2726int xLen = left._bits?.Length ?? 1; 2727int yLen = right._bits?.Length ?? 1; 2736int xLen = left._bits?.Length ?? 1; 2737int yLen = right._bits?.Length ?? 1; 2747left._bits, left._sign, 2748right._bits, right._sign, 2777if (value._bits is null) 2783ReadOnlySpan<nuint> bits = value._bits; 2871if (value._bits is null) 2884ReadOnlySpan<nuint> bits = value._bits; 2924if (value._bits is null) 2934int size = value._bits.Length + 1; 2937BigIntegerCalculator.Add(value._bits, 1, bits); 2944Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2946BigIntegerCalculator.Subtract(value._bits, 1, bits); 2954public static BigInteger operator -(BigInteger value) => new BigInteger(-value._sign, value._bits); 2960if (value._bits is null) 2969int size = value._bits.Length + 1; 2972BigIntegerCalculator.Add(value._bits, 1, bits); 2978Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2980BigIntegerCalculator.Subtract(value._bits, 1, bits); 2990if (value._bits is null) 2999Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 3001BigIntegerCalculator.Subtract(value._bits, 1, bits); 3007int size = value._bits.Length + 1; 3010BigIntegerCalculator.Add(value._bits, 1, bits); 3020if (left._bits is null && right._bits is null) 3026? Subtract(left._bits, left._sign, right._bits, -right._sign) 3027: Add(left._bits, left._sign, right._bits, right._sign); 3031left._bits is null && right._bits is null 3033: Multiply(left._bits, left._sign, right._bits, right._sign); 3092bool trivialDividend = dividend._bits is null; 3093bool trivialDivisor = divisor._bits is null; 3109Debug.Assert(dividend._bits is not null); 3111int size = dividend._bits.Length; 3115BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient); 3124Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3126if (dividend._bits.Length < divisor._bits.Length) 3132int size = dividend._bits.Length - divisor._bits.Length + 1; 3135BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient); 3146bool trivialDividend = dividend._bits is null; 3147bool trivialDivisor = divisor._bits is null; 3163Debug.Assert(dividend._bits is not null); 3164nuint remainder = BigIntegerCalculator.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign)); 3168Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3170if (dividend._bits.Length < divisor._bits.Length) 3175int size = dividend._bits.Length; 3178BigIntegerCalculator.Remainder(dividend._bits, divisor._bits, bits); 3268nuint[]? bits = _bits; 3304if (_bits is not null) 3309Debug.Assert(_bits.Length > 0); 3311Debug.Assert(_bits.Length > 1 || _bits[0] > int.MaxValue); 3313Debug.Assert(_bits[^1] != 0); 3315Debug.Assert(_bits.Length <= MaxLength); 3346if (value._bits is null) 3375if (value._bits is null) 3391return BitOperations.LeadingZeroCount(value._bits[^1]) & 31; 3397if (value._bits is null) 3408for (int i = 0; i < value._bits.Length; i++) 3410nuint part = value._bits[i]; 3419int firstNonZero = value._bits.AsSpan().IndexOfAnyExcept((nuint)0); 3425part = ~value._bits[i] + 1; 3429while (i < value._bits.Length) 3432part = ~value._bits[i]; 3440if (Environment.Is64BitProcess && (uint)(value._bits[^1] >> BitsPerUInt32) == 0) 3459if (value._bits is null) 3467return Rotate(value._bits, neg, rotateAmount); 3480if (value._bits is null) 3488return Rotate(value._bits, neg, -(long)rotateAmount); 3750if (value._bits is null) 3760nuint part = value._bits[0]; 3762for (int i = 1; (part == 0) && (i < value._bits.Length); i++) 3764part = value._bits[i]; 3790nuint[]? bits = _bits; 3830nuint[]? bits = _bits; 3908nuint[]? bits = _bits; 3983nuint[]? bits = _bits; 4034return value._bits is null 4036: (BigInteger)(((long)value._bits.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1])); 4081if (value._bits is null) 4088if (sign._bits is null) 4105return value._bits is null 4183return value._bits is null 4185: (value._bits[0] & 1) == 0; 4218return value._bits is null 4220: (value._bits[0] & 1) != 0; 4769if (value._bits is not null) 4786if (value._bits is not null) 4828if (value._bits is not null) 4845if (value._bits is not null) 4889if (value._bits is not null) 4912if (value._bits is not null) 4968if (value._bits is not null) 4970nuint bits = value._bits[0]; 4991if (value._bits is not null) 4993nuint bits = value._bits[0]; 5039if (value._bits is not null) 5041actualResult = IsNegative(value) ? (short)(~value._bits[0] + 1) : (short)value._bits[0]; 5055if (value._bits is not null) 5057actualResult = IsNegative(value) ? (int)(~value._bits[0] + 1) : (int)value._bits[0]; 5071if (value._bits is not null) 5077bits = value._bits[0]; 5083if (value._bits.Length >= 2) 5085bits = value._bits[1]; 5089bits |= value._bits[0]; 5111if (value._bits is not null) 5118lowerBits = value._bits[0]; 5120if (value._bits.Length >= 2) 5122upperBits = value._bits[1]; 5127if (value._bits.Length >= 4) 5129upperBits = value._bits[3]; 5133if (value._bits.Length >= 3) 5135upperBits |= value._bits[2]; 5138if (value._bits.Length >= 2) 5140lowerBits = value._bits[1]; 5144lowerBits |= value._bits[0]; 5168if (value._bits is not null) 5170nuint bits = value._bits[0]; 5197if (value._bits is not null) 5199actualResult = IsNegative(value) ? (sbyte)(~value._bits[0] + 1) : (sbyte)value._bits[0]; 5219if (value._bits is not null) 5221nuint bits = value._bits[0]; 5242if (value._bits is not null) 5244uint bits = (uint)value._bits[0]; 5265if (value._bits is not null) 5271bits = value._bits[0]; 5277if (value._bits.Length >= 2) 5279bits = value._bits[1]; 5283bits |= value._bits[0]; 5305if (value._bits is not null) 5312lowerBits = value._bits[0]; 5314if (value._bits.Length >= 2) 5316upperBits = value._bits[1]; 5321if (value._bits.Length >= 4) 5323upperBits = value._bits[3]; 5327if (value._bits.Length >= 3) 5329upperBits |= value._bits[2]; 5332if (value._bits.Length >= 2) 5334lowerBits = value._bits[1]; 5338lowerBits |= value._bits[0]; 5362if (value._bits is not null) 5364nuint bits = value._bits[0]; 5419if (value._bits is null) 5431ReadOnlySpan<nuint> bits = value._bits;