rename typedefs - temp commit for computer change

This commit is contained in:
2024-02-08 09:50:14 +01:00
parent 1929d4bb1f
commit d6f2497bb0
13 changed files with 141 additions and 138 deletions

3
.gitignore vendored
View File

@@ -4,6 +4,9 @@ vgcore.*
*.i *.i
*.old *.old
*.save *.save
/GPATH
/GRTAGS
/GTAGS
/.ccls-root /.ccls-root
/.ccls-cache/ /.ccls-cache/
/obj/ /obj/

2
brlib

Submodule brlib updated: 8cb08dacb3...0e9b25dd68

View File

@@ -20,7 +20,8 @@
#include "bitops.h" #include "bitops.h"
typedef enum { typedef enum {
A1, B1, C1, D1, E1, F1, G1, H1, _SSQUARE_ = -1, /* force signed enum */
A1 = 0, B1, C1, D1, E1, F1, G1, H1,
A2, B2, C2, D2, E2, F2, G2, H2, A2, B2, C2, D2, E2, F2, G2, H2,
A3, B3, C3, D3, E3, F3, G3, H3, A3, B3, C3, D3, E3, F3, G3, H3,
A4, B4, C4, D4, E4, F4, G4, H4, A4, B4, C4, D4, E4, F4, G4, H4,
@@ -30,17 +31,19 @@ typedef enum {
A8, B8, C8, D8, E8, F8, G8, H8, A8, B8, C8, D8, E8, F8, G8, H8,
SQUARE_MAX = 64, SQUARE_MAX = 64,
SQUARE_NONE = 64 SQUARE_NONE = 64
} square; } square_t;
typedef enum { typedef enum {
FILE_A, FILE_B, FILE_C, FILE_D, FILE_E, FILE_F, FILE_G, FILE_H, _SFILE_ = -1, /* force signed enum */
FILE_A = 0, FILE_B, FILE_C, FILE_D, FILE_E, FILE_F, FILE_G, FILE_H,
FILE_MAX, FILE_MAX,
} file; } file_t;
typedef enum { typedef enum {
RANK_1, RANK_2, RANK_3, RANK_4, RANK_5, RANK_6, RANK_7, RANK_8, _SRANK_ = -1, /* force signed enum */
RANK_1 = 0, RANK_2, RANK_3, RANK_4, RANK_5, RANK_6, RANK_7, RANK_8,
RANK_MAX, RANK_MAX,
} rank; } rank_t;
typedef enum { typedef enum {
//A1 = 0x01ULL, B1 = 0x02ULL, C1 = 1UL << 2, D1 = 1UL << 3, //A1 = 0x01ULL, B1 = 0x02ULL, C1 = 1UL << 2, D1 = 1UL << 3,
@@ -95,17 +98,17 @@ typedef enum {
SOUTH_EAST = (SOUTH + EAST), SOUTH_EAST = (SOUTH + EAST),
SOUTH_WEST = (SOUTH + WEST), SOUTH_WEST = (SOUTH + WEST),
NORTH_WEST = (NORTH + WEST), NORTH_WEST = (NORTH + WEST),
} direction; } dir_t;
static inline square BB(file file, rank rank) static inline square_t BB(file_t file, rank_t rank)
{ {
return (rank << 3) + file; return (rank << 3) + file;
} }
static inline file BBfile(square square) static inline file_t BBfile(square_t square)
{ {
return square & 7; return square & 7;
} }
static inline rank BBrank(square square) static inline rank_t BBrank(square_t square)
{ {
return square >> 3; return square >> 3;
} }

View File

@@ -28,21 +28,21 @@
*/ */
typedef enum { typedef enum {
WHITE, BLACK, WHITE, BLACK,
NCOLOR_MAX COLOR_MAX
} color; } color_t;
typedef enum { typedef enum {
ALL_PIECES = 0, /* 'all pieces' bitboard */ ALL_PIECES = 0, /* 'all pieces' bitboard */
PAWN = 1, KNIGHT, BISHOP, ROOK, QUEEN, KING, PAWN = 1, KNIGHT, BISHOP, ROOK, QUEEN, KING,
PIECE_TYPE_MAX = 7 /* bit 4 */ PIECE_TYPE_MAX = 7 /* bit 4 */
} piece_type; } piece_type_t;
typedef enum { typedef enum {
EMPTY, EMPTY,
W_PAWN = PAWN, W_KNIGHT, W_BISHOP, W_ROOK, W_QUEEN, W_KING, W_PAWN = PAWN, W_KNIGHT, W_BISHOP, W_ROOK, W_QUEEN, W_KING,
B_PAWN = PAWN | 8, B_KNIGHT, B_BISHOP, B_ROOK, B_QUEEN, B_KING, B_PAWN = PAWN | 8, B_KNIGHT, B_BISHOP, B_ROOK, B_QUEEN, B_KING,
PIECE_MAX PIECE_MAX
} piece; } piece_t;
#define OPPONENT(p) !(p) #define OPPONENT(p) !(p)
@@ -84,7 +84,7 @@ typedef enum {
CASTLE_WQ = (1 << 1), /* 0x02 00000010 */ CASTLE_WQ = (1 << 1), /* 0x02 00000010 */
CASTLE_BK = (1 << 2), /* 0x04 00000100 */ CASTLE_BK = (1 << 2), /* 0x04 00000100 */
CASTLE_BQ = (1 << 3), /* 0x08 00001000 */ CASTLE_BQ = (1 << 3), /* 0x08 00001000 */
} castle; } castle_rights_t;
#define CASTLE_W (CASTLE_WK | CASTLE_WQ) /* 00000011 W castle mask */ #define CASTLE_W (CASTLE_WK | CASTLE_WQ) /* 00000011 W castle mask */
#define CASTLE_B (CASTLE_BK | CASTLE_BQ) /* 00001100 B castle mask */ #define CASTLE_B (CASTLE_BK | CASTLE_BQ) /* 00001100 B castle mask */

View File

@@ -71,7 +71,7 @@ static const char *castle_str = "KQkq";
* *
* @return: the pos position. * @return: the pos position.
*/ */
position *startpos(position *pos) pos_t *startpos(pos_t *pos)
{ {
return fen2pos(pos, startfen); return fen2pos(pos, startfen);
} }
@@ -86,13 +86,13 @@ position *startpos(position *pos)
* *
* @return: the pos position, or NULL if error. * @return: the pos position, or NULL if error.
*/ */
position *fen2pos(position *pos, const char *fen) pos_t *fen2pos(pos_t *pos, const char *fen)
{ {
const char *cur = fen; const char *cur = fen;
char *p; char *p;
short rank, file, color, tmp; short rank, file, color, tmp;
int consumed, err_line = 0, err_pos, err_char; int consumed, err_line = 0, err_pos, err_char;
position tmppos; pos_t tmppos;
pos_clear(&tmppos); pos_clear(&tmppos);
@@ -203,7 +203,7 @@ end:
* @pos: a position pointer * @pos: a position pointer
* @fen: destination FEN char*, or NULL * @fen: destination FEN char*, or NULL
* *
* If @fen is NULL, a 100 bytes memory will be allocated with malloc(1), * If @fen is NULL, a 92 bytes memory will be allocated with malloc(1),
* that should be freed by caller. * that should be freed by caller.
* *
* Note: If @fen is given, no check is done on its length, but to * Note: If @fen is given, no check is done on its length, but to
@@ -213,7 +213,7 @@ end:
* *
* @return: the pos position, or NULL if error. * @return: the pos position, or NULL if error.
*/ */
char *pos2fen(const position *pos, char *fen) char *pos2fen(const pos_t *pos, char *fen)
{ {
int cur = 0; int cur = 0;
@@ -222,14 +222,14 @@ char *pos2fen(const position *pos, char *fen)
/* 1) position /* 1) position
*/ */
for (int rank = RANK_8; rank >= RANK_1; --rank) { for (rank_t rank = RANK_8; rank >= RANK_1; --rank) {
printf("r=%d 1=%d\n", rank, RANK_1); printf("r=%d 1=%d\n", rank, RANK_1);
for (int file = FILE_A; file <= FILE_H;) { for (file_t file = FILE_A; file <= FILE_H;) {
printf(" f=%d H=%d\n", file, FILE_H); printf(" f=%d H=%d\n", file, FILE_H);
square sq = BB(file, rank); square_t sq = BB(file, rank);
printf(" sq=%d\n", sq); printf(" sq=%d\n", sq);
piece piece = PIECE(pos->board[sq]); piece_t piece = PIECE(pos->board[sq]);
color color = COLOR(pos->board[sq]); color_t color = COLOR(pos->board[sq]);
if (pos->board[sq] == EMPTY) { if (pos->board[sq] == EMPTY) {
int len = 0; int len = 0;
for (; file <= FILE_H && pos->board[BB(file,rank)] == EMPTY; file++) for (; file <= FILE_H && pos->board[BB(file,rank)] == EMPTY; file++)
@@ -255,7 +255,6 @@ char *pos2fen(const position *pos, char *fen)
if (pos->castle == 0) { if (pos->castle == 0) {
fen[cur++] = '-'; fen[cur++] = '-';
} else { } else {
//static char *
for (int i = 0; i < 4; ++i) for (int i = 0; i < 4; ++i)
if (pos->castle & mask(i)) if (pos->castle & mask(i))
fen[cur++] = castle_str[i]; fen[cur++] = castle_str[i];

View File

@@ -20,8 +20,8 @@
extern const char *startfen; /* startup position */ extern const char *startfen; /* startup position */
extern position *startpos(position *pos); extern pos_t *startpos(pos_t *pos);
extern position *fen2pos(position *pos, const char *fen); extern pos_t *fen2pos(pos_t *pos, const char *fen);
extern char *pos2fen(const position *pos, char *fen); extern char *pos2fen(const pos_t *pos, char *fen);
#endif /* FEN_H */ #endif /* FEN_H */

View File

@@ -26,26 +26,29 @@
//#include "bitboard.h" //#include "bitboard.h"
//#include "position.h" //#include "position.h"
//static pool_t *pieces_pool; /**
* piece_details
*/
const struct piece_details piece_details[] = { const struct piece_details piece_details[] = {
/* W B SW SB Name start value */ /* Abb Sym Name start value */
[EMPTY] = { ' ', ' ', " ", " ", "", [EMPTY] = { ' ', " ", " ", 0, 0, 0 },
0, 0, 0 }, [W_PAWN] = { 'P', "", "Pawn", P_VAL_OPN, P_VAL_MID, P_VAL_END },
[PAWN] = { 'P', 'p', "", "", "Pawn", [W_KNIGHT] = { 'N', "", "Knight", N_VAL_OPN, N_VAL_MID, N_VAL_END },
PAWN_VALUE, PAWN_VALUE, PAWN_VALUE }, [W_BISHOP] = { 'B', "", "Bishop", B_VAL_OPN, B_VAL_MID, B_VAL_END },
[KNIGHT] = { 'N', 'n', "", "", "Knight", [W_ROOK] = { 'R', "", "Rook", R_VAL_OPN, R_VAL_MID, R_VAL_END },
KNIGHT_VALUE, KNIGHT_VALUE, KNIGHT_VALUE }, [W_QUEEN] = { 'Q', "", "Queen", Q_VAL_OPN, Q_VAL_MID, Q_VAL_END },
[BISHOP] = { 'B', 'b', "", "", "Bishop", [W_KING] = { 'K', "", "King", K_VAL_OPN, K_VAL_MID, K_VAL_END },
BISHOP_VALUE, BISHOP_VALUE, BISHOP_VALUE }, [7] = { '7', "<EFBFBD>", "Inv 7", 0, 0, 0 },
[ROOK] = { 'R', 'r', "", "", "Rook", [8] = { '7', "<EFBFBD>", "Inv 8", 0, 0, 0 },
ROOK_VALUE, ROOK_VALUE, ROOK_VALUE }, [B_PAWN] = { 'p', "", "Pawn", P_VAL_OPN, P_VAL_MID, P_VAL_END },
[QUEEN] = { 'Q', 'q', "", "", "Queen", [B_KNIGHT] = { 'n', "", "Knight", P_VAL_OPN, N_VAL_MID, N_VAL_END },
QUEEN_VALUE, QUEEN_VALUE, QUEEN_VALUE }, [B_BISHOP] = { 'b', "", "Bishop", P_VAL_OPN, B_VAL_MID, B_VAL_END },
[KING] = { 'K', 'k', "", "", "King", [B_ROOK] = { 'r', "", "Rook", P_VAL_OPN, R_VAL_MID, R_VAL_END },
KING_VALUE, KING_VALUE, KING_VALUE } [B_QUEEN] = { 'q', "", "Queen", P_VAL_OPN, Q_VAL_MID, Q_VAL_END },
[B_KING] = { 'k', "", "King", P_VAL_OPN, K_VAL_MID, K_VAL_END },
}; };
const char *fenpieces_idx = " PNBRQ pnbrq";
/* /*
* void piece_list_print(struct list_head *list) * void piece_list_print(struct list_head *list)
* { * {

View File

@@ -21,14 +21,31 @@
#include "pool.h" #include "pool.h"
/* initial default values */ /* default values for opening, midgame, endgame
#define EMPTY_VALUE 0 */
#define PAWN_VALUE 100 #define E_VAL_OPN 0 /* empty */
#define KNIGHT_VALUE 300 #define P_VAL_OPN 100
#define BISHOP_VALUE 300 #define N_VAL_OPN 300
#define ROOK_VALUE 500 #define B_VAL_OPN 300
#define QUEEN_VALUE 900 #define R_VAL_OPN 500
#define KING_VALUE 20000 #define Q_VAL_OPN 900
#define K_VAL_OPN 20000
#define E_VAL_MID 0
#define P_VAL_MID 100
#define N_VAL_MID 300
#define B_VAL_MID 300
#define R_VAL_MID 500
#define Q_VAL_MID 900
#define K_VAL_MID 20000
#define E_VAL_END 0
#define P_VAL_END 100
#define N_VAL_END 300
#define B_VAL_END 300
#define R_VAL_END 500
#define Q_VAL_END 900
#define K_VAL_END 20000
/* /*
typedef struct piece_list_s { typedef struct piece_list_s {
@@ -43,24 +60,20 @@ typedef struct piece_list_s {
/* some default values for pieces /* some default values for pieces
*/ */
extern const struct piece_details { extern const struct piece_details {
char abbrev_w; /* used for game notation */ char abbrev; /* used for game notation */
char abbrev_b; //char abbrev_b;
char *symbol_w; char *symbol;
char *symbol_b; /* used for game notation */ //char *symbol_b; /* used for game notation */
char *name; char *name;
s64 opn_value; s64 opn_value;
s64 mid_value; s64 mid_value;
s64 end_value; s64 end_value;
} piece_details[]; } piece_details[];
#define P_ABBR(p) piece_details[PIECE(p)].abbrev
#define P_SYM(p) piece_details[PIECE(p)].symbol
#define P_NAME(p) piece_details[PIECE(p)].name #define P_NAME(p) piece_details[PIECE(p)].name
#define P_LETTER(p) piece_details[PIECE(p)].abbrev_w #define P_VAL(p) piece_details[PIECE(p)].opn_value
#define P_SYM(p) piece_details[PIECE(p)].symbol_b
#define P_CSHORT(p) (IS_WHITE(p)? piece_details[PIECE(p)].abbrev_w: \
piece_details[PIECE(p)].abbrev_b)
#define P_CSYM(p) (IS_WHITE(p)? piece_details[PIECE(p)].symbol_w: \
piece_details[PIECE(p)].symbol_b)
#define P_VALUE(p) (piece_details[PIECE(p)].value)
/* use short name or symbol - no effect /* use short name or symbol - no effect
*/ */

View File

@@ -70,7 +70,7 @@ inline void bitboard_print2_raw(bitboard_t bb1, bitboard_t bb2, char *title)
* pos_pieces_print() - Print position pieces * pos_pieces_print() - Print position pieces
* @pos: &position * @pos: &position
*/ */
void pos_pieces_print(position *pos) void pos_pieces_print(pos_t *pos)
{ {
int bit, count, cur; int bit, count, cur;
char pname; char pname;
@@ -101,6 +101,25 @@ void pos_pieces_print(position *pos)
} }
} }
/**
* raw_bitboard_print - print simple bitboard representation
* @bb: the bitboard
* @tit: a string or NULL
*/
void raw_bitboard_printc(const bitboard bb, const char *tit, piece_t p)
{
if (tit)
printf("%s\n", tit);
for (rank_t r = RANK_8; r >= RANK_1; --r) {
printf("%d ", r);
for (file_t f = FILE_A; f <= FILE_H; ++f)
printf(" %c", bb & (BB(f, r)) ? p: '.');
printf(" A B C D E F G H\n");
}
printf(" \n");
return;
}
/** /**
* pos_bitboards_print() - Print position bitboards * pos_bitboards_print() - Print position bitboards
* @pos: &position * @pos: &position
@@ -118,10 +137,10 @@ void pos_pieces_print(position *pos)
* pos_print() - Print position on stdout. * pos_print() - Print position on stdout.
* @pos: &position * @pos: &position
*/ */
void pos_print(position *pos) void pos_print(pos_t *pos)
{ {
int rank, file; int rank, file;
piece pc, *board = pos->board; piece_t pc, *board = pos->board;
//piece_list_t *wk = list_first_entry(&pos->pieces[WHITE], piece_list_t, list), //piece_list_t *wk = list_first_entry(&pos->pieces[WHITE], piece_list_t, list),
// *bk = list_first_entry(&pos->pieces[BLACK], piece_list_t, list); // *bk = list_first_entry(&pos->pieces[BLACK], piece_list_t, list);
@@ -220,7 +239,7 @@ void pos_print(position *pos)
* } * }
*/ */
position *pos_clear(position *pos) pos_t *pos_clear(pos_t *pos)
{ {
printf("size(pos_board=%lu elt=%lu\n", sizeof(pos->board), sizeof(int)); printf("size(pos_board=%lu elt=%lu\n", sizeof(pos->board), sizeof(int));
//for (square square = A1; square <= H8; ++square) //for (square square = A1; square <= H8; ++square)
@@ -238,8 +257,8 @@ position *pos_clear(position *pos)
//pos->eval = 0; //pos->eval = 0;
//pos->occupied[WHITE] = 0; //pos->occupied[WHITE] = 0;
//pos->occupied[BLACK] = 0; //pos->occupied[BLACK] = 0;
for (color color = WHITE; color <= BLACK; ++color) { for (color_t color = WHITE; color <= BLACK; ++color) {
for (piece_type piece = 0; piece <= KING; ++piece) for (piece_type_t piece = 0; piece <= KING; ++piece)
pos->bb[color][piece] = 0; pos->bb[color][piece] = 0;
pos->controlled[WHITE] = 0; pos->controlled[WHITE] = 0;
pos->controlled[BLACK] = 0; pos->controlled[BLACK] = 0;
@@ -271,9 +290,9 @@ position *pos_clear(position *pos)
*/ */
position *pos_new(void) pos_t *pos_new(void)
{ {
position *pos = safe_malloc(sizeof(position)); pos_t *pos = safe_malloc(sizeof(pos_t));
//assert(pos); //assert(pos);
return pos_clear(pos); return pos_clear(pos);
} }
@@ -295,9 +314,9 @@ position *pos_new(void)
* *
* TODO: merge with pos_new - NULL for init, non null for duplicate * TODO: merge with pos_new - NULL for init, non null for duplicate
*/ */
position *pos_dup(position *pos) pos_t *pos_dup(pos_t *pos)
{ {
position *newpos= pool_get(pos_pool); pos_t *newpos= pool_get(pos_pool);
if (newpos) { if (newpos) {
//board = new->board; //board = new->board;
@@ -315,7 +334,7 @@ position *pos_dup(position *pos)
pool_t *pos_pool_init() pool_t *pos_pool_init()
{ {
if (!pos_pool) if (!pos_pool)
pos_pool = pool_create("positions", 128, sizeof(position)); pos_pool = pool_create("positions", 128, sizeof(pos_t));
return pos_pool; return pos_pool;
} }

View File

@@ -30,8 +30,8 @@ typedef struct {
int turn; /* WHITE or BLACK */ int turn; /* WHITE or BLACK */
u16 clock_50; u16 clock_50;
u16 plycount; /* plies so far, start is 0 */ u16 plycount; /* plies so far, start is 0 */
square en_passant; square_t en_passant;
castle castle; castle_rights_t castle;
//eval_t eval; //eval_t eval;
//int check[2]; //int check[2];
@@ -46,8 +46,8 @@ typedef struct {
//u16 mobility[2]; //u16 mobility[2];
//struct list_head pieces[2]; /* pieces list, King is first */ //struct list_head pieces[2]; /* pieces list, King is first */
//struct list_head moves[2]; //struct list_head moves[2];
piece board[BOARDSIZE]; piece_t board[BOARDSIZE];
} position; } pos_t;
/** /**
* pos_set_sq - unconditionally set a piece on a square * pos_set_sq - unconditionally set a piece on a square
@@ -57,10 +57,10 @@ typedef struct {
* *
* Both position bords and bitboards are modified. * Both position bords and bitboards are modified.
*/ */
static inline void pos_set_sq(position *pos, piece_type p, color c, file f, rank r) static inline void pos_set_sq(pos_t *pos, piece_type_t p, color_t c, file_t f, rank_t r)
{ {
piece piece = MAKE_PIECE(p, c); piece_t piece = MAKE_PIECE(p, c);
square square = BB(f, r); square_t square = BB(f, r);
pos->board[square] = piece; pos->board[square] = piece;
pos->bb[c][ALL_PIECES] |= 1 << square; pos->bb[c][ALL_PIECES] |= 1 << square;
pos->bb[c][p] |= 1 << square; pos->bb[c][p] |= 1 << square;
@@ -73,11 +73,11 @@ static inline void pos_set_sq(position *pos, piece_type p, color c, file f, rank
* *
* Both position bords and bitboards are modified. * Both position bords and bitboards are modified.
*/ */
static inline void pos_clr_sq(position *pos, file f, rank r) static inline void pos_clr_sq(pos_t *pos, file_t f, rank_t r)
{ {
square square = BB(f, r); square_t square = BB(f, r);
piece_type piece = PIECE(pos->board[square]); piece_type_t piece = PIECE(pos->board[square]);
color color = COLOR(pos->board[square]); color_t color = COLOR(pos->board[square]);
pos->board[square] = EMPTY; pos->board[square] = EMPTY;
pos->bb[color][piece] &= ~(1 << square); pos->bb[color][piece] &= ~(1 << square);
pos->bb[color][ALL_PIECES] &= ~(1 << square); pos->bb[color][ALL_PIECES] &= ~(1 << square);
@@ -85,16 +85,19 @@ static inline void pos_clr_sq(position *pos, file f, rank r)
//void bitboard_print(bitboard_t bb, char *title); //void bitboard_print(bitboard_t bb, char *title);
//void bitboard_print2(bitboard_t bb1, bitboard_t bb2, char *title); //void bitboard_print2(bitboard_t bb1, bitboard_t bb2, char *title);
void pos_pieces_print(position *pos);
void raw_bitboard_print(const bitboard bitboard, const char *title);
void pos_pieces_print(pos_t *pos);
//void pos_bitboards_print(pos_t *pos); //void pos_bitboards_print(pos_t *pos);
void pos_print(position *pos); void pos_print(pos_t *pos);
position *pos_clear(position *pos); pos_t *pos_clear(pos_t *pos);
//void pos_del(position *pos); //void pos_del(position *pos);
position *pos_startpos(position *pos); pos_t *pos_startpos(pos_t *pos);
position *pos_new(); pos_t *pos_new();
pool_t *pos_pool_init(); pool_t *pos_pool_init();
void pos_pool_stats(); void pos_pool_stats();
position *pos_dup(position *pos); pos_t *pos_dup(pos_t *pos);
//void pos_check(position *pos); //void pos_check(position *pos);
#endif /* POSITION_H */ #endif /* POSITION_H */

View File

@@ -17,25 +17,6 @@
#include "util.h" #include "util.h"
#include "bitboard.h" #include "bitboard.h"
/**
* bitboard_print_simple - print simple bitboard representation
* @bitboard: the bitboard
* @title: a string or NULL
*/
void raw_bitboard_print(const bitboard bitboard, const char *title)
{
if (title)
printf("%s\n", title);
for (rank r = RANK_8; r >= RANK_1; --r) {
printf("%d ", r);
for (file f = FILE_A; f <= FILE_H; ++f)
printf(" %c", bitboard & (BB(f, r)) ? 'X': '.');
printf(" A B C D E F G H\n");
}
printf(" \n");
return;
}
/*int main() /*int main()
{ {
char *foo = safe_malloc(1000); char *foo = safe_malloc(1000);

View File

@@ -21,40 +21,19 @@
#include "chessdefs.h" #include "chessdefs.h"
/*
#define bug_on(expr) do { \
if (unlikely(expr)) { \
fprintf(stderr, \
"** BUG IN %s[%s:%d]: assertion \"" #expr "\" failed.\n", \
__func__, __FILE__,__LINE__); \
abort(); \
} \
} while (0)
#define warn_on(expr) ({ \
int _ret = !!(expr); \
if (unlikely(_ret)) { \
fprintf(stderr, \
"** WARN ON %s[%s:%d]: assertion \"" #expr "\" failed.\n", \
__func__, __FILE__,__LINE__); \
} \
_ret; \
})
*/
#undef safe_malloc #undef safe_malloc
#undef safe_free
#define safe_malloc(size) ({ \ #define safe_malloc(size) ({ \
void *_ret = malloc(size); \ void *_ret = malloc(size); \
bug_on(_ret == NULL); \ bug_on(_ret == NULL); \
_ret; \ _ret; \
}) })
#undef safe_free
#define safe_free(ptr) do { \ #define safe_free(ptr) do { \
bug_on(ptr == NULL); \ bug_on(ptr == NULL); \
free(_ret); \ free(_ret); \
} while (0) } while (0)
void raw_bitboard_print(const bitboard bitboard, const char *title);
#endif /* UTIL_H */ #endif /* UTIL_H */

View File

@@ -6,7 +6,7 @@
int main(int ac, char**av) int main(int ac, char**av)
{ {
position *pos; pos_t *pos;
debug_init(5, stderr, true); debug_init(5, stderr, true);