#pragma once #include #include "MacroUtils.h" consteval size_t operator""_KiB( size_t const value ) { return value * 1024; } consteval size_t operator""_MiB( size_t const value ) { return value * 1024_KiB; } consteval size_t operator""_GiB( size_t const value ) { return value * 1024_MiB; } struct GlobalMemory { struct State { std::byte* memory; size_t available; }; std::byte* memory; size_t available; size_t capacity; void init( size_t size ); void destroy(); [[nodiscard]] std::byte* allocate( size_t size ); [[nodiscard]] std::byte* allocate( size_t size, size_t alignment ); [[nodiscard]] State getState() const; //< Do not do any permanent allocations after calling this. void restoreState( State const& state ); //< Call this before permanent allocations. };