From d0da1f79fd8e7215cab9bc927d96c817827ddb41 Mon Sep 17 00:00:00 2001 From: Denis Shienkov Date: Wed, 9 Dec 2015 22:52:11 +0300 Subject: Use the C-style array of GUID tokens ... because use QPair and QList it is an overhead. Change-Id: I9ed90f9301ab1fed194890e925c9124e86d3c7dc Reviewed-by: Sergey Belyashov Reviewed-by: Denis Shienkov --- src/serialport/qserialportinfo_win.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/serialport/qserialportinfo_win.cpp b/src/serialport/qserialportinfo_win.cpp index 123b066..8a47e22 100644 --- a/src/serialport/qserialportinfo_win.cpp +++ b/src/serialport/qserialportinfo_win.cpp @@ -57,18 +57,6 @@ QT_BEGIN_NAMESPACE -typedef QPair GuidFlagsPair; - -static inline const QList& guidFlagsPairs() -{ - static const QList guidFlagsPairList = QList() - << qMakePair(QUuid(GUID_DEVCLASS_PORTS), DWORD(DIGCF_PRESENT)) - << qMakePair(QUuid(GUID_DEVCLASS_MODEM), DWORD(DIGCF_PRESENT)) - << qMakePair(QUuid(GUID_DEVINTERFACE_COMPORT), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)) - << qMakePair(QUuid(GUID_DEVINTERFACE_MODEM), DWORD(DIGCF_PRESENT | DIGCF_DEVICEINTERFACE)); - return guidFlagsPairList; -} - static QStringList portNamesFromHardwareDeviceMap() { HKEY hKey = Q_NULLPTR; @@ -287,10 +275,21 @@ static QString deviceSerialNumber(const QString &instanceIdentifier, QList QSerialPortInfo::availablePorts() { + static const struct { + GUID guid; DWORD flags; + } setupTokens[] = { + { GUID_DEVCLASS_PORTS, DIGCF_PRESENT }, + { GUID_DEVCLASS_MODEM, DIGCF_PRESENT }, + { GUID_DEVINTERFACE_COMPORT, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE }, + { GUID_DEVINTERFACE_MODEM, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE } + }; + + static const int setupTokensCount = sizeof(setupTokens) / sizeof(setupTokens[0]); + QList serialPortInfoList; - foreach (const GuidFlagsPair &uniquePair, guidFlagsPairs()) { - const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(reinterpret_cast(&uniquePair.first), Q_NULLPTR, Q_NULLPTR, uniquePair.second); + for (int i = 0; i < setupTokensCount; ++i) { + const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(&setupTokens[i].guid, Q_NULLPTR, Q_NULLPTR, setupTokens[i].flags); if (deviceInfoSet == INVALID_HANDLE_VALUE) return serialPortInfoList; -- cgit v1.2.1