private static void ManualTable <T>(AllocPointer <T> alloc) { bool refType = !typeof(T).IsValueType; ConsoleTable table = refType ? new ConsoleTable("Index", "Address", "Value", "Heap pointer") : new ConsoleTable("Index", "Address", "Value"); for (int i = alloc.Start; i <= alloc.End; i++) { var addr = PointerUtils.Offset <T>(alloc.Address, i); if (refType) { table.AddRow(i, Hex.ToHex(addr), alloc[i], Hex.ToHex(Marshal.ReadIntPtr(addr))); } else { table.AddRow(i, Hex.ToHex(addr), alloc[i]); } } Console.WriteLine(table.ToMarkDownString()); }
public static T SafeRead <T>(Pointer <T> ptr, int elemOfs = 0) { T t = default; IntPtr addr = PointerUtils.Offset <T>(ptr.Address, elemOfs); if (Assertion.Throws <NullReferenceException>(delegate { t = CSUnsafe.Read <T>(addr.ToPointer()); })) { return(default);