1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2024-12-29 03:19:44 +00:00
OpenMW/components/detournavigator/recastallocutils.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

90 lines
2.0 KiB
C++
Raw Normal View History

#ifndef OPENMW_COMPONENTS_DETOURNAVIGATOR_RECASTALLOCUTILS_H
#define OPENMW_COMPONENTS_DETOURNAVIGATOR_RECASTALLOCUTILS_H
2023-04-21 00:13:40 +00:00
#include <cstddef>
namespace DetourNavigator
{
static_assert(sizeof(std::size_t) == sizeof(void*), "");
enum BufferType : std::size_t
{
BufferType_perm,
BufferType_temp,
BufferType_unused,
};
inline BufferType* tempPtrBufferType(void* ptr)
{
return reinterpret_cast<BufferType*>(static_cast<std::size_t*>(ptr) + 1);
}
inline BufferType getTempPtrBufferType(void* ptr)
{
return *tempPtrBufferType(ptr);
}
inline void setTempPtrBufferType(void* ptr, BufferType value)
{
*tempPtrBufferType(ptr) = value;
}
inline void** tempPtrPrev(void* ptr)
{
return static_cast<void**>(ptr);
}
inline void* getTempPtrPrev(void* ptr)
{
return *tempPtrPrev(ptr);
}
inline void setTempPtrPrev(void* ptr, void* value)
{
*tempPtrPrev(ptr) = value;
}
inline void* getTempPtrDataPtr(void* ptr)
{
return reinterpret_cast<void*>(static_cast<std::size_t*>(ptr) + 2);
}
inline BufferType* dataPtrBufferType(void* dataPtr)
{
return reinterpret_cast<BufferType*>(static_cast<std::size_t*>(dataPtr) - 1);
}
inline BufferType getDataPtrBufferType(void* dataPtr)
{
return *dataPtrBufferType(dataPtr);
}
inline void setDataPtrBufferType(void* dataPtr, BufferType value)
{
*dataPtrBufferType(dataPtr) = value;
}
inline void* getTempDataPtrStackPtr(void* dataPtr)
{
return static_cast<std::size_t*>(dataPtr) - 2;
}
inline void* getPermDataPtrHeapPtr(void* dataPtr)
{
return static_cast<std::size_t*>(dataPtr) - 1;
}
inline void setPermPtrBufferType(void* ptr, BufferType value)
{
*static_cast<BufferType*>(ptr) = value;
}
inline void* getPermPtrDataPtr(void* ptr)
{
return static_cast<std::size_t*>(ptr) + 1;
}
2018-11-04 18:23:30 +00:00
}
#endif