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

◆ EncodeObject()

static unsafe object System.Diagnostics.Tracing.EventProvider.EncodeObject ( ref object data,
ref EventData * dataDescriptor,
ref byte * dataBuffer,
ref uint totalEventSize )
inlinestaticprivateinherited

Definition at line 474 of file EventProvider.cs.

475 {
476 string text;
477 byte[] array;
478 while (true)
479 {
480 dataDescriptor->Reserved = 0u;
481 text = data as string;
482 array = null;
483 if (text != null)
484 {
485 dataDescriptor->Size = (uint)((text.Length + 1) * 2);
486 break;
487 }
488 if ((array = data as byte[]) != null)
489 {
490 *(int*)dataBuffer = array.Length;
491 dataDescriptor->Ptr = (ulong)dataBuffer;
492 dataDescriptor->Size = 4u;
495 dataBuffer += 16;
496 dataDescriptor->Size = (uint)array.Length;
497 break;
498 }
499 if (data is IntPtr)
500 {
501 dataDescriptor->Size = (uint)sizeof(IntPtr);
503 *ptr = (IntPtr)data;
504 dataDescriptor->Ptr = (ulong)ptr;
505 break;
506 }
507 if (data is int)
508 {
509 dataDescriptor->Size = 4u;
510 int* ptr2 = (int*)dataBuffer;
511 *ptr2 = (int)data;
512 dataDescriptor->Ptr = (ulong)ptr2;
513 break;
514 }
515 if (data is long)
516 {
517 dataDescriptor->Size = 8u;
518 long* ptr3 = (long*)dataBuffer;
519 *ptr3 = (long)data;
520 dataDescriptor->Ptr = (ulong)ptr3;
521 break;
522 }
523 if (data is uint)
524 {
525 dataDescriptor->Size = 4u;
526 uint* ptr4 = (uint*)dataBuffer;
527 *ptr4 = (uint)data;
528 dataDescriptor->Ptr = (ulong)ptr4;
529 break;
530 }
531 if (data is ulong)
532 {
533 dataDescriptor->Size = 8u;
534 ulong* ptr5 = (ulong*)dataBuffer;
535 *ptr5 = (ulong)data;
536 dataDescriptor->Ptr = (ulong)ptr5;
537 break;
538 }
539 if (data is char)
540 {
541 dataDescriptor->Size = 2u;
542 char* ptr6 = (char*)dataBuffer;
543 *ptr6 = (char)data;
544 dataDescriptor->Ptr = (ulong)ptr6;
545 break;
546 }
547 if (data is byte)
548 {
549 dataDescriptor->Size = 1u;
550 byte* ptr7 = dataBuffer;
551 *ptr7 = (byte)data;
552 dataDescriptor->Ptr = (ulong)ptr7;
553 break;
554 }
555 if (data is short)
556 {
557 dataDescriptor->Size = 2u;
558 short* ptr8 = (short*)dataBuffer;
559 *ptr8 = (short)data;
560 dataDescriptor->Ptr = (ulong)ptr8;
561 break;
562 }
563 if (data is sbyte)
564 {
565 dataDescriptor->Size = 1u;
566 sbyte* ptr9 = (sbyte*)dataBuffer;
567 *ptr9 = (sbyte)data;
568 dataDescriptor->Ptr = (ulong)ptr9;
569 break;
570 }
571 if (data is ushort)
572 {
573 dataDescriptor->Size = 2u;
574 ushort* ptr10 = (ushort*)dataBuffer;
575 *ptr10 = (ushort)data;
576 dataDescriptor->Ptr = (ulong)ptr10;
577 break;
578 }
579 if (data is float)
580 {
581 dataDescriptor->Size = 4u;
582 float* ptr11 = (float*)dataBuffer;
583 *ptr11 = (float)data;
584 dataDescriptor->Ptr = (ulong)ptr11;
585 break;
586 }
587 if (data is double)
588 {
589 dataDescriptor->Size = 8u;
590 double* ptr12 = (double*)dataBuffer;
591 *ptr12 = (double)data;
592 dataDescriptor->Ptr = (ulong)ptr12;
593 break;
594 }
595 if (data is bool)
596 {
597 dataDescriptor->Size = 4u;
598 int* ptr13 = (int*)dataBuffer;
599 if ((bool)data)
600 {
601 *ptr13 = 1;
602 }
603 else
604 {
605 *ptr13 = 0;
606 }
607 dataDescriptor->Ptr = (ulong)ptr13;
608 break;
609 }
610 if (data is Guid)
611 {
612 dataDescriptor->Size = (uint)sizeof(Guid);
614 *ptr14 = (Guid)data;
615 dataDescriptor->Ptr = (ulong)ptr14;
616 break;
617 }
618 if (data is decimal)
619 {
620 dataDescriptor->Size = 16u;
621 decimal* ptr15 = (decimal*)dataBuffer;
622 *ptr15 = (decimal)data;
623 dataDescriptor->Ptr = (ulong)ptr15;
624 break;
625 }
626 if (data is DateTime)
627 {
628 long num = 0L;
629 if (((DateTime)data).Ticks > 504911232000000000L)
630 {
631 num = ((DateTime)data).ToFileTimeUtc();
632 }
633 dataDescriptor->Size = 8u;
634 long* ptr16 = (long*)dataBuffer;
635 *ptr16 = num;
636 dataDescriptor->Ptr = (ulong)ptr16;
637 break;
638 }
639 if (data is Enum)
640 {
641 try
642 {
643 Type underlyingType = Enum.GetUnderlyingType(data.GetType());
644 if (underlyingType == typeof(ulong))
645 {
646 data = (ulong)data;
647 }
648 else if (underlyingType == typeof(long))
649 {
650 data = (long)data;
651 }
652 else
653 {
654 data = (int)Convert.ToInt64(data);
655 }
656 }
657 catch
658 {
659 goto IL_0411;
660 }
661 continue;
662 }
663 goto IL_0411;
664 IL_0411:
665 text = ((data != null) ? data.ToString() : "");
666 dataDescriptor->Size = (uint)((text.Length + 1) * 2);
667 break;
668 }
671 dataBuffer += 16;
672 return ((object)text) ?? ((object)array);
673 }

References System.array, System.Diagnostics.DateTime, System.Enum.GetUnderlyingType(), System.Diagnostics.Tracing.Guid, System.L, System.text, and System.Convert.ToInt64().

Referenced by System.Diagnostics.Tracing.EventProvider.WriteEvent().