Пример #1
0
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;
}
Пример #2
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;
}