24 #ifndef CODEC_NATIVE_H 25 #define CODEC_NATIVE_H 54 const byte* srcData,
size_t dataLen)
override {
56 errorT err = addGameHelper(
57 &ie, srcData, dataLen,
66 return derived()->dyn_addIndexEntry(ie);
70 std::pair<errorT, IndexEntry> ie = addGameHelper(game);
74 return derived()->dyn_addIndexEntry(ie.second);
81 std::pair<errorT, IndexEntry> ie = addGameHelper(game);
85 return derived()->dyn_saveIndexEntry(ie.second, replaced);
89 return derived()->dyn_saveIndexEntry(ie, replaced);
93 return derived()->dyn_addName(nt, name);
97 std::pair<errorT, IndexEntry> addGameHelper(
Game*
game) {
98 std::pair<errorT, IndexEntry> res;
100 res.first = game->
Encode(&bbuf_, &res.second);
101 if (res.first ==
OK) {
102 res.first = addGameHelper(&res.second, bbuf_.
getData(),
111 const char* white,
const char* black,
112 const char* event,
const char* site,
114 auto id = derived()->dyn_addName(
NAME_PLAYER, white);
126 id = derived()->dyn_addName(
NAME_EVENT, event);
131 id = derived()->dyn_addName(
NAME_SITE, site);
136 id = derived()->dyn_addName(
NAME_ROUND, round);
141 auto offset = derived()->dyn_addGameData(srcData, dataLen);
142 if (offset.first ==
OK) {
149 Derived* derived() {
return static_cast<Derived*
>(
this); }
void SetBlack(idNumberT id)
std::pair< errorT, idNumberT > addName(nameT nt, const char *name) override
Adds a name (player, event, site or round) to the database.
idNumberT GetSite() const
errorT addGame(const IndexEntry *srcIe, const NameBase *srcNb, const byte *srcData, size_t dataLen) override
Add a game to the database.
void AddElo(idNumberT id, eloT elo)
A NameBase stores the max ELO for each player.
const errorT ERROR_BadArg
idNumberT GetEvent() const
void SetWhite(idNumberT id)
gamenumT GetNumGames() const
Header getter functions.
Defines the ICodecDatabase interface, which encapsulates the data representation of databases...
void SetRound(idNumberT id)
errorT saveIndexEntry(const IndexEntry &ie, gamenumT replaced) override
Replaces a game's IndexEntry (which contains the header data of a game).
const char * GetName(nameT nt, idNumberT id) const
Retrieve a name.
This class stores the database's names (players, events, sites and rounds).
This interface separates the logic of a database from its representation.
errorT addGame(Game *game) override
Add a game to the database.
errorT saveGame(Game *game, gamenumT replaced) override
Replaces a game in the database.
This class stores the pointers to the Index and NameBase objects used by a native codec...
idNumberT GetRound() const
idNumberT GetWhite() const
void SetSite(idNumberT id)
const char * GetBlackStr() const
void SetLength(size_t length)
const char * GetWhiteStr() const
idNumberT GetBlack() const
errorT Encode(ByteBuffer *buf, IndexEntry *ie)
const char * GetSiteStr() const
void SetEvent(idNumberT id)
const char * GetEventStr() const
const char * GetRoundStr() const
void SetOffset(uint64_t offset)