int CTimerQueueOrderedList::PushNode_l(const CNode &aPushNode) { BOOL bFoundEqual = FALSE; BOOL bInserted = FALSE; NodesType::iterator iter = m_Nodes.begin(); while (iter != m_Nodes.end()) { if ((*iter).m_pEh == aPushNode.m_pEh) { CM_ASSERTE(!bFoundEqual); iter = m_Nodes.erase(iter); bFoundEqual = TRUE; if (bInserted || iter == m_Nodes.end()) break; } if (!bInserted && (*iter).m_tvExpired >= aPushNode.m_tvExpired) { iter = m_Nodes.insert(iter, aPushNode); ++iter; bInserted = TRUE; if (bFoundEqual) break; } ++iter; } if (iter != m_Nodes.end()) CM_ASSERTE(bInserted && bFoundEqual); if (!bInserted) m_Nodes.push_back(aPushNode); EnsureSorted(); return bFoundEqual ? 1 : 0; }
nsresult LookupCache::ConstructPrefixSet(AddPrefixArray& aAddPrefixes) { Telemetry::AutoTimer<Telemetry::URLCLASSIFIER_PS_CONSTRUCT_TIME> timer; nsTArray<uint32_t> array; array.SetCapacity(aAddPrefixes.Length()); for (uint32_t i = 0; i < aAddPrefixes.Length(); i++) { array.AppendElement(aAddPrefixes[i].PrefixHash().ToUint32()); } aAddPrefixes.Clear(); #ifdef DEBUG // PrefixSet requires sorted order EnsureSorted(&array); #endif // construct new one, replace old entries nsresult rv = mPrefixSet->SetPrefixes(array.Elements(), array.Length()); if (NS_FAILED(rv)) { goto error_bailout; } #ifdef DEBUG uint32_t size; size = mPrefixSet->SizeOfIncludingThis(moz_malloc_size_of); LOG(("SB tree done, size = %d bytes\n", size)); #endif mPrimed = true; return NS_OK; error_bailout: Telemetry::Accumulate(Telemetry::URLCLASSIFIER_PS_FAILURE, 1); return rv; }