45#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_ID_GENERATOR_INL
46#define LASS_GUARDIAN_OF_INCLUSION_UTIL_ID_GENERATOR_INL
78 using TValue =
typename CallTraits<T>::TValue;
79 TValue currentId = nextId_.load(std::memory_order_acquire);
83 if (currentId == num::NumTraits<TValue>::max)
85 LASS_THROW(
"ID overflow. Can no longer increment ID field.");
87 nextId =
static_cast<TValue
>(currentId + 1);
89 while (!nextId_.compare_exchange_weak(currentId, nextId,
90 std::memory_order_release, std::memory_order_relaxed));
void setNext(typename CallTraits< T >::TParam iNextId)
set the next ID to be drawn.
CallTraits< T >::TValue operator()()
Generate an ID.
IdGenerator(typename CallTraits< T >::TParam iFirstId=0)
Construct an ID generator of which iFirstId is the first ID to be generated.
general utility, debug facilities, ...
Library for Assembled Shared Sources.