//========== Copyright (C) Valve Corporation, All rights reserved. ==========//
//
// Purpose: CVirtualMemoryManager interface
//
//===========================================================================//

#ifndef MEM_VIRT_H
#define MEM_VIRT_H
#ifdef _WIN32
#pragma once
#endif


#define VMM_KB ( 1024 )
#define VMM_MB ( 1024 * VMM_KB )

#ifdef _PS3
// Total virtual address space reserved by CVirtualMemoryManager on startup:
#define VMM_VIRTUAL_SIZE ( 512 * VMM_MB )
#define VMM_PAGE_SIZE ( 64 * VMM_KB )
#endif



// Allocate virtual sections via IMemAlloc::AllocateVirtualMemorySection
abstract_class IVirtualMemorySection
{
public:
	// Information about memory section
	virtual void * GetBaseAddress() = 0;
	virtual size_t GetPageSize() = 0;
	virtual size_t GetTotalSize() = 0;

	// Functions to manage physical memory mapped to virtual memory
	virtual bool CommitPages( void *pvBase, size_t numBytes ) = 0;
	virtual void DecommitPages( void *pvBase, size_t numBytes ) = 0;

	// Release the physical memory and associated virtual address space
	virtual void Release() = 0;
};

// Get the IVirtualMemorySection associated with a given memory address (if any):
extern IVirtualMemorySection *GetMemorySectionForAddress( void *pAddress );


#endif // MEM_VIRT_H