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];
367 references to _bits
System.Runtime.Numerics (367)
System\Number.BigInteger.cs (3)
812if (value._bits == null) 859int base1E9BufferLength = (int)(value._bits.Length * digitRatio) + 1; 863BigIntegerToBase1E9(value._bits, base1E9Buffer, out int written);
System\Numerics\BigInteger.cs (364)
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) 2044nuint[]? bits = value._bits; 2162if (value._bits is null) 2167if (value._bits.Length > 1) 2175return checked((int)value._bits[0]); 2178if (value._bits[0] > UInt32HighBit) 2184return -(int)value._bits[0]; 2189if (value._bits is null) 2194int len = value._bits.Length; 2205uu = value._bits[0]; 2210? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2211: (uint)value._bits[0]; 2229if (value._bits is null) 2234int len = value._bits.Length; 2246uu = len > 1 ? new UInt128(value._bits[1], value._bits[0]) : (UInt128)(ulong)value._bits[0]; 2251((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2252((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2258? (UInt128)((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2259: (UInt128)(uint)value._bits[0]; 2289if (value._bits is null) 2295return value._bits.Length <= 1 && value._sign >= 0 2296? checked((uint)value._bits[0]) 2304if (value._bits is null) 2309int len = value._bits.Length; 2318return value._bits[0]; 2322? ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2323: (uint)value._bits[0]; 2332if (value._bits is null) 2337int len = value._bits.Length; 2348? new UInt128(value._bits[1], value._bits[0]) 2349: (UInt128)(ulong)value._bits[0]; 2354((ulong)((len > 3) ? (uint)value._bits[3] : 0) << 32 | (uint)value._bits[2]), 2355((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]) 2360return ((ulong)(uint)value._bits[1] << 32 | (uint)value._bits[0]); 2363return (uint)value._bits[0]; 2567left._bits is null && right._bits is null ? (BigInteger)(left._sign & right._sign) : 2582return left._bits is null && right._bits is null 2588left._bits is null && right._bits is null 2598int xLen = left._bits?.Length ?? 1; 2599int yLen = right._bits?.Length ?? 1; 2617int xLen = left._bits?.Length ?? 1; 2618int yLen = right._bits?.Length ?? 1; 2627int xLen = left._bits?.Length ?? 1; 2628int yLen = right._bits?.Length ?? 1; 2638left._bits, left._sign, 2639right._bits, right._sign, 2668if (value._bits is null) 2674ReadOnlySpan<nuint> bits = value._bits; 2762if (value._bits is null) 2775ReadOnlySpan<nuint> bits = value._bits; 2815if (value._bits is null) 2825int size = value._bits.Length + 1; 2828BigIntegerCalculator.Add(value._bits, 1, bits); 2835Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2837BigIntegerCalculator.Subtract(value._bits, 1, bits); 2845public static BigInteger operator -(BigInteger value) => new BigInteger(-value._sign, value._bits); 2851if (value._bits is null) 2860int size = value._bits.Length + 1; 2863BigIntegerCalculator.Add(value._bits, 1, bits); 2869Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2871BigIntegerCalculator.Subtract(value._bits, 1, bits); 2881if (value._bits is null) 2890Span<nuint> bits = RentedBuffer.Create(value._bits.Length, out RentedBuffer bitsBuffer); 2892BigIntegerCalculator.Subtract(value._bits, 1, bits); 2898int size = value._bits.Length + 1; 2901BigIntegerCalculator.Add(value._bits, 1, bits); 2911if (left._bits is null && right._bits is null) 2917? Subtract(left._bits, left._sign, right._bits, -right._sign) 2918: Add(left._bits, left._sign, right._bits, right._sign); 2922left._bits is null && right._bits is null 2924: Multiply(left._bits, left._sign, right._bits, right._sign); 2983bool trivialDividend = dividend._bits is null; 2984bool trivialDivisor = divisor._bits is null; 3000Debug.Assert(dividend._bits is not null); 3002int size = dividend._bits.Length; 3006BigIntegerCalculator.Divide(dividend._bits, NumericsHelpers.Abs(divisor._sign), quotient); 3015Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3017if (dividend._bits.Length < divisor._bits.Length) 3023int size = dividend._bits.Length - divisor._bits.Length + 1; 3026BigIntegerCalculator.Divide(dividend._bits, divisor._bits, quotient); 3037bool trivialDividend = dividend._bits is null; 3038bool trivialDivisor = divisor._bits is null; 3054Debug.Assert(dividend._bits is not null); 3055nuint remainder = BigIntegerCalculator.Remainder(dividend._bits, NumericsHelpers.Abs(divisor._sign)); 3059Debug.Assert(dividend._bits is not null && divisor._bits is not null); 3061if (dividend._bits.Length < divisor._bits.Length) 3066int size = dividend._bits.Length; 3069BigIntegerCalculator.Remainder(dividend._bits, divisor._bits, bits); 3159nuint[]? bits = _bits; 3195if (_bits is not null) 3200Debug.Assert(_bits.Length > 0); 3202Debug.Assert(_bits.Length > 1 || _bits[0] > int.MaxValue); 3204Debug.Assert(_bits[^1] != 0); 3206Debug.Assert(_bits.Length <= MaxLength); 3237if (value._bits is null) 3266if (value._bits is null) 3282return BitOperations.LeadingZeroCount(value._bits[^1]) & 31; 3288if (value._bits is null) 3299for (int i = 0; i < value._bits.Length; i++) 3301nuint part = value._bits[i]; 3310int firstNonZero = value._bits.AsSpan().IndexOfAnyExcept((nuint)0); 3316part = ~value._bits[i] + 1; 3320while (i < value._bits.Length) 3323part = ~value._bits[i]; 3331if (Environment.Is64BitProcess && (uint)(value._bits[^1] >> BitsPerUInt32) == 0) 3350if (value._bits is null) 3358return Rotate(value._bits, neg, rotateAmount); 3371if (value._bits is null) 3379return Rotate(value._bits, neg, -(long)rotateAmount); 3641if (value._bits is null) 3651nuint part = value._bits[0]; 3653for (int i = 1; (part == 0) && (i < value._bits.Length); i++) 3655part = value._bits[i]; 3681nuint[]? bits = _bits; 3721nuint[]? bits = _bits; 3799nuint[]? bits = _bits; 3874nuint[]? bits = _bits; 3925return value._bits is null 3927: (BigInteger)(((long)value._bits.Length * BigIntegerCalculator.BitsPerLimb - 1) ^ BitOperations.LeadingZeroCount(value._bits[^1])); 3972if (value._bits is null) 3979if (sign._bits is null) 3996return value._bits is null 4074return value._bits is null 4076: (value._bits[0] & 1) == 0; 4109return value._bits is null 4111: (value._bits[0] & 1) != 0; 4660if (value._bits is not null) 4677if (value._bits is not null) 4719if (value._bits is not null) 4736if (value._bits is not null) 4780if (value._bits is not null) 4803if (value._bits is not null) 4859if (value._bits is not null) 4861nuint bits = value._bits[0]; 4882if (value._bits is not null) 4884nuint bits = value._bits[0]; 4930if (value._bits is not null) 4932actualResult = IsNegative(value) ? (short)(~value._bits[0] + 1) : (short)value._bits[0]; 4946if (value._bits is not null) 4948actualResult = IsNegative(value) ? (int)(~value._bits[0] + 1) : (int)value._bits[0]; 4962if (value._bits is not null) 4968bits = value._bits[0]; 4974if (value._bits.Length >= 2) 4976bits = value._bits[1]; 4980bits |= value._bits[0]; 5002if (value._bits is not null) 5009lowerBits = value._bits[0]; 5011if (value._bits.Length >= 2) 5013upperBits = value._bits[1]; 5018if (value._bits.Length >= 4) 5020upperBits = value._bits[3]; 5024if (value._bits.Length >= 3) 5026upperBits |= value._bits[2]; 5029if (value._bits.Length >= 2) 5031lowerBits = value._bits[1]; 5035lowerBits |= value._bits[0]; 5059if (value._bits is not null) 5061nuint bits = value._bits[0]; 5088if (value._bits is not null) 5090actualResult = IsNegative(value) ? (sbyte)(~value._bits[0] + 1) : (sbyte)value._bits[0]; 5110if (value._bits is not null) 5112nuint bits = value._bits[0]; 5133if (value._bits is not null) 5135uint bits = (uint)value._bits[0]; 5156if (value._bits is not null) 5162bits = value._bits[0]; 5168if (value._bits.Length >= 2) 5170bits = value._bits[1]; 5174bits |= value._bits[0]; 5196if (value._bits is not null) 5203lowerBits = value._bits[0]; 5205if (value._bits.Length >= 2) 5207upperBits = value._bits[1]; 5212if (value._bits.Length >= 4) 5214upperBits = value._bits[3]; 5218if (value._bits.Length >= 3) 5220upperBits |= value._bits[2]; 5223if (value._bits.Length >= 2) 5225lowerBits = value._bits[1]; 5229lowerBits |= value._bits[0]; 5253if (value._bits is not null) 5255nuint bits = value._bits[0]; 5310if (value._bits is null) 5322ReadOnlySpan<nuint> bits = value._bits;