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

◆ TryFormatStandard()

static bool System.Globalization.TimeSpanFormat.TryFormatStandard ( TimeSpan value,
StandardFormat format,
string decimalSeparator,
Span< char > destination,
out int charsWritten )
inlinestaticprivate

Definition at line 256 of file TimeSpanFormat.cs.

257 {
258 int num = 8;
259 long num2 = value.Ticks;
260 uint valueWithoutTrailingZeros;
261 ulong num3;
262 if (num2 < 0)
263 {
264 num = 9;
265 num2 = -num2;
266 if (num2 < 0)
267 {
268 valueWithoutTrailingZeros = 4775808u;
269 num3 = 922337203685uL;
270 goto IL_0050;
271 }
272 }
273 (ulong Quotient, ulong Remainder) tuple = Math.DivRem((ulong)num2, 10000000uL);
274 num3 = tuple.Quotient;
275 ulong item = tuple.Remainder;
276 valueWithoutTrailingZeros = (uint)item;
277 goto IL_0050;
278 IL_0050:
279 int num4 = 0;
280 switch (format)
281 {
282 case StandardFormat.C:
283 if (valueWithoutTrailingZeros != 0)
284 {
285 num4 = 7;
286 num += num4 + 1;
287 }
288 break;
289 case StandardFormat.G:
290 num4 = 7;
291 num += num4 + 1;
292 break;
293 default:
294 if (valueWithoutTrailingZeros != 0)
295 {
296 num4 = 7 - FormattingHelpers.CountDecimalTrailingZeros(valueWithoutTrailingZeros, out valueWithoutTrailingZeros);
297 num += num4 + 1;
298 }
299 break;
300 }
301 ulong num5 = 0uL;
302 ulong num6 = 0uL;
303 if (num3 != 0)
304 {
305 (num5, num6) = Math.DivRem(num3, 60uL);
306 }
307 ulong num7 = 0uL;
308 ulong num8 = 0uL;
309 if (num5 != 0)
310 {
311 (num7, num8) = Math.DivRem(num5, 60uL);
312 }
313 uint num9 = 0u;
314 uint num10 = 0u;
315 if (num7 != 0)
316 {
317 (num9, num10) = Math.DivRem((uint)num7, 24u);
318 }
319 int num11 = 2;
320 if (format == StandardFormat.g && num10 < 10)
321 {
322 num11 = 1;
323 num--;
324 }
325 int num12 = 0;
326 if (num9 != 0)
327 {
328 num12 = FormattingHelpers.CountDigits(num9);
329 num += num12 + 1;
330 }
331 else if (format == StandardFormat.G)
332 {
333 num += 2;
334 num12 = 1;
335 }
336 if (destination.Length < num)
337 {
338 charsWritten = 0;
339 return false;
340 }
341 int num13 = 0;
342 if (value.Ticks < 0)
343 {
344 destination[num13++] = '-';
345 }
346 if (num12 != 0)
347 {
348 WriteDigits(num9, destination.Slice(num13, num12));
349 num13 += num12;
350 destination[num13++] = ((format == StandardFormat.C) ? '.' : ':');
351 }
352 if (num11 == 2)
353 {
354 WriteTwoDigits(num10, destination.Slice(num13));
355 num13 += 2;
356 }
357 else
358 {
359 destination[num13++] = (char)(48 + num10);
360 }
361 destination[num13++] = ':';
362 WriteTwoDigits((uint)num8, destination.Slice(num13));
363 num13 += 2;
364 destination[num13++] = ':';
365 WriteTwoDigits((uint)num6, destination.Slice(num13));
366 num13 += 2;
367 if (num4 != 0)
368 {
369 if (format == StandardFormat.C)
370 {
371 destination[num13++] = '.';
372 }
373 else if (decimalSeparator.Length == 1)
374 {
375 destination[num13++] = decimalSeparator[0];
376 }
377 else
378 {
379 decimalSeparator.CopyTo(destination);
380 num13 += decimalSeparator.Length;
381 }
382 WriteDigits(valueWithoutTrailingZeros, destination.Slice(num13, num4));
383 num13 += num4;
384 }
385 charsWritten = num;
386 return true;
387 }
static int CountDecimalTrailingZeros(uint value, out uint valueWithoutTrailingZeros)
static void WriteTwoDigits(uint value, Span< char > buffer)
static void WriteDigits(uint value, Span< char > buffer)

References System.Buffers.Text.FormattingHelpers.CountDecimalTrailingZeros(), System.Buffers.Text.FormattingHelpers.CountDigits(), System.destination, System.Math.DivRem(), System.format, System.item, System.value, System.Globalization.TimeSpanFormat.WriteDigits(), and System.Globalization.TimeSpanFormat.WriteTwoDigits().

Referenced by System.Globalization.TimeSpanFormat.FormatC(), System.Globalization.TimeSpanFormat.FormatG(), and System.Globalization.TimeSpanFormat.TryFormat().