MetaCore/Source/MetaCoreFoundation/Private/MetaCoreId.cpp

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