namespace CTX
{
	struct Memory_t
	{
		struct
		{
			ADD_ADDRESS( Present, GAMEOVERLAYRENDERER64_MODULE, "48 89 6C 24 ? 48 89 74 24 ? 41 56 48 83 EC 20 41 8B E8" );
			ADD_ADDRESS( ResizeBuffers, GAMEOVERLAYRENDERER64_MODULE, "48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC ? 44 8B FA" );
		} IDXGISwapChain;

		struct
		{
			ADD_EXPORT_ADDRESS_TYPED( SetRelativeMouseMode, SDL3_MODULE, "SDL_SetRelativeMouseMode", int ( * )( int iEnabled ) );
			ADD_EXPORT_ADDRESS_TYPED( SetWindowGrab, SDL3_MODULE, "SDL_SetWindowGrab", void( * )( void* pWindow, int iGrabbed ) );
			ADD_EXPORT_ADDRESS_TYPED( WarpMouseInWindow, SDL3_MODULE, "SDL_WarpMouseInWindow", void( * )( void* pWindow, float flTargetPosX, float flTargetPosY ) );
		} SDL;

		struct
		{
			ADD_EXPORT_ADDRESS_TYPED( AllocFunc, TIER0_MODULE, "MemAlloc_AllocFunc", void* ( * )( std::size_t uSize ) );
			ADD_EXPORT_ADDRESS_TYPED( ReallocFunc, TIER0_MODULE, "MemAlloc_ReallocFunc", void* ( * )( void* pMemory, std::size_t uNewSize ) );
			ADD_EXPORT_ADDRESS_TYPED( GetSizeFunc, TIER0_MODULE, "MemAlloc_GetSizeFunc", std::size_t ( * )( void* pMemory ) );
			ADD_EXPORT_ADDRESS_TYPED( FreeFunc, TIER0_MODULE, "MemAlloc_FreeFunc", void ( * )( void* pMemory ) );
			ADD_EXPORT_ADDRESS_TYPED( StrDupFunc, TIER0_MODULE, "MemAlloc_StrDupFunc", char* ( * )( const char* szString ) );
		} MemAlloc;
	};

	inline std::unique_ptr< Memory_t > pMemory = nullptr;
} // namespace CTX

#undef ADD_EXPORT_ADDRESS
#undef ADD_ADDRESS

#endif // CS2_CHEAT_CTX_MEMORY_HPP
