* add guid

* Update Guid.hpp

* it’s too late for all of this

* format
This commit is contained in:
Ryan 2024-06-13 17:04:16 -04:00 committed by GitHub
parent c6c93b1286
commit 515edbcad8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 44 additions and 1 deletions

View File

@ -47,4 +47,5 @@
#include "script/scrThread.hpp"
#include "script/scrThreadContext.hpp"
#include "script/scrVector.hpp"
#include "script/types.hpp"
#include "script/types.hpp"
#include "rage/Guid.hpp"

42
rage/Guid.hpp Normal file
View File

@ -0,0 +1,42 @@
#pragma once
#include <cstdint>
template <typename size_t Len>
class Guid {
public:
static_assert(Len > 0);
inline constexpr size_t size() const { return Len; }
template <typename T>
inline constexpr T &At(size_t i) {
static_assert(sizeof(T) <= sizeof(uint64_t));
assert(i < Len);
return *reinterpret_cast<T *>(&m_Buffer[i]);
}
inline constexpr uint32_t &operator[](size_t i) { return At<uint32_t>(i); }
inline constexpr Guid() {
for (size_t i = 0; i < size(); i++)
m_Buffer[i] = 0;
}
template <typename size_t Len2>
inline constexpr Guid<Len> &operator=(Guid<Len2> g) {
for (size_t i = 0; i < std::min(size(), g.size()); i++)
m_Buffer[i] = g[i];
return *this;
}
template <typename size_t Len2>
inline constexpr Guid(Guid<Len2> g) {
*this = g;
}
inline constexpr Any *get() { return reinterpret_cast<Any *>(&m_Buffer); }
private:
alignas(8) uint64_t m_Buffer[Len];
};
static_assert(sizeof(Guid<5>) == sizeof(uint64_t) * 5);