/* * ======================================================== * * HCore * Copyright 2024 Mahrouss Logic, all rights reserved. * * ======================================================== */ #include #define PCI_ITERATOR_FIND_AND_UNWRAP(DEV, SZ) \ if (DEV.Leak()) return DEV.Leak(); namespace HCore::PCI { Iterator::Iterator(const Types::PciDeviceKind &type) { // probe devices. for (int bus = 0; bus < ME_BUS_COUNT; ++bus) { for (int device = 0; device < ME_DEVICE_COUNT; ++device) { for (int function = 0; function < ME_FUNCTION_COUNT; ++function) { Device dev(bus, device, function, 0); if (dev.Class() == (UChar)type) { m_Devices[bus].Leak().Leak() = dev; } } } } } Iterator::~Iterator() {} Ref Iterator::operator[](const Size &sz) { PCI_ITERATOR_FIND_AND_UNWRAP(m_Devices[sz], sz); return {}; } } // namespace HCore::PCI