Files
Np_Term/include/utils/snowflake.h

39 lines
757 B
C++

#pragma once
#include <cstdint>
namespace utils {
struct Snowflake {
union {
struct {
std::uint64_t timestamp : 42;
std::uint64_t instance : 10;
std::uint64_t sequence : 12;
};
std::uint64_t snowflake;
};
bool operator==(const Snowflake& other) const {
return snowflake == other.snowflake;
}
std::vector<char> Serialize() {
std::vector<char> serialized(8);
::memcpy(serialized.data(), &snowflake, 8);
return serialized;
}
};
Snowflake GenerateID(std::uint8_t instance);
} // namespace Chattr
namespace std {
template <>
struct hash<utils::Snowflake> {
std::size_t operator()(const utils::Snowflake& k) const {
return std::hash<std::uint64_t>{}(k.snowflake);
}
};
} // namespace std