เครื่องอ่านที่ไม่ได้รวบรวมและสตรีมมิ่งที่รวดเร็วสำหรับเกมหมากรุกในสัญกรณ์ PGN เป็นห้องสมุดสนิม
Reader
แยกวิเคราะห์เกมและวิธีการโทรของผู้ใช้ที่ให้ Visitor
การใช้ผู้เยี่ยมชมที่กำหนดเองช่วยให้มีความยืดหยุ่นสูงสุด:
ผู้เข้าชมที่นับจำนวนการเคลื่อนไหวที่ถูกต้องทางไวยากรณ์ในการฉีดของแต่ละเกม
use std :: io ;
use pgn_reader :: { Visitor , Skip , BufferedReader , SanPlus } ;
struct MoveCounter {
moves : usize ,
}
impl MoveCounter {
fn new ( ) -> MoveCounter {
MoveCounter { moves : 0 }
}
}
impl Visitor for MoveCounter {
type Result = usize ;
fn begin_game ( & mut self ) {
self . moves = 0 ;
}
fn san ( & mut self , _san_plus : SanPlus ) {
self . moves += 1 ;
}
fn begin_variation ( & mut self ) -> Skip {
Skip ( true ) // stay in the mainline
}
fn end_game ( & mut self ) -> Self :: Result {
self . moves
}
}
fn main ( ) -> io :: Result < ( ) > {
let pgn = b"1. e4 e5 2. Nf3 (2. f4)
{ game paused due to bad weather }
2... Nf6 *" ;
let mut reader = BufferedReader :: new_cursor ( & pgn [ .. ] ) ;
let mut counter = MoveCounter :: new ( ) ;
let moves = reader . read_game ( & mut counter ) ? ;
assert_eq ! ( moves, Some ( 4 ) ) ;
Ok ( ( ) )
}
อ่านเอกสาร
API อาจทำความสะอาดและประสิทธิภาพอาจถดถอยเล็กน้อยเมื่อเทียบกับวิธีการ mmap
จากรุ่นเก่า (#12) สิ่งนี้ต้องการความสนใจ จนกว่าฉันจะไปถึงมันฉันจะทำการบำรุงรักษาเพียงเล็กน้อยตาม shakmaty
ตามที่ต้องการ
อย่างไรก็ตามมันอาจจะยังคงเป็นหนึ่งในตัวแยกวิเคราะห์ PGN ที่เร็วที่สุด
เรียกใช้กับ lichess_db_standard_rated_2018-10.pgn (24,784,600 เกม, 52,750 MB ไม่บีบอัด) บน SSD (Samsung 850), Intel i7-6850K CPU @ 3.60 GHz:
เกณฑ์มาตรฐาน | เวลา | ปริมาณงาน |
---|---|---|
ตัวอย่าง/stats.rs | 111.9s | 471.4 MB/s |
ตัวอย่าง/ตรวจสอบความถูกต้อง | 237.1s | 222.5 MB/s |
ตัวอย่าง/parallel_validate.rs | 148.6s | 355.0 MB/s |
scoutfish make | 269.2s | 196.0 MB/s |
grep -F "[Event " -c | 39.2s | 1345.7 MB/s |
examples/stats.rs
พร้อมไฟล์บีบอัด:
การบีบอัด | ขนาดไฟล์ | เวลา | ปริมาณงาน |
---|---|---|---|
ไม่มี | 52,750 MB | 111.9s | 471.4 MB/s |
BZ2 | 6,226 MB | 1263.1s | 4.9 MB/s |
XZ | 6,989 MB | 495.9s | 14.1 MB/s |
GZ | 10,627 MB | 335.7s | 31.7 MB/s |
LZ4 | 16,428 MB | 180.0s | 91.3 MB/s |
PGN-Reader ได้รับอนุญาตภายใต้ GPL-3.0 (หรือเวอร์ชันใหม่ ๆ ที่ตัวเลือกของคุณ) ดูไฟล์คัดลอกสำหรับข้อความใบอนุญาตเต็มรูปแบบ