Rewrite Book implementation

Let Book be derived directly from std::ifstream
and rewrite the functions accordingly.

Also simplify file reading by use of operator>>()

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2009-05-06 14:52:12 +02:00
parent afadc33fb4
commit a03b8074c8
2 changed files with 58 additions and 102 deletions

View File

@@ -52,31 +52,24 @@ struct BookEntry {
uint16_t sum;
};
class Book {
class Book : private std::ifstream {
public:
// Constructors
Book();
// Open and close book files
void open(const std::string& fName);
void close();
// Testing if a book is opened
bool is_open() const;
// The file name of the currently active book
const std::string file_name() const;
// Get a book move for a given position
Move get_move(const Position& pos) const;
Move get_move(const Position& pos);
private:
int find_key(uint64_t key) const;
void read_entry(BookEntry& entry, int n) const;
Book& operator>>(uint64_t& n) { n = read_integer(8); return *this; }
Book& operator>>(uint16_t& n) { n = (uint16_t)read_integer(2); return *this; }
void operator>>(BookEntry& e) { *this >> e.key >> e.move >> e.count >> e.n >> e.sum; }
uint64_t read_integer(int size);
void read_entry(BookEntry& e, int n);
int find_key(uint64_t key);
std::string fileName;
mutable std::ifstream bookFile;
int bookSize;
};