#ifndef __GEM5_WRAPPER_HPP__
  #define __GEM5_WRAPPER_HPP__

#include "../Register.hpp"
#include "../SALConfig.hpp"

// gem5 forward declarations:
class System;

namespace fail {

// Register-/Memory-related:
regdata_t GetRegisterContent(System* sys, unsigned int id, size_t idx);
void SetRegisterContent(System* sys, unsigned int id, size_t idx, regdata_t value);
void WriteMemory(System* sys, guest_address_t addr, size_t cnt, void const *src);
void ReadMemory(System* sys, guest_address_t addr, size_t cnt, void *dest);
size_t GetPoolSize(System* sys);

// Controller-related:
unsigned int GetCPUId(System* sys, int context);
System* GetSystemObject();
int GetNumberOfContexts(System* sys);

} // end-of-namespace: fail

#endif // __GEM5_WRAPPER_HPP__
