using System;
|
|
using UnityEditor.MemoryProfiler;
|
|
using UnityEngine;
|
|
|
|
namespace MemoryProfilerWindow
|
|
{
|
|
class PrimitiveValueReader
|
|
{
|
|
private readonly VirtualMachineInformation _virtualMachineInformation;
|
|
private readonly MemorySection[] _heapSections;
|
|
|
|
public PrimitiveValueReader(VirtualMachineInformation virtualMachineInformation, MemorySection[] heapSections)
|
|
{
|
|
_virtualMachineInformation = virtualMachineInformation;
|
|
_heapSections = heapSections;
|
|
}
|
|
|
|
public System.Int32 ReadInt32(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToInt32(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.UInt32 ReadUInt32(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToUInt32(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.Int64 ReadInt64(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToInt64(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.UInt64 ReadUInt64(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToUInt64(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.Int16 ReadInt16(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToInt16(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.UInt16 ReadUInt16(BytesAndOffset bo)
|
|
{
|
|
return BitConverter.ToUInt16(bo.bytes, bo.offset);
|
|
}
|
|
|
|
public System.Byte ReadByte(BytesAndOffset bo)
|
|
{
|
|
return bo.bytes[bo.offset];
|
|
}
|
|
|
|
public System.SByte ReadSByte(BytesAndOffset bo)
|
|
{
|
|
return (System.SByte)bo.bytes[bo.offset];
|
|
}
|
|
|
|
public System.Boolean ReadBool(BytesAndOffset bo)
|
|
{
|
|
return ReadByte(bo) != 0;
|
|
}
|
|
|
|
public UInt64 ReadPointer(BytesAndOffset bo)
|
|
{
|
|
if (_virtualMachineInformation.pointerSize == 4)
|
|
return ReadUInt32(bo);
|
|
else
|
|
return ReadUInt64(bo);
|
|
}
|
|
|
|
public UInt64 ReadPointer(UInt64 address)
|
|
{
|
|
return ReadPointer(_heapSections.Find(address, _virtualMachineInformation));
|
|
}
|
|
|
|
public Char ReadChar(BytesAndOffset bytesAndOffset)
|
|
{
|
|
return System.Text.Encoding.Unicode.GetChars(bytesAndOffset.bytes, bytesAndOffset.offset, 2)[0];
|
|
}
|
|
|
|
public System.Single ReadSingle(BytesAndOffset bytesAndOffset)
|
|
{
|
|
return BitConverter.ToSingle(bytesAndOffset.bytes, bytesAndOffset.offset);
|
|
}
|
|
|
|
public System.Double ReadDouble(BytesAndOffset bytesAndOffset)
|
|
{
|
|
return BitConverter.ToDouble(bytesAndOffset.bytes, bytesAndOffset.offset);
|
|
}
|
|
}
|
|
}
|