void SBusController::finish() { QStringList keys; keys = queued_buses->keys(); for( int i=0 ; i<keys.count() ; i++ ) { const QString & bus = keys.at(i); if( !queued_buses->contains(bus) ) continue; QQueue<SBusController*> *queue = queued_buses->value(bus); if( queue == 0 ) continue; for( int j=0 ; j<queue->count() ; j++ ) if( queue->at(j) == this ) { queue->removeAt( j ); j--; } if( queued_buses->value(bus)->isEmpty() ) delete queued_buses->take( bus ); } keys = active_buses->keys(); for( int i=0 ; i<keys.count() ; i++ ) { const QString & bus = keys.at(i); if( !active_buses->contains(bus) ) continue; if( active_buses->value(bus) == this ) finish( bus ); } }
void SBusController::setPassUpAndWait( bool state ) { if( p->pass_up_and_wait == state ) return; p->pass_up_and_wait = state; if( state ) { /*! ----------------- Find Active Buses ---------------- */ QStringList keys = active_buses->keys(); for( int i=0 ; i<keys.count() ; i++ ) { const QString & bus = keys.at(i); if( !active_buses->contains(bus) ) continue; SBusController *controller = active_buses->value( bus ); if( controller == this ) { finish( bus ); getAccess( bus ); } } } else { /*! ----------------- Find Disabled Buses ---------------- */ QStringList keys = queued_buses->keys(); for( int i=0 ; i<keys.count() ; i++ ) { const QString & bus = keys.at(i); if( active_buses->contains(bus) ) continue; /*! ---------- Find First Deactived Processes to Active --------- */ if( !queued_buses->contains(bus) ) continue; QQueue<SBusController*> *queue = queued_buses->value(bus); if( queue == 0 ) continue; for( int j=0 ; j<queue->count() ; j++ ) { if( queue->at(j) != this ) continue; queue->removeAt( j ); if( queue->isEmpty() ) delete queued_buses->take( bus ); active_buses->insert( bus , this ); emit go(); break; } } } }