コード例 #1
0
ファイル: sbuscontroller.cpp プロジェクト: realbardia/silicon
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 );
    }
}
コード例 #2
0
ファイル: sbuscontroller.cpp プロジェクト: realbardia/silicon
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;
            }
        }
    }

}