1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-07-11 19:49:14 +00:00

Do not use GCC extension for anonymous unions

Anonymous struct inside anonymous unions are a GCC extension.
This patch uses named structs to stick to the C+11 standard.

Avoids a string of warnings on the Clang compiler.

Non functional change (same bench and same MD5 signature,
so compiled code is exactly the same as in current master)
This commit is contained in:
Stéphane Nicolet 2016-11-14 15:07:32 +01:00 committed by Marco Costalba
parent cddc8d4546
commit 7f4de0196b

View file

@ -125,65 +125,64 @@ struct PairsData {
int groupLen[TBPIECES+1]; // Number of pieces in a given group: KRKN -> (3, 1)
};
// Helper struct to avoid to manually define entry copy c'tor as we should
// because default one is not compatible with std::atomic_bool.
// Helper struct to avoid manually defining entry copy constructor as we
// should because the default one is not compatible with std::atomic_bool.
struct Atomic {
Atomic() = default;
Atomic(const Atomic& e) { ready = e.ready.load(); } // MSVC 2013 wants assignment within body
std::atomic_bool ready;
};
struct WDLEntry : public Atomic {
WDLEntry(const std::string& code);
~WDLEntry();
// We define types for the different parts of the WLDEntry and DTZEntry with
// corresponding specializations for pieces or pawns.
void* baseAddress;
uint64_t mapping;
Key key;
Key key2;
int pieceCount;
bool hasPawns;
bool hasUniquePieces;
union {
struct {
struct WLDEntryPiece {
PairsData* precomp;
} pieceTable[2]; // [wtm / btm]
};
struct {
struct WDLEntryPawn {
uint8_t pawnCount[2]; // [Lead color / other color]
struct {
PairsData* precomp;
} file[2][4]; // [wtm / btm][FILE_A..FILE_D]
} pawnTable;
};
WLDEntryPiece file[2][4]; // [wtm / btm][FILE_A..FILE_D]
};
struct DTZEntry : public Atomic {
DTZEntry(const WDLEntry& wdl);
~DTZEntry();
void* baseAddress;
uint64_t mapping;
Key key;
Key key2;
int pieceCount;
bool hasPawns;
bool hasUniquePieces;
union {
struct {
struct DTZEntryPiece {
PairsData* precomp;
uint16_t map_idx[4]; // WDLWin, WDLLoss, WDLCursedWin, WDLCursedLoss
uint8_t* map;
} pieceTable;
};
struct {
struct DTZEntryPawn {
uint8_t pawnCount[2];
struct {
PairsData* precomp;
uint16_t map_idx[4];
} file[4];
DTZEntryPiece file[4];
uint8_t* map;
} pawnTable;
};
struct TBEntry : public Atomic {
void* baseAddress;
uint64_t mapping;
Key key;
Key key2;
int pieceCount;
bool hasPawns;
bool hasUniquePieces;
};
// Now the main types: WDLEntry and DTZEntry
struct WDLEntry : public TBEntry {
WDLEntry(const std::string& code);
~WDLEntry();
union {
WLDEntryPiece pieceTable[2]; // [wtm / btm]
WDLEntryPawn pawnTable;
};
};
struct DTZEntry : public TBEntry {
DTZEntry(const WDLEntry& wdl);
~DTZEntry();
union {
DTZEntryPiece pieceTable;
DTZEntryPawn pawnTable;
};
};