25 lines
606 B
C++
25 lines
606 B
C++
#include "MetaCoreFoundation/MetaCoreId.h"
|
|
|
|
#include <atomic>
|
|
|
|
namespace MetaCore {
|
|
|
|
namespace {
|
|
|
|
std::atomic<std::uint64_t> GMetaCoreNextId{1};
|
|
|
|
} // namespace
|
|
|
|
MetaCoreId MetaCoreIdGenerator::Generate() {
|
|
return GMetaCoreNextId.fetch_add(1, std::memory_order_relaxed);
|
|
}
|
|
|
|
void MetaCoreIdGenerator::EnsureAbove(MetaCoreId value) {
|
|
std::uint64_t desired = value + 1;
|
|
std::uint64_t current = GMetaCoreNextId.load(std::memory_order_relaxed);
|
|
while (current < desired && !GMetaCoreNextId.compare_exchange_weak(current, desired, std::memory_order_relaxed)) {
|
|
}
|
|
}
|
|
|
|
} // namespace MetaCore
|