public override int GetRowValue(long row) { var obj = m_Table.GetObjectData(row).displayObject; switch (obj.dataType) { case ObjectDataType.ReferenceArray: { obj = ObjectData.FromManagedPointer(m_Table.Snapshot, obj.GetReferencePointer()); if (obj.hostManagedObjectPtr != 0) { goto case ObjectDataType.Array; } return(-1); } case ObjectDataType.Array: { var arrayInfo = ArrayTools.GetArrayInfo(m_Table.Snapshot, obj.managedObjectData, obj.managedTypeIndex); return(arrayInfo.length); } default: return(-1); } }
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>"); } }
public override string GetRowValue(long row) { var d = m_Table.GetObjectData(row).displayObject; switch (d.dataType) { case ObjectDataType.Array: case ObjectDataType.BoxedValue: case ObjectDataType.Object: case ObjectDataType.ReferenceArray: case ObjectDataType.Value: if (d.managedTypeIndex < 0) { return("<unknown type>"); } return(m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]); case ObjectDataType.ReferenceObject: { var ptr = d.GetReferencePointer(); if (ptr != 0) { var obj = ObjectData.FromManagedPointer(m_Table.Snapshot, ptr); if (obj.IsValid && obj.managedTypeIndex != d.managedTypeIndex) { return("(" + m_Table.Snapshot.typeDescriptions.typeDescriptionName[obj.managedTypeIndex] + ") " + m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]); } } return(m_Table.Snapshot.typeDescriptions.typeDescriptionName[d.managedTypeIndex]); } case ObjectDataType.Global: return("Global"); case ObjectDataType.Type: return("Type"); case ObjectDataType.NativeObject: { int iType = m_Table.Snapshot.nativeObjects.nativeTypeArrayIndex[d.nativeObjectIndex]; return(m_Table.Snapshot.nativeTypes.typeName[iType]); } case ObjectDataType.Unknown: default: return("<unknown>"); } }
public ObjectSingleTable(Schema schema, SnapshotDataRenderer renderer, CachedSnapshot snapshot, ManagedData crawledData, ObjectData obj, ObjectMetaType metaType) : base(schema, renderer, snapshot, crawledData, metaType) { this.obj = obj; if (!obj.dataIncludeObjectHeader) { var od = ObjectData.FromManagedPointer(snapshot, obj.hostManagedObjectPtr); objOffset = obj.managedObjectData.offset - od.managedObjectData.offset; } else { objOffset = 0; } InitObjectList(); ExpandCell(0, 0, true); }
public override Database.Table CreateGroupTable(long groupIndex) { var subObj = GetObjectData(groupIndex).displayObject; switch (subObj.dataType) { case ObjectDataType.Array: return(new ObjectArrayTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType)); case ObjectDataType.ReferenceArray: { var ptr = subObj.GetReferencePointer(); subObj = ObjectData.FromManagedPointer(Snapshot, ptr); return(new ObjectArrayTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType)); } case ObjectDataType.Value: case ObjectDataType.BoxedValue: case ObjectDataType.Object: case ObjectDataType.Type: return(new ObjectFieldTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType)); case ObjectDataType.ReferenceObject: { var ptr = subObj.GetReferencePointer(); subObj = ObjectData.FromManagedPointer(Snapshot, ptr); return(new ObjectFieldTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType)); } case ObjectDataType.NativeObject: return(new ObjectReferenceTable(Schema, Renderer, Snapshot, CrawledData, subObj, m_MetaType)); default: return(null); } }
public override Table GetTableByName(string name, ParameterSet param) { if (name == ObjectTable.TableName) { ulong obj; if (!TryGetParam(param, ObjectTable.ObjParamName, out obj)) { return(null); } int iType; if (!TryGetParam(param, ObjectTable.TypeParamName, out iType)) { iType = -1; } ObjectData od = ObjectData.FromManagedPointer(m_Snapshot, obj, iType); var table = new ObjectSingleTable(this, formatter, m_Snapshot, m_Snapshot.CrawledData, od, od.isNative ? ObjectTable.ObjectMetaType.Native : ObjectTable.ObjectMetaType.Managed); return(table); } else if (name == ObjectReferenceTable.kObjectReferenceTableName) { int objUnifiedIndex; if (!TryGetParam(param, ObjectTable.ObjParamName, out objUnifiedIndex)) { return(null); } var od = ObjectData.FromUnifiedObjectIndex(m_Snapshot, objUnifiedIndex); var table = new ObjectReferenceTable(this, formatter, m_Snapshot, m_Snapshot.CrawledData, od, ObjectTable.ObjectMetaType.All); //, od.isNative ? ObjectTable.ObjectMetaType.Native : ObjectTable.ObjectMetaType.Managed); return(table); //ObjectReferenceTable } else { return(GetTableByName(name)); } }
public bool IsGroupExpandable(ObjectData od, bool forceExpandAllObject = false) { switch (od.dataType) { case ObjectDataType.Array: { var l = ArrayTools.ReadArrayLength(Snapshot, od.hostManagedObjectPtr, od.managedTypeIndex); return(l > 0 || forceExpandAllObject); } case ObjectDataType.ReferenceArray: { var ptr = od.GetReferencePointer(); if (ptr != 0) { var arr = ObjectData.FromManagedPointer(Snapshot, ptr); var l = ArrayTools.ReadArrayLength(Snapshot, arr.hostManagedObjectPtr, arr.managedTypeIndex); return(l > 0 || forceExpandAllObject); } return(false); } case ObjectDataType.ReferenceObject: { ulong ptr = od.GetReferencePointer(); if (ptr == 0) { return(false); } var obj = ObjectData.FromManagedPointer(Snapshot, ptr); if (!obj.IsValid) { return(false); } if (forceExpandAllObject) { return(true); } if (!Renderer.IsExpandable(obj.managedTypeIndex)) { return(false); } return(Snapshot.typeDescriptions.HasAnyField(obj.managedTypeIndex)); } case ObjectDataType.BoxedValue: case ObjectDataType.Object: case ObjectDataType.Value: if (forceExpandAllObject) { return(true); } if (!Renderer.IsExpandable(od.managedTypeIndex)) { return(false); } return(Snapshot.typeDescriptions.HasAnyField(od.managedTypeIndex)); case ObjectDataType.Type: if (!Renderer.IsExpandable(od.managedTypeIndex)) { return(false); } if (Renderer.flattenFields) { return(Snapshot.typeDescriptions.HasAnyStaticField(od.managedTypeIndex)); } else { return(Snapshot.typeDescriptions.HasStaticField(od.managedTypeIndex)); } default: return(false); } }