fix
This commit is contained in:
@ -5,7 +5,8 @@ include_directories(include)
|
||||
file(GLOB SOURCES "src/chess/*.c")
|
||||
file(GLOB LIB_SOURCES "lib/chess/*.c")
|
||||
|
||||
add_executable(genMoveConsts src/generateCode/moveConsts.c ${LIB_SOURCES})
|
||||
add_executable(genMoveConsts src/generateCode/moveConsts.c lib/chess/bitboard.c
|
||||
lib/chess/print.c)
|
||||
add_custom_command(
|
||||
OUTPUT moveConsts.h # Output file from code generation
|
||||
COMMAND genMoveConsts > include/chess/generated/moveConsts.h
|
||||
|
||||
@ -25,7 +25,7 @@ static uint_least8_t getDirectionOffset(uint_least8_t field, uint_least8_t direc
|
||||
return DIRECTION_OFFSET[field * DIRECTION_LENGTH + direction];
|
||||
}
|
||||
|
||||
static uint_least8_t getMagicSize(const struct magic_t magic) {
|
||||
static size_t getMagicSize(const struct magic_t magic) {
|
||||
return 1 << (64 - magic.shift);
|
||||
}
|
||||
|
||||
@ -37,15 +37,21 @@ static size_t getTotalMagicSize(const struct magic_t *magic) {
|
||||
return size;
|
||||
}
|
||||
|
||||
uint_least64_t *overflowPtr;
|
||||
|
||||
static void initMagicHelper(uint_least64_t *attackTable, struct magic_t *magic,
|
||||
const uint_least8_t *direction, const uint_least8_t directionLength) {
|
||||
for(uint_least8_t field = 0; field < TOTAL_BOARD_SIZE; ++field, ++magic) {
|
||||
attackTable += getMagicSize(*magic);
|
||||
magic->attackTable = attackTable;
|
||||
attackTable += getMagicSize(*magic);
|
||||
uint_least64_t pieceArangement = 0;
|
||||
do { // https://stackoverflow.com/questions/7277554/what-is-a-good-way-to-iterate-a-number-through-all-the-possible-values-of-a-mask
|
||||
const uint_least64_t attackMask = slidingMovementMask(direction, directionLength, field, pieceArangement);
|
||||
*getMagicAttackPtr(pieceArangement, *magic) = attackMask;
|
||||
uint_least64_t *ptr = getMagicAttackPtr(pieceArangement, *magic);
|
||||
if(ptr >= overflowPtr) {
|
||||
printf("overflow\n");
|
||||
}
|
||||
*ptr = attackMask;
|
||||
pieceArangement = (pieceArangement - magic->mask) & magic->mask;
|
||||
} while(pieceArangement != 0);
|
||||
}
|
||||
@ -55,6 +61,7 @@ void initMagicTable() {
|
||||
const size_t rookMagicSize = getTotalMagicSize(rookMagic);
|
||||
const size_t size = rookMagicSize + getTotalMagicSize(bishopMagic);
|
||||
uint_least64_t *attackTable = malloc(size * sizeof *attackTable);
|
||||
overflowPtr = attackTable + size;
|
||||
if(attackTable == NULL) {
|
||||
perror("failed to allocate memory: ");
|
||||
exit(1);
|
||||
|
||||
Reference in New Issue
Block a user