mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-21 18:52:07 +00:00
Replace some macros with static functions or constants
This commit is contained in:
@@ -15,13 +15,6 @@
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
|
||||
#define fix2double(i, q) ((double)((i) / pow(2.0, q)))
|
||||
#define double2fix(d, q) ((int32_t)round((d)*pow(2.0, q)))
|
||||
|
||||
// 2*pi radians == 1 turn
|
||||
#define turn2rad(f) ((f) * (M_PI * 2))
|
||||
#define rad2turn(r) ((r) / (M_PI * 2))
|
||||
|
||||
uint8_t fixPrecision;
|
||||
|
||||
uint8_t fix_Precision() {
|
||||
@@ -32,6 +25,22 @@ double fix_PrecisionFactor() {
|
||||
return pow(2.0, fixPrecision);
|
||||
}
|
||||
|
||||
static double fix2double(int32_t i, int32_t q) {
|
||||
return i / pow(2.0, q);
|
||||
}
|
||||
|
||||
static int32_t double2fix(double d, int32_t q) {
|
||||
return (int32_t)round(d * pow(2.0, q));
|
||||
}
|
||||
|
||||
static double turn2rad(double t) {
|
||||
return t * (M_PI * 2);
|
||||
}
|
||||
|
||||
static double rad2turn(double r) {
|
||||
return r / (M_PI * 2);
|
||||
}
|
||||
|
||||
int32_t fix_Sin(int32_t i, int32_t q) {
|
||||
return double2fix(sin(turn2rad(fix2double(i, q))), q);
|
||||
}
|
||||
|
||||
@@ -50,48 +50,49 @@
|
||||
#include <memoryapi.h> // MapViewOfFile
|
||||
#include <handleapi.h> // CloseHandle
|
||||
// clang-format on
|
||||
|
||||
#define MAP_FAILED nullptr
|
||||
#define mapFile(ptr, fd, path, size) \
|
||||
do { \
|
||||
(ptr) = MAP_FAILED; \
|
||||
HANDLE file = CreateFileA( \
|
||||
path, \
|
||||
GENERIC_READ, \
|
||||
FILE_SHARE_READ, \
|
||||
nullptr, \
|
||||
OPEN_EXISTING, \
|
||||
FILE_FLAG_POSIX_SEMANTICS | FILE_FLAG_RANDOM_ACCESS, \
|
||||
nullptr \
|
||||
); \
|
||||
HANDLE mappingObj; \
|
||||
if (file == INVALID_HANDLE_VALUE) \
|
||||
break; \
|
||||
mappingObj = CreateFileMappingA(file, nullptr, PAGE_READONLY, 0, 0, nullptr); \
|
||||
if (mappingObj != INVALID_HANDLE_VALUE) \
|
||||
(ptr) = MapViewOfFile(mappingObj, FILE_MAP_READ, 0, 0, 0); \
|
||||
CloseHandle(mappingObj); \
|
||||
CloseHandle(file); \
|
||||
} while (0)
|
||||
#define munmap(ptr, size) UnmapViewOfFile((ptr))
|
||||
|
||||
static void mapFile(void *&mappingAddr, int fd, char const *path, size_t) {
|
||||
mappingAddr = MAP_FAILED;
|
||||
HANDLE file = CreateFileA(
|
||||
path,
|
||||
GENERIC_READ,
|
||||
FILE_SHARE_READ,
|
||||
nullptr,
|
||||
OPEN_EXISTING,
|
||||
FILE_FLAG_POSIX_SEMANTICS | FILE_FLAG_RANDOM_ACCESS,
|
||||
nullptr
|
||||
);
|
||||
HANDLE mappingObj;
|
||||
if (file == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
mappingObj = CreateFileMappingA(file, nullptr, PAGE_READONLY, 0, 0, nullptr);
|
||||
if (mappingObj != INVALID_HANDLE_VALUE)
|
||||
mappingAddr = MapViewOfFile(mappingObj, FILE_MAP_READ, 0, 0, 0);
|
||||
CloseHandle(mappingObj);
|
||||
CloseHandle(file);
|
||||
}
|
||||
|
||||
static int munmap(void *mappingAddr, size_t) {
|
||||
return UnmapViewOfFile(mappingAddr) == 0 ? -1 : 0;
|
||||
}
|
||||
|
||||
#else // defined(_MSC_VER) || defined(__MINGW32__)
|
||||
|
||||
#include <sys/mman.h>
|
||||
#define mapFile(ptr, fd, path, size) \
|
||||
do { \
|
||||
(ptr) = mmap(nullptr, (size), PROT_READ, MAP_PRIVATE, (fd), 0); \
|
||||
if ((ptr) == MAP_FAILED && errno == ENOTSUP) { \
|
||||
/* \
|
||||
* The implementation may not support MAP_PRIVATE; try again with MAP_SHARED \
|
||||
* instead, offering, I believe, weaker guarantees about external modifications to \
|
||||
* the file while reading it. That's still better than not opening it at all, \
|
||||
* though \
|
||||
*/ \
|
||||
if (verbose) \
|
||||
printf("mmap(%s, MAP_PRIVATE) failed, retrying with MAP_SHARED\n", path); \
|
||||
(ptr) = mmap(nullptr, (size), PROT_READ, MAP_SHARED, (fd), 0); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
static void mapFile(void *&mappingAddr, int fd, char const *path, size_t size) {
|
||||
mappingAddr = mmap(nullptr, size, PROT_READ, MAP_PRIVATE, fd, 0);
|
||||
if (mappingAddr == MAP_FAILED && errno == ENOTSUP) {
|
||||
// The implementation may not support MAP_PRIVATE; try again with MAP_SHARED
|
||||
// instead, offering, I believe, weaker guarantees about external modifications to
|
||||
// the file while reading it. That's still better than not opening it at all, though.
|
||||
if (verbose)
|
||||
printf("mmap(%s, MAP_PRIVATE) failed, retrying with MAP_SHARED\n", path);
|
||||
mappingAddr = mmap(nullptr, size, PROT_READ, MAP_SHARED, fd, 0);
|
||||
}
|
||||
}
|
||||
|
||||
#endif // !( defined(_MSC_VER) || defined(__MINGW32__) )
|
||||
|
||||
// Bison 3.6 changed token "types" to "kinds"; cast to int for simple compatibility
|
||||
|
||||
@@ -583,21 +583,12 @@ void sym_Init(time_t now) {
|
||||
|
||||
sym_AddVar("_RS", 0)->isBuiltin = true;
|
||||
|
||||
#define addSym(fn, name, val) \
|
||||
do { \
|
||||
Symbol *sym = fn(name, val); \
|
||||
assert(sym); \
|
||||
sym->isBuiltin = true; \
|
||||
} while (0)
|
||||
#define addNumber(name, val) addSym(sym_AddEqu, name, val)
|
||||
#define addString(name, val) addSym(sym_AddString, name, val)
|
||||
|
||||
addString("__RGBDS_VERSION__", get_package_version_string());
|
||||
addNumber("__RGBDS_MAJOR__", PACKAGE_VERSION_MAJOR);
|
||||
addNumber("__RGBDS_MINOR__", PACKAGE_VERSION_MINOR);
|
||||
addNumber("__RGBDS_PATCH__", PACKAGE_VERSION_PATCH);
|
||||
sym_AddString("__RGBDS_VERSION__", get_package_version_string())->isBuiltin = true;
|
||||
sym_AddEqu("__RGBDS_MAJOR__", PACKAGE_VERSION_MAJOR)->isBuiltin = true;
|
||||
sym_AddEqu("__RGBDS_MINOR__", PACKAGE_VERSION_MINOR)->isBuiltin = true;
|
||||
sym_AddEqu("__RGBDS_PATCH__", PACKAGE_VERSION_PATCH)->isBuiltin = true;
|
||||
#ifdef PACKAGE_VERSION_RC
|
||||
addNumber("__RGBDS_RC__", PACKAGE_VERSION_RC);
|
||||
sym_AddEqu("__RGBDS_RC__", PACKAGE_VERSION_RC)->isBuiltin = true;
|
||||
#endif
|
||||
|
||||
if (now == (time_t)-1) {
|
||||
@@ -626,21 +617,17 @@ void sym_Init(time_t now) {
|
||||
time_utc
|
||||
);
|
||||
|
||||
addString("__TIME__", savedTIME);
|
||||
addString("__DATE__", savedDATE);
|
||||
addString("__ISO_8601_LOCAL__", savedTIMESTAMP_ISO8601_LOCAL);
|
||||
addString("__ISO_8601_UTC__", savedTIMESTAMP_ISO8601_UTC);
|
||||
sym_AddString("__TIME__", savedTIME)->isBuiltin = true;
|
||||
sym_AddString("__DATE__", savedDATE)->isBuiltin = true;
|
||||
sym_AddString("__ISO_8601_LOCAL__", savedTIMESTAMP_ISO8601_LOCAL)->isBuiltin = true;
|
||||
sym_AddString("__ISO_8601_UTC__", savedTIMESTAMP_ISO8601_UTC)->isBuiltin = true;
|
||||
|
||||
addNumber("__UTC_YEAR__", time_utc->tm_year + 1900);
|
||||
addNumber("__UTC_MONTH__", time_utc->tm_mon + 1);
|
||||
addNumber("__UTC_DAY__", time_utc->tm_mday);
|
||||
addNumber("__UTC_HOUR__", time_utc->tm_hour);
|
||||
addNumber("__UTC_MINUTE__", time_utc->tm_min);
|
||||
addNumber("__UTC_SECOND__", time_utc->tm_sec);
|
||||
|
||||
#undef addNumber
|
||||
#undef addString
|
||||
#undef addSym
|
||||
sym_AddEqu("__UTC_YEAR__", time_utc->tm_year + 1900)->isBuiltin = true;
|
||||
sym_AddEqu("__UTC_MONTH__", time_utc->tm_mon + 1)->isBuiltin = true;
|
||||
sym_AddEqu("__UTC_DAY__", time_utc->tm_mday)->isBuiltin = true;
|
||||
sym_AddEqu("__UTC_HOUR__", time_utc->tm_hour)->isBuiltin = true;
|
||||
sym_AddEqu("__UTC_MINUTE__", time_utc->tm_min)->isBuiltin = true;
|
||||
sym_AddEqu("__UTC_SECOND__", time_utc->tm_sec)->isBuiltin = true;
|
||||
|
||||
labelScope = std::nullopt;
|
||||
anonLabelID = 0;
|
||||
|
||||
Reference in New Issue
Block a user