mirror of
https://github.com/Jous99/F4MP.git
synced 2026-01-12 08:40:53 +01:00
81 lines
No EOL
1.6 KiB
C++
81 lines
No EOL
1.6 KiB
C++
#ifndef COMMON_GAMEPTR_H
|
|
#define COMMON_GAMEPTR_H
|
|
|
|
#include <Windows.h>
|
|
#include <utility>
|
|
#include <cstdint>
|
|
|
|
namespace Memory {
|
|
|
|
class GamePtr_Manager {
|
|
public:
|
|
GamePtr_Manager();
|
|
|
|
static uintptr_t s_baseAddress;
|
|
};
|
|
|
|
template <typename T>
|
|
class GamePtr {
|
|
public :
|
|
GamePtr(uintptr_t offset) : offset(offset + Memory::GamePtr_Manager::s_baseAddress){}
|
|
|
|
T * GetPtr() const {
|
|
return reinterpret_cast <T *>(offset);
|
|
}
|
|
|
|
T * operator->() const
|
|
{
|
|
return GetPtr();
|
|
}
|
|
|
|
operator T *() const
|
|
{
|
|
return GetPtr();
|
|
}
|
|
|
|
bool operator!() const {
|
|
return !GetPtr();
|
|
}
|
|
|
|
const T * GetConstPtr() const {
|
|
return reinterpret_cast <T *>(offset);
|
|
}
|
|
|
|
uintptr_t GetUIntPtr() const
|
|
{
|
|
return offset;
|
|
}
|
|
private:
|
|
uintptr_t offset;
|
|
|
|
GamePtr();
|
|
GamePtr(GamePtr & rhs);
|
|
GamePtr & operator=(GamePtr & rhs);
|
|
};
|
|
|
|
template <typename T>
|
|
class GameAddr{
|
|
public:
|
|
GameAddr(uintptr_t offset) : offset(reinterpret_cast<ConversionType *>(offset + Memory::GamePtr_Manager::s_baseAddress)){}
|
|
|
|
operator T() {
|
|
return reinterpret_cast<T>(offset);
|
|
}
|
|
|
|
uintptr_t GetUIntPtr(){
|
|
return reinterpret_cast<uintptr_t >(offset);
|
|
}
|
|
private:
|
|
struct ConversionType {};
|
|
|
|
ConversionType * offset;
|
|
|
|
GameAddr();
|
|
GameAddr(GameAddr & rhs);
|
|
GameAddr & operator=(GameAddr & rhs);
|
|
};
|
|
|
|
|
|
}
|
|
|
|
#endif |