From 04406a3c8ecd5bb21521b939b874db4aa192c5db Mon Sep 17 00:00:00 2001 From: Alexander Krotov Date: Fri, 4 May 2018 13:08:29 +0300 Subject: [PATCH] wifi: Replace linear search with map lookup in MinstrelHtWifiManager --- src/wifi/model/minstrel-ht-wifi-manager.cc | 28 +++++++--------------- src/wifi/model/minstrel-ht-wifi-manager.h | 3 +-- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/src/wifi/model/minstrel-ht-wifi-manager.cc b/src/wifi/model/minstrel-ht-wifi-manager.cc index 97695ca1a..2cd01a1af 100644 --- a/src/wifi/model/minstrel-ht-wifi-manager.cc +++ b/src/wifi/model/minstrel-ht-wifi-manager.cc @@ -339,44 +339,32 @@ Time MinstrelHtWifiManager::GetFirstMpduTxTime (uint32_t groupId, WifiMode mode) const { NS_LOG_FUNCTION (this << groupId << mode); - for (TxTime::const_iterator i = m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.begin (); i != m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.end (); i++) - { - if (mode == i->second) - { - return i->first; - } - } - NS_ASSERT (false); - return Seconds (0); + auto it = m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.find (mode); + NS_ASSERT (it != m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.end ()); + return it->second; } void MinstrelHtWifiManager::AddFirstMpduTxTime (uint32_t groupId, WifiMode mode, Time t) { NS_LOG_FUNCTION (this << groupId << mode << t); - m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.push_back (std::make_pair (t, mode)); + m_minstrelGroups[groupId].ratesFirstMpduTxTimeTable.insert (std::make_pair (mode, t)); } Time MinstrelHtWifiManager::GetMpduTxTime (uint32_t groupId, WifiMode mode) const { NS_LOG_FUNCTION (this << groupId << mode); - for (TxTime::const_iterator i = m_minstrelGroups[groupId].ratesTxTimeTable.begin (); i != m_minstrelGroups[groupId].ratesTxTimeTable.end (); i++) - { - if (mode == i->second) - { - return i->first; - } - } - NS_ASSERT (false); - return Seconds (0); + auto it = m_minstrelGroups[groupId].ratesTxTimeTable.find (mode); + NS_ASSERT (it != m_minstrelGroups[groupId].ratesTxTimeTable.end ()); + return it->second; } void MinstrelHtWifiManager::AddMpduTxTime (uint32_t groupId, WifiMode mode, Time t) { NS_LOG_FUNCTION (this << groupId << mode << t); - m_minstrelGroups[groupId].ratesTxTimeTable.push_back (std::make_pair (t, mode)); + m_minstrelGroups[groupId].ratesTxTimeTable.insert (std::make_pair (mode, t)); } WifiRemoteStation * diff --git a/src/wifi/model/minstrel-ht-wifi-manager.h b/src/wifi/model/minstrel-ht-wifi-manager.h index 077c9e014..c386b3f50 100644 --- a/src/wifi/model/minstrel-ht-wifi-manager.h +++ b/src/wifi/model/minstrel-ht-wifi-manager.h @@ -33,9 +33,8 @@ namespace ns3 { /** * Data structure to save transmission time calculations per rate. - * A vector of Time, WifiMode pairs. */ -typedef std::vector > TxTime; +typedef std::map TxTime; /** * Data structure to contain the information that defines a group.