/** Creates 2 groups: one from winners and one from loosers */ QList< Group* > SwissGroup::split( ) const { if ( _matches.count() < 2 ) { // nothing to split return QList< Group* >(); } QList< Group* > ret; PlayerList w = winners(), l = loosers(); // number of winnders and loosers can be non-even, when group consists, // for example, from 6 persons. We need to add 'bye' players if ( w.count() & 1 ) w << byePlayer; if ( l.count() & 1 ) l << byePlayer; qDebug() << "Winners:"; for ( int i = 0; i < w.count(); i ++ ) { qDebug() << w.at( i ).name(); } qDebug() << "Loosers:"; for ( int i = 0; i < l.count(); i ++ ) { qDebug() << l.at( i ).name(); } // winners group if ( !isPlayerListByed( w ) ) { ret << new SwissGroup( _fromPlace, _stage + 1, w ); } // loosers group if ( !isPlayerListByed( l ) ) { ret << new SwissGroup( _fromPlace + _players.count() / 2, _stage + 1, l ); } foreach( Group *g, ret ) { const TournAlgo *a = _tournData->algo(); Q_CHECK_PTR( a ); g->setTournData( _tournData ); g->setQualif( isQualif() ); dynamic_cast<SwissGroup*>(g)->permuteMatches( a->breakAlgo() ); // if there is at least one bye player, we should notify that // at least one game is fakely played. if ( g->const_players().contains( byePlayer ) ) { _tournData->groupChanged( g ); } } return ret; }
/** export results to json */ void Group::write( QJsonObject &json ) const { json["name"] = name(); json["stage"] = (int)stage(); json["type"] = type(); json["qualif"] = isQualif(); MatchList ml = _matches; QJsonArray mArray; foreach( Match m, ml ) { QJsonObject mObj; m.write( mObj ); mArray.append( mObj ); }