From 55481cd69d21b31bfdcc6e33853ea475ed16f622 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 12 Dec 2014 22:56:30 +0100 Subject: [PATCH] Store and handle the PGN start position. --- binloader.cpp | 11 ++++++++++- binlookup.cpp | 5 +++-- binmerger.cpp | 2 ++ count.proto | 4 +++- partition-pgn.sh => find-pgn-split-point.sh | 0 opening-stats.pl | 2 +- www/opening-stats.pl | 2 +- 7 files changed, 20 insertions(+), 6 deletions(-) rename partition-pgn.sh => find-pgn-split-point.sh (100%) diff --git a/binloader.cpp b/binloader.cpp index 6472f10..5bf2502 100644 --- a/binloader.cpp +++ b/binloader.cpp @@ -25,6 +25,7 @@ struct Element { Result result; int opening_num, white_elo, black_elo; time_t timestamp; + long start_position; bool operator< (const Element& other) const { return bpfen < other.bpfen; @@ -68,6 +69,7 @@ int main(int argc, char **argv) int opening_num, white_elo, black_elo; time_t timestamp; + long start_position; if (fread(&white_elo, sizeof(white_elo), 1, fp) != 1) { perror("fread()"); //exit(1); @@ -88,6 +90,12 @@ int main(int argc, char **argv) //exit(1); break; } + if (fread(&start_position, sizeof(start_position), 1, fp) != 1) { + perror("fread()"); + //exit(1); + break; + } + l = getc(fp); if (l == -1) { @@ -102,7 +110,7 @@ int main(int argc, char **argv) } int bucket = hash_key_to_bucket(bpfen.data(), bpfen.size(), num_buckets); - elems[bucket].emplace_back(Element {std::move(bpfen), std::move(move), Result(r), opening_num, white_elo, black_elo, timestamp}); + elems[bucket].emplace_back(Element {std::move(bpfen), std::move(move), Result(r), opening_num, white_elo, black_elo, timestamp, start_position}); ++num_elems; } fclose(fp); @@ -145,6 +153,7 @@ int main(int argc, char **argv) c.set_first_timestamp(e.timestamp); } c.set_opening_num(e.opening_num); + c.set_pgn_start_position(e.start_position); } if (!moves.count(e.move)) { moves.insert(e.move); diff --git a/binlookup.cpp b/binlookup.cpp index 958a7bf..179515b 100644 --- a/binlookup.cpp +++ b/binlookup.cpp @@ -61,11 +61,12 @@ int main(int argc, char **argv) while (mtbl_iter_next(it, &key, &len_key, &val, &len_val)) { Count c; c.ParseFromArray(val, len_val); - printf("%d %d %d %u %f %f %d %ld", + printf("%d %d %d %u %f %f %d %ld %ld", c.white(), c.draw(), c.black(), c.opening_num(), double(c.sum_white_elo()) / c.num_elo(), double(c.sum_black_elo()) / c.num_elo(), - c.num_elo(), c.first_timestamp()); + c.num_elo(), c.first_timestamp(), + c.pgn_start_position()); for (int j = 0; j < c.move_size(); ++j) { printf(" %s", c.move(j).c_str()); } diff --git a/binmerger.cpp b/binmerger.cpp index 9bd969e..7e34159 100644 --- a/binmerger.cpp +++ b/binmerger.cpp @@ -32,11 +32,13 @@ void merge_count(void* userdata, if (c0.has_first_timestamp()) { c.set_first_timestamp(c0.first_timestamp()); } + c.set_pgn_start_position(c0.pgn_start_position()); } else { c.set_opening_num(c1.opening_num()); if (c1.has_first_timestamp()) { c.set_first_timestamp(c1.first_timestamp()); } + c.set_pgn_start_position(c1.pgn_start_position()); } // Merge the moves, with deduplication. diff --git a/count.proto b/count.proto index 7712f97..9ee2859 100644 --- a/count.proto +++ b/count.proto @@ -12,8 +12,10 @@ message Count { optional int64 sum_black_elo = 6; optional int32 num_elo = 7; - // First timestamp this position/move was seen. + // First timestamp this position/move was seen, and the byte offset + // into the PGN file for that game. optional int64 first_timestamp = 8 [default=32503680000]; + optional int64 pgn_start_position = 10; // Moves seen from this position. repeated string move = 9; diff --git a/partition-pgn.sh b/find-pgn-split-point.sh similarity index 100% rename from partition-pgn.sh rename to find-pgn-split-point.sh diff --git a/opening-stats.pl b/opening-stats.pl index 324b158..a90ca0b 100755 --- a/opening-stats.pl +++ b/opening-stats.pl @@ -21,7 +21,7 @@ my $line = <$chld_out>; print $line; chomp $line; -my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, @moves) = split / /, $line; +my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_start_position, @moves) = split / /, $line; # Explore one move out. for my $move (@moves) { diff --git a/www/opening-stats.pl b/www/opening-stats.pl index f9e8548..3a02cf9 100755 --- a/www/opening-stats.pl +++ b/www/opening-stats.pl @@ -21,7 +21,7 @@ my $hex = unpack('H*', $pos->bitpacked_fen); print $chld_in $hex, "\n"; chomp (my $line = <$chld_out>); -my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, @moves) = split / /, $line; +my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_start_position, @moves) = split / /, $line; my $opening = $openings{$opening_num} // 'A00: Start position'; # Explore one move out. -- 2.39.2