/* * 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; } }
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; }