Exemplo n.º 1
0
/*
 * Search all supported terminals to see if the selected one is valid
 */
bool SettingsManager::isValidTerminalSelected()
{
  QString userTerminal = getTerminal();
  if (userTerminal == ctn_AUTOMATIC) return true;

  if (userTerminal == ctn_XFCE_TERMINAL ||
      userTerminal == ctn_LXDE_TERMINAL ||
      userTerminal == ctn_LXQT_TERMINAL ||
      userTerminal == ctn_KDE_TERMINAL ||
      userTerminal == ctn_TDE_TERMINAL ||
      userTerminal == ctn_CINNAMON_TERMINAL ||
      userTerminal == ctn_MATE_TERMINAL ||
      userTerminal == ctn_RXVT_TERMINAL ||
      userTerminal == ctn_XTERM)
  {
    if (UnixCommand::hasTheExecutable(userTerminal))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  else
  {
    return false;
  }
}
Exemplo n.º 2
0
QString ReadableNumber::makeReadable(long n) const
{
    QString qs;

    if (n < 0)
    {
        qs += "MINUS ";
        n = -n;
    }

    auto s = getTerminal(n);
    if (s)
    {
        qs += s;
    }
    else if (n < 100)
    {
        auto ones = getTerminal(n % 10);
        auto tens = getTerminal(n - (n % 10));

        qs += QString(tens) + " " + QString(ones);
    }
    else if (n < 1000)
    {
        qs += makeReadable(n / 100) + " HUNDRED";

        auto remainder = n % 100;
        if (0 != remainder)
        {
            qs += " AND " + makeReadable(remainder);
        }
    }
    else if (n < 1000000)
    {
        qs += makeReadable(n / 1000) + " THOUSAND";

        auto remainder = n % 1000;
        if (0 != remainder)
        {
            qs += " ";

            auto hundreds = remainder / 100;
            if (0 == hundreds)
            {
                qs += "AND ";
            }

            qs += makeReadable(remainder);
        }
    }
    else if (n < 1000000000000)
    {
        qs += makeReadable(n / 1000000) + " MILLION";

        auto remainder = n % 1000000;
        if (0 != remainder)
        {
            qs += " ";

            qs += makeReadable(remainder);
        }
    }
    else if (1000000000000 == n)
    {
        qs += "ONE BILLION";
    }
    else
    {
        throw std::runtime_error("Number is absolutely too large");
    }

    return qs;
}
bool VisitorTerminalBehavior::StickNonPaxDestProcsOverload( const ElapsedTime& _curTime )
{
	m_pPerson->regetAttatchedNopax();
	ProcessorDistribution* pNextProcDistribution = m_pProcessor->getNextDestinations ( m_pPerson->getType(), m_nInGateDetailMode );
	if(pNextProcDistribution ==NULL ) return false;
	CSinglePaxTypeFlow* pProcessSingleFlow=NULL;
	ProcessorID* pProcessCurID=NULL;

	pNextProcDistribution->getDestinationGroup( RANDOM);


	ASSERT( pNextProcDistribution!=NULL);

	CFlowChannel* pInChannel=NULL;
	ProcessorArray aryOverloadDestProcs;
	ProcessorArray aryDestProcs;

	//defined for function FindDestProcessors,
	//if can not find the destination processor for 1:1 reason
	//or 1*1 reason, remember it.
	//throw exception after test every processor in distribution.
	bool bOneToOneReason = false;
	bool bOneXOneReason = false;

	do
	{
		pInChannel=NULL;
		if( static_cast<CProcessorDistributionWithPipe*>(pNextProcDistribution)->GetOneXOneState()==ChannelEnd)
		{
			pInChannel=m_FlowChannelList.PopChannel();
			m_FlowChannelList.PushChannel(pInChannel);//restore channel info for next time to use.
		}
		m_pProcessor->FindDestProcessors( m_pPerson, pNextProcDistribution, 
			pInChannel, _curTime, pProcessSingleFlow, pProcessCurID,
			aryDestProcs, bOneToOneReason, bOneXOneReason);
		Processor::PruneInvalidDestProcs(getTerminal(), m_pPerson, &aryDestProcs, NULL, &aryOverloadDestProcs );

		if(aryDestProcs.getCount()>0 && noExceptions (&aryDestProcs) && IfBaggageProcAllowed( &aryDestProcs, pNextProcDistribution ))
			return false;


	}while( pNextProcDistribution->getDestinationGroup( SEQUENTIAL) ) ;

	//check zeropercent dest group.
	if(aryDestProcs.getCount()==0)
	{
		while(pNextProcDistribution->getZeropercentDestGroup())
		{
			pInChannel=NULL;
			if( static_cast<CProcessorDistributionWithPipe*>(pNextProcDistribution)->GetOneXOneState()==ChannelEnd)
			{	
				pInChannel=m_FlowChannelList.PopChannel();
				m_FlowChannelList.PushChannel(pInChannel);//restore channel info for next time to use.
			}
			m_pProcessor->FindDestProcessors( m_pPerson, pNextProcDistribution, 
				pInChannel, _curTime, pProcessSingleFlow, pProcessCurID, 
				aryDestProcs, bOneToOneReason, bOneXOneReason);
			ASSERT( aryDestProcs.getCount()>0);

			Processor::PruneInvalidDestProcs(getTerminal(), m_pPerson, &aryDestProcs, NULL, &aryOverloadDestProcs );

			if(aryDestProcs.getCount()>0 && noExceptions (&aryDestProcs) && IfBaggageProcAllowed( &aryDestProcs, pNextProcDistribution ))
				return false;

		}
	}

	if(bOneToOneReason)
	{
		CString str = "Can't find processor to correspond to "+ m_pProcessor->getID()->GetIDString()+ " by 1:1";
		throw new ARCDestProcessorUnavailableError( getPersonErrorMsg(), 
			m_pProcessor->getID()->GetIDString(), str, _curTime.PrintDateTime());
	}
	if(bOneXOneReason)
	{
		CString str = "Cannot find processor to correspond to "+ pInChannel->GetInChannelProc()->getID()->GetIDString()+ " by 1:x:1";
		throw new ARCDestProcessorUnavailableError( getPersonErrorMsg(),
			m_pProcessor->getID()->GetIDString(), str, _curTime.PrintDateTime());
	}

	//if(aryDestProcs.getCount()>0) return false;//not need to stick.
	if(aryOverloadDestProcs.getCount()>0)
	{
		Processor* pAnOverloadProc=NULL;
		WaitingPair waitPair;
		Passenger* pOwner = GetOwner();
		if (pOwner)
		{
			waitPair.first= pOwner->getID();
			waitPair.second =m_pProcessor->getIndex();

			for( int i=0; i<aryOverloadDestProcs.getCount(); i++)
			{
				pAnOverloadProc= aryOverloadDestProcs.getItem( i );
				pAnOverloadProc->AddWaitingPair( waitPair );	// add pax id and processor idx to the dest processor.
			}
			return true;
		}
		
	}
	return false;

}