]> git.sesse.net Git - ccbs/blobdiff - bigscreen/groupscreen.cpp
Read max score for all players in one shot as well, with a new query and an index...
[ccbs] / bigscreen / groupscreen.cpp
index 6d38c4cca58e45102a459ddb982a749d24c2deae..7b0175a62b8a617b5f15c00e6c8dd73b67f5cfef 100644 (file)
@@ -1,10 +1,11 @@
 #include <cstdio>
 #include <algorithm>
 #include <cstdio>
 #include <algorithm>
+#include <map>
 
 #include "groupscreen.h"
 #include "fetch_group.h"
 
 #include "groupscreen.h"
 #include "fetch_group.h"
-#include "fetch_max_score_for_song.h"
-#include "fetch_max_score_for_player.h"
+#include "fetch_max_score_for_songs.h"
+#include "fetch_max_score_for_players.h"
 #include "fetch_needs_update.h"
 #include "fetch_highscore.h"
 #include "fonts.h"
 #include "fetch_needs_update.h"
 #include "fetch_highscore.h"
 #include "fonts.h"
@@ -40,6 +41,14 @@ void GroupScreen::draw(unsigned char *buf)
        
        scores_changed.reset_flag();
 
        
        scores_changed.reset_flag();
 
+       /*
+        * We'll probably need some values from here later on (although not all), just fetch them
+        * all while we're at it.
+        */
+       std::map<unsigned, unsigned> song_scores, player_scores;
+       conn.perform(FetchMaxScoreForSongs(tournament, &song_scores));
+       conn.perform(FetchMaxScoreForPlayers(tournament, round, &player_scores));
+       
        Group group;
        conn.perform(FetchGroup(tournament, round, parallel, &group));
        gettimeofday(&last_updated, NULL);
        Group group;
        conn.perform(FetchGroup(tournament, round, parallel, &group));
        gettimeofday(&last_updated, NULL);
@@ -203,8 +212,6 @@ void GroupScreen::draw(unsigned char *buf)
         * matter of sorting; the best attainable rank for player X is obtained if 
         * X gets max score and all others get min score, the worst attainable rank
         * is obtained if X gets min score and all others get max score.
         * matter of sorting; the best attainable rank for player X is obtained if 
         * X gets max score and all others get min score, the worst attainable rank
         * is obtained if X gets min score and all others get max score.
-        *
-        * This is a bit SQL-heavy, but heck...
         */
        std::vector<unsigned> max_score, min_score;
        for (std::vector<Player>::const_iterator i = group.players.begin(); i != group.players.end(); ++i) {
         */
        std::vector<unsigned> max_score, min_score;
        for (std::vector<Player>::const_iterator i = group.players.begin(); i != group.players.end(); ++i) {
@@ -218,9 +225,9 @@ void GroupScreen::draw(unsigned char *buf)
                                unsigned max_score_this_song;
                                if (j->song.id != -1) {
                                        // random song, or we know what song the player picked
                                unsigned max_score_this_song;
                                if (j->song.id != -1) {
                                        // random song, or we know what song the player picked
-                                       conn.perform(FetchMaxScoreForSong(tournament, j->song.id, &max_score_this_song));
+                                       max_score_this_song = song_scores[j->song.id];
                                } else {
                                } else {
-                                       conn.perform(FetchMaxScoreForPlayer(tournament, i->id, round, &max_score_this_song));
+                                       max_score_this_song = player_scores[i->id];
                                }
                                max_score_tp += max_score_this_song;
                        }
                                }
                                max_score_tp += max_score_this_song;
                        }
@@ -350,9 +357,9 @@ void GroupScreen::draw(unsigned char *buf)
                        unsigned max_score_this_song;
                        if (next_song->song.id != -1) {
                                // random song, or we know what song the player picked
                        unsigned max_score_this_song;
                        if (next_song->song.id != -1) {
                                // random song, or we know what song the player picked
-                               conn.perform(FetchMaxScoreForSong(tournament, next_song->song.id, &max_score_this_song));
+                               max_score_this_song = song_scores[next_song->song.id];
                        } else {
                        } else {
-                               conn.perform(FetchMaxScoreForPlayer(tournament, next_player->id, round, &max_score_this_song));
+                               max_score_this_song = player_scores[next_player->id];
                        }
 
                        unsigned y = 520;
                        }
 
                        unsigned y = 520;