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 data.id = JobHandle::IdMask;
46 data.gen = JobHandle::GenMask;
47 data.prio = JobHandle::PrioMask;
49 JobHandle(JobId
id, JobGenId gen, JobGenId prio) {
64 GAIA_NODISCARD
constexpr bool operator==(
const JobHandle& other)
const noexcept {
65 return val == other.val;
67 GAIA_NODISCARD
constexpr bool operator!=(
const JobHandle& other)
const noexcept {
68 return val != other.val;
71 GAIA_NODISCARD
auto id()
const {
74 GAIA_NODISCARD
auto gen()
const {
77 GAIA_NODISCARD
auto prio()
const {
80 GAIA_NODISCARD
auto value()
const {