diff --git a/src/wifi/model/interference-helper.cc b/src/wifi/model/interference-helper.cc --- a/src/wifi/model/interference-helper.cc +++ b/src/wifi/model/interference-helper.cc @@ -203,20 +203,26 @@ InterferenceHelper::AppendEvent (Ptr event) { NS_LOG_FUNCTION (this); - double previousPowerStart = 0; - double previousPowerEnd = 0; - previousPowerStart = GetPreviousPosition (event->GetStartTime ())->second.GetPower (); - previousPowerEnd = GetPreviousPosition (event->GetEndTime ())->second.GetPower (); + + auto start = m_niChanges.upper_bound (event->GetStartTime ()); + auto end = m_niChanges.upper_bound (event->GetEndTime ()); + + auto startPrev = std::prev(start); + auto endPrev = std::prev(end); + + double previousPowerStart = startPrev->second.GetPower (); + double previousPowerEnd = endPrev->second.GetPower (); if (!m_rxing) { m_firstPower = previousPowerStart; // Always leave the first zero power noise event in the list - m_niChanges.erase (++(m_niChanges.begin ()), - GetNextPosition (event->GetStartTime ())); + m_niChanges.erase (std::next(m_niChanges.begin ()), start); } - auto first = AddNiChangeEvent (event->GetStartTime (), NiChange (previousPowerStart, event)); - auto last = AddNiChangeEvent (event->GetEndTime (), NiChange (previousPowerEnd, event)); + + auto first = m_niChanges.emplace_hint (start, event->GetStartTime (), NiChange(previousPowerStart, event)); + auto last = m_niChanges.emplace_hint (end, event->GetEndTime (), NiChange(previousPowerEnd, event)); + for (auto i = first; i != last; ++i) { i->second.AddPower (event->GetRxPowerW ()); @@ -810,7 +816,7 @@ InterferenceHelper::NiChanges::iterator InterferenceHelper::AddNiChangeEvent (Time moment, NiChange change) { - return m_niChanges.insert (GetNextPosition (moment), std::make_pair (moment, change)); + return m_niChanges.emplace (moment, change); } void