14 static constexpr JobInternalType IdBits = 20;
15 static constexpr JobInternalType GenBits = 11;
16 static constexpr JobInternalType PrioBits = 1;
17 static constexpr JobInternalType AllBits = IdBits + GenBits + PrioBits;
18 static constexpr JobInternalType IdMask = (uint32_t)(uint64_t(1) << IdBits) - 1;
19 static constexpr JobInternalType GenMask = (uint32_t)(uint64_t(1) << GenBits) - 1;
20 static constexpr JobInternalType PrioMask = (uint32_t)(uint64_t(1) << PrioBits) - 1;
22 using JobSizeType = std::conditional_t<(AllBits > 32), uint64_t, uint32_t>;
24 static_assert(AllBits <= 64,
"Job IdBits and GenBits must fit inside 64 bits");
25 static_assert(IdBits <= 31,
"Job IdBits must be at most 31 bits long");
26 static_assert(GenBits > 10,
"Job GenBits must be at least 10 bits long");
31 JobInternalType id : IdBits;
33 JobInternalType gen : GenBits;
35 JobInternalType prio : PrioBits;
45 JobHandle(JobId
id, JobGenId gen, JobGenId prio) {
60 GAIA_NODISCARD
constexpr bool operator==(
const JobHandle& other)
const noexcept {
61 return val == other.val;
63 GAIA_NODISCARD
constexpr bool operator!=(
const JobHandle& other)
const noexcept {
64 return val != other.val;
67 GAIA_NODISCARD
auto id()
const {
70 GAIA_NODISCARD
auto gen()
const {
73 GAIA_NODISCARD
auto prio()
const {
76 GAIA_NODISCARD
auto value()
const {