| 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); | 
|         } | 
|     } | 
| } |