Files
Np_Term/include/utils/snowflake.h

40 lines
814 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;
serialized.insert(serialized.end(), &snowflake,
&snowflake + sizeof(snowflake));
return serialized;
}
};
Snowflake GenerateID(std::uint16_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