Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ MulTenAdd()

unsafe uint System.Xml.Xsl.XPathConvert.BigNumber.MulTenAdd ( uint digit)
inlineprivate

Definition at line 194 of file XPathConvert.cs.

195 {
196 _exp += 3;
197 uint* ptr = stackalloc uint[5];
198 for (int i = 0; i < 5; i++)
199 {
200 ptr[i] = 0u;
201 }
202 if (digit != 0)
203 {
204 int num = 3 - (_exp >> 5);
205 if (num < 0)
206 {
207 *ptr = 1u;
208 }
209 else
210 {
211 int num2 = _exp & 0x1F;
212 if (num2 < 4)
213 {
214 ptr[num + 1] = digit >> num2;
215 if (num2 > 0)
216 {
217 ptr[num] = digit << 32 - num2;
218 }
219 }
220 else
221 {
222 ptr[num] = digit << 32 - num2;
223 }
224 }
225 }
226 ptr[1] += AddU(ref *ptr, _u0 << 30);
227 ptr[2] += AddU(ref _u0, (_u0 >> 2) + (_u1 << 30));
228 if (ptr[1] != 0)
229 {
230 ptr[2] += AddU(ref _u0, ptr[1]);
231 }
232 ptr[3] += AddU(ref _u1, (_u1 >> 2) + (_u2 << 30));
233 if (ptr[2] != 0)
234 {
235 ptr[3] += AddU(ref _u1, ptr[2]);
236 }
237 ptr[4] = AddU(ref _u2, (_u2 >> 2) + ptr[3]);
238 if (ptr[4] != 0)
239 {
240 *ptr = (*ptr >> 1) | (*ptr & 1u) | (_u0 << 31);
241 _u0 = (_u0 >> 1) | (_u1 << 31);
242 _u1 = (_u1 >> 1) | (_u2 << 31);
243 _u2 = (_u2 >> 1) | 0x80000000u;
244 _exp++;
245 }
246 return *ptr;
247 }
static uint AddU(ref uint u1, uint u2)

References System.Xml.Xsl.XPathConvert.BigNumber._exp, System.Xml.Xsl.XPathConvert.BigNumber._u0, System.Xml.Xsl.XPathConvert.BigNumber._u1, System.Xml.Xsl.XPathConvert.BigNumber._u2, System.Xml.Xsl.XPathConvert.AddU(), and System.Xml.Dictionary.

Referenced by System.Xml.Xsl.XPathConvert.BigNumber.BigNumber().