NS_IMETHODIMP
nsUrlClassifierStreamUpdater::StreamFinished(nsresult status,
                                             uint32_t requestedDelay)
{
  // We are a service and may not be reset with Init between calls, so reset
  // mBeganStream manually.
  mBeganStream = false;
  LOG(("nsUrlClassifierStreamUpdater::StreamFinished [%x, %d]", status, requestedDelay));
  if (NS_FAILED(status) || mPendingUpdates.Length() == 0) {
    // We're done.
    LOG(("nsUrlClassifierStreamUpdater::Done [this=%p]", this));
    mDBService->FinishUpdate();
    return NS_OK;
  }

  // Wait the requested amount of time before starting a new stream.
  // This appears to be a duplicate timer (see bug 1110891)
  nsresult rv;
  mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
  if (NS_SUCCEEDED(rv)) {
    rv = mTimer->InitWithCallback(this, requestedDelay,
                                  nsITimer::TYPE_ONE_SHOT);
  }

  if (NS_FAILED(rv)) {
    NS_WARNING("Unable to initialize timer, fetching next safebrowsing item immediately");
    return FetchNext();
  }

  return NS_OK;
}
NS_IMETHODIMP
nsUrlClassifierStreamUpdater::StreamFinished(nsresult status,
        uint32_t requestedDelay)
{
    // We are a service and may not be reset with Init between calls, so reset
    // mBeganStream manually.
    mBeganStream = false;
    LOG(("nsUrlClassifierStreamUpdater::StreamFinished [%x, %d]", status, requestedDelay));
    if (NS_FAILED(status) || mPendingUpdates.Length() == 0) {
        // We're done.
        LOG(("nsUrlClassifierStreamUpdater::Done [this=%p]", this));
        mDBService->FinishUpdate();
        return NS_OK;
    }

    // This timer is for fetching indirect updates ("forwards") from any "u:" lines
    // that we encountered while processing the server response. It is NOT for
    // scheduling the next time we pull the list from the server. That's a different
    // timer in listmanager.js (see bug 1110891).
    nsresult rv;
    mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
    if (NS_SUCCEEDED(rv)) {
        rv = mTimer->InitWithCallback(this, requestedDelay,
                                      nsITimer::TYPE_ONE_SHOT);
    }

    if (NS_FAILED(rv)) {
        NS_WARNING("Unable to initialize timer, fetching next safebrowsing item immediately");
        return FetchNext();
    }

    return NS_OK;
}
NS_IMETHODIMP
nsUrlClassifierStreamUpdater::StreamFinished(nsresult status,
                                             uint32_t requestedDelay)
{
  LOG(("nsUrlClassifierStreamUpdater::StreamFinished [%x, %d]", status, requestedDelay));
  if (NS_FAILED(status) || mPendingUpdates.Length() == 0) {
    // We're done.
    mDBService->FinishUpdate();
    return NS_OK;
  }

  // Wait the requested amount of time before starting a new stream.
  nsresult rv;
  mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
  if (NS_SUCCEEDED(rv)) {
    rv = mTimer->InitWithCallback(this, requestedDelay,
                                  nsITimer::TYPE_ONE_SHOT);
  }

  if (NS_FAILED(rv)) {
    NS_WARNING("Unable to initialize timer, fetching next safebrowsing item immediately");
    return FetchNext();
  }

  return NS_OK;
}
int CBitRead::ReadOneBit(void) {
    int nRet = m_nInBufWord & 1;
    if (--m_nBitsAvail == 0) {
        FetchNext();
    } else {
        m_nInBufWord >>= 1;
    }
    return nRet;
}
///////////////////////////////////////////////////////////////////////////////
// nsITimerCallback implementation
NS_IMETHODIMP
nsUrlClassifierStreamUpdater::Notify(nsITimer *timer)
{
  LOG(("nsUrlClassifierStreamUpdater::Notify [%p]", this));

  mTimer = nullptr;

  // Start the update process up again.
  FetchNext();

  return NS_OK;
}
Beispiel #6
0
bool LL1Parser::Parse()
{
	bool retVal(true);
	string errorString;
	
	string test_2 = "";
	char space = ' ';
	while ( _currentToken != _tokens.end() && retVal == true && _Done == false )
	{
		list<Token> test;
		while (test.empty() != true)
		{
			test.pop_front();
		}
		
		if (_ruleStack.top().getString() == _currentToken->getString() || _ruleStack.top().getTokenType() == _currentToken->getTokenType()) // might need an OR top of the stack TYPE is the same as current token TYPE
		{
			cout << "Matched a token: " << _currentToken->getString() << endl;
			//cout << "Matched a character: " << _currentToken->getString() << endl;
			if (_currentToken->getString() == "$")
			{
				_Done = true;
			}
			else
			{
				FetchNext();
				_ruleStack.pop();
			}
			
		}
		else if (_ruleStack.top().getString() == " ")
		{
			cout << "lambda at: " << _currentToken->getString() << endl;
			//FetchNext();
			_ruleStack.pop();
		}
		else
		{
			test = GetRule(_ruleStack.top().getString(), _currentToken->getString());
			if (test.empty() != true)
			{
				_ruleStack.pop();
				//push entire "test" token list onto rule stack in reverse order
				list<Token> List = test;
				List.reverse();
				for (auto itr = List.begin(); itr != List.end(); ++itr)
				{
					Token Pushme(itr->getString(), itr->getTokenType());
					_ruleStack.push(Pushme);
					//test_2 = itr->getString();
					/*
					else
					{
						string s;
						s += *itr;
						Token s2(s, TokenType::UNDEFINED);
						_ruleStack.push(s2);
						cout << *itr << endl;
					}
					*/
				}
			}
			else
			{
				errorString += "Error when trying to find rule [ ";
				errorString += _ruleStack.top().getString();
				errorString += " , ";
				errorString += _currentToken->getString();
				errorString += " ]";
				_errors.push_back(errorString);
				retVal = false;
			}
		}
		//if the rule matching was successful 
		//_currentToken++;
	}
	return retVal;
}