/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: CpuBitId.NT.hpp Date: 2022-3-16 Author: Reece ***/ #pragma once namespace Aurora::HWInfo { AuList CpuBitId::ToCpuSets() const { AuList ret; AuUInt8 index {}; while (CpuBitScanForward(index, index)) { unsigned long logicalProcessorIndex = index % 64; unsigned long groupIndex = index / 64; ret.push_back(((groupIndex + 1ull) * 0x100ull) + logicalProcessorIndex); index++; } return ret; } void CpuBitId::ToMsWin7GroupAffinity(void *ptr) const { auto &logicalProcessorQWord = *AuReinterpretCast(ptr); auto &groupIndexU16 = *AuReinterpretCast(AuReinterpretCast(ptr) + 8); AuUInt8 index {}; while (CpuBitScanForward(index, index)) { AuUInt64 logicalProcessorIndex = index % 64; AuUInt64 groupIndex = index / 64; logicalProcessorQWord |= 1ull << logicalProcessorIndex; groupIndexU16 = AuUInt16(groupIndex); index++; } } }