string IObjectDataTypeFormatter.Format(CachedSnapshot snapshot, ObjectData od, IDataFormatter formatter)
 {
     if (od.dataIncludeObjectHeader)
     {
         od = od.GetBoxedValue(snapshot, true);
     }
     return(formatter.Format(od.managedObjectData.ReadString()));
 }
        public string Format(ObjectData od, IDataFormatter formatter, bool objectBrief = true)
        {
            switch (od.dataType)
            {
            case ObjectDataType.BoxedValue:
                return(FormatValueType(od.GetBoxedValue(m_Snapshot, true), formatter, objectBrief));

            case ObjectDataType.Value:
                return(FormatValueType(od, formatter, objectBrief));

            case ObjectDataType.Object:
                return(FormatObject(od, formatter, objectBrief));

            case ObjectDataType.Array:
                return(FormatArray(od, formatter));

            case ObjectDataType.ReferenceObject:
            {
                ulong ptr = od.GetReferencePointer();
                if (ptr == 0)
                {
                    return(FormatPointer(ptr));
                }
                else
                {
                    var o = ObjectData.FromManagedPointer(m_Snapshot, ptr);
                    return(FormatObject(o, formatter, objectBrief));
                }
            }

            case ObjectDataType.ReferenceArray:
            {
                ulong ptr = od.GetReferencePointer();
                if (ptr == 0)
                {
                    return(FormatPointer(ptr));
                }
                var arr = ObjectData.FromManagedPointer(m_Snapshot, ptr);
                return(FormatArray(arr, formatter));
            }

            case ObjectDataType.Type:
                return(m_Snapshot.typeDescriptions.typeDescriptionName[od.managedTypeIndex]);

            case ObjectDataType.Global:
                return("<global>");

            case ObjectDataType.NativeObject:
                return(FormatPointer(m_Snapshot.nativeObjects.nativeObjectAddress[od.nativeObjectIndex]));

            default:
                return("<uninitialized type>");
            }
        }