engine/compat/ remplace ce que le cœur de gnubg attend du reste de gnubg et de GLib : config.h écrit à la main (sans threads, C générique, NEON prévu), shim GLib minimal (dont un analyseur XML pour les tables d'équité et mmap pour les bases de fin de partie), en-têtes réduits et fonctions de support. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
1.6 KiB
C
65 lines
1.6 KiB
C
/*
|
|
* multithread.h -- en-tête réduit remplaçant celui de GNU Backgammon.
|
|
*
|
|
* Copyright (C) 2026 les auteurs d'Ustagammon.
|
|
* Licence : GPLv3 ou ultérieure (voir LICENSE).
|
|
*
|
|
* Le moteur embarqué est compilé sans USE_MULTITHREAD (ADR 0005). Ne restent
|
|
* que les définitions de la branche monothread de l'original : les macros
|
|
* MT_* et les données locales au fil unique (td.tld).
|
|
*/
|
|
|
|
#ifndef MULTITHREAD_H
|
|
#define MULTITHREAD_H
|
|
|
|
#include "config.h"
|
|
|
|
#if defined(USE_MULTITHREAD)
|
|
#error "Le moteur embarqué d'Ustagammon est compilé sans threads"
|
|
#endif
|
|
|
|
#include "backgammon.h"
|
|
|
|
#define multi_debug(x)
|
|
|
|
typedef struct {
|
|
int id;
|
|
move *aMoves;
|
|
NNState *pnnState;
|
|
} ThreadLocalData;
|
|
|
|
typedef struct {
|
|
ThreadLocalData *tld;
|
|
} ThreadData;
|
|
|
|
extern ThreadData td;
|
|
|
|
/* Définies dans mtsupport.c (branche sans threads). */
|
|
extern void MT_InitThreads(void);
|
|
extern void MT_Close(void);
|
|
extern ThreadLocalData *MT_CreateThreadLocalData(int id);
|
|
|
|
#if !defined(MAX_NUMTHREADS)
|
|
#define MAX_NUMTHREADS 1
|
|
#endif
|
|
extern int asyncRet;
|
|
#define MT_Exclusive() {}
|
|
#define MT_Release() {}
|
|
#define MT_GetNumThreads() 1
|
|
#define MT_SetResultFailed() asyncRet = -1
|
|
#define MT_SafeInc(x) (++(*x))
|
|
#define MT_SafeIncValue(x) (++(*x))
|
|
#define MT_SafeIncCheck(x) ((*x)++)
|
|
#define MT_SafeAdd(x, y) ((*x) += y)
|
|
#define MT_SafeDec(x) (--(*x))
|
|
#define MT_SafeDecCheck(x) ((--(*x)) == 0)
|
|
#define MT_SafeGet(x) (*x)
|
|
#define MT_SafeSet(x, y) ((*x) = y)
|
|
#define MT_SafeCompare(x, y) ((*x) == y)
|
|
#define MT_GetThreadID() 0
|
|
#define MT_Get_nnState() td.tld->pnnState
|
|
#define MT_Get_aMoves() td.tld->aMoves
|
|
#define MT_GetTLD() td.tld
|
|
|
|
#endif
|