using System;
|
|
using UnityEditor.MemoryProfiler;
|
|
using UnityEngine;
|
|
|
|
namespace MemoryProfilerWindow
|
|
{
|
|
internal struct BytesAndOffset
|
|
{
|
|
public byte[] bytes;
|
|
public int offset;
|
|
public int pointerSize;
|
|
public bool IsValid { get { return bytes != null; }}
|
|
|
|
public UInt64 ReadPointer()
|
|
{
|
|
if (pointerSize == 4)
|
|
return BitConverter.ToUInt32(bytes, offset);
|
|
if (pointerSize == 8)
|
|
return BitConverter.ToUInt64(bytes, offset);
|
|
throw new ArgumentException("Unexpected pointersize: " + pointerSize);
|
|
}
|
|
|
|
public Int32 ReadInt32()
|
|
{
|
|
return BitConverter.ToInt32(bytes, offset);
|
|
}
|
|
|
|
public Int64 ReadInt64()
|
|
{
|
|
return BitConverter.ToInt64(bytes, offset);
|
|
}
|
|
|
|
public BytesAndOffset Add(int add)
|
|
{
|
|
return new BytesAndOffset() {bytes = bytes, offset = offset + add, pointerSize = pointerSize};
|
|
}
|
|
|
|
public void WritePointer(UInt64 value)
|
|
{
|
|
for (int i = 0; i < pointerSize; i++)
|
|
{
|
|
bytes[i + offset] = (byte)value;
|
|
value >>= 8;
|
|
}
|
|
}
|
|
|
|
public BytesAndOffset NextPointer()
|
|
{
|
|
return Add(pointerSize);
|
|
}
|
|
}
|
|
}
|