Example #1
0
        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());
        }
Example #2
0
        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);