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