#include "Bestenliste.h" // Inhalt der Bestenliste Klasse aus Bestenliste.h // Konstruktor Bestenliste::Bestenliste() { spielerPunkte = new Array< int >(); spielerNummern = new Array< int >(); teamPunkte = new Array< int >(); teamMaxPunkte = new Array< int >(); teamNummern = new Array< int >(); spielerAnzahl = 0; teamAnzahl = 0; ref = 1; } // Destruktor Bestenliste::~Bestenliste() { spielerPunkte->release(); spielerNummern->release(); teamPunkte->release(); teamMaxPunkte->release(); teamNummern->release(); } // nicht constant void Bestenliste::setTeamMaxPunkte( int team, int mP ) { int i = -1; for( int j = 0; j < teamAnzahl; j++ ) { if( teamNummern->hat( j ) && teamNummern->get( j ) == team ) { i = j; break; } } if( i < 0 ) { i = teamAnzahl; teamNummern->add( team, teamAnzahl ); teamPunkte->add( 0, teamAnzahl ); teamMaxPunkte->add( 0, teamAnzahl ); teamAnzahl++; } teamMaxPunkte->set( mP, i ); } void Bestenliste::setTeamPunkte( int team, int p ) { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) { teamPunkte->set( p, i ); return; } } } void Bestenliste::setSpielerPunkte( int spieler, int p ) { int i = -1; for( int j = 0; j < spielerAnzahl; j++ ) { if( spielerNummern->hat( j ) && spielerNummern->get( j ) == spieler ) { i = j; break; } } if( i < 0 ) { i = spielerAnzahl; spielerNummern->add( spieler, spielerAnzahl ); spielerPunkte->add( 0, spielerAnzahl ); spielerAnzahl++; } spielerPunkte->set( p, i ); } void Bestenliste::addTeamPunkt( int team, bool plus ) { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) { int jetzt = teamPunkte->hat( i ) ? teamPunkte->get( i ) : 0; if( plus ) jetzt++; else jetzt--; if( jetzt < 0 ) jetzt = 0; teamPunkte->set( jetzt, i ); return; } } } void Bestenliste::addSpielerPunkt( int spieler, bool plus ) { for( int i = 0; i < spielerAnzahl; i++ ) { if( spielerNummern->hat( i ) && spielerNummern->get( i ) == spieler ) { if( plus ) spielerPunkte->set( ( spielerPunkte->hat( i ) ? spielerPunkte->get( i ) : 0 ) + 1, i ); else spielerPunkte->set( ( spielerPunkte->hat( i ) ? spielerPunkte->get( i ) : 0 ) - 1, i ); return; } } } // constant bool Bestenliste::istTeamAmLeben( int team ) const { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) return teamPunkte->hat( i ) && teamPunkte->get( i ) != 0; } return 0; } bool Bestenliste::hatTeamGewonnen( int team ) const { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) return ( ( teamPunkte->hat( i ) && teamMaxPunkte->hat( i ) ) ? ( teamPunkte->get( i ) >= teamMaxPunkte->get( i ) ) : 0 ); } return 0; } int Bestenliste::getTeamPunkte( int team ) const { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) return teamPunkte->hat( i ) ? teamPunkte->get( i ) : 0; } return 0; } int Bestenliste::getTeamMaxPunkte( int team ) const { for( int i = 0; i < teamAnzahl; i++ ) { if( teamNummern->hat( i ) && teamNummern->get( i ) == team ) return teamMaxPunkte->hat( i ) ? teamMaxPunkte->get( i ) : 0; } return 0; } // Reference Counting Bestenliste *Bestenliste::getThis() { ref++; return this; } Bestenliste *Bestenliste::release() { ref--; if( !ref ) delete this; return 0; }