summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Shienkov <denis.shienkov@gmail.com>2015-12-09 22:52:11 +0300
committerDenis Shienkov <denis.shienkov@gmail.com>2015-12-10 10:36:15 +0000
commitd0da1f79fd8e7215cab9bc927d96c817827ddb41 (patch)
tree72c330aa25cf118438a6b5697808bde4c375c7a3
parenta1a98f1cffedd23fed9f0a29cd297fc255af1978 (diff)
downloadqtserialport-d0da1f79fd8e7215cab9bc927d96c817827ddb41.tar.gz
Use the C-style array of GUID tokens
... because use QPair and QList it is an overhead. Change-Id: I9ed90f9301ab1fed194890e925c9124e86d3c7dc Reviewed-by: Sergey Belyashov <Sergey.Belyashov@gmail.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com>
-rw-r--r--src/serialport/qserialportinfo_win.cpp27
1 files 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<QUuid, DWORD> GuidFlagsPair;
-
-static inline const QList<GuidFlagsPair>& guidFlagsPairs()
-{
- static const QList<GuidFlagsPair> guidFlagsPairList = QList<GuidFlagsPair>()
- << 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> 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<QSerialPortInfo> serialPortInfoList;
- foreach (const GuidFlagsPair &uniquePair, guidFlagsPairs()) {
- const HDEVINFO deviceInfoSet = ::SetupDiGetClassDevs(reinterpret_cast<const GUID *>(&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;