#pragma once inline constexpr int _isascii(int c) { return !(c & ~0x7f); } inline constexpr int _isblank(int c) { return c == ' ' || c == '\t'; } inline constexpr int _iscntrl(int c) { return (unsigned int)c < 0x20 || c == 0x7f; } inline constexpr int _isdigit(int c) { return c >= '0' && c < ':'; } inline constexpr int _isgraph(int c) { return (unsigned int)c - 0x21 < 0x5e; } inline constexpr int _islower(int c) { return c >= 'a' && c < '{'; } inline constexpr int _isupper(int c) { return c >= 'A' && c < '['; } inline constexpr int _isprint(int c) { return (unsigned int)c - 0x20 < 0x5f; } inline constexpr int _isalpha(int c) { return _islower(c) || _isupper(c); } inline constexpr int _isalnum(int c) { return _isalpha(c) || _isdigit(c); } inline constexpr int _ispunct(int c) { return _isgraph(c) && !_isalnum(c); } inline constexpr int _isspace(int c) { return c == ' ' || (unsigned int)c - '\t' < 5; } inline constexpr int _isxdigit(int c) { return _isdigit(c) || ((unsigned int)c | 32) - 'a' < 6; } inline constexpr int _tolower(int c) { if (_isupper(c)) return c | 32; return c; } inline constexpr int _toupper(int c) { if (_islower(c)) return c & 0x5f; return c; } #if defined(_LUNA_OVERRIDE_STDC) || defined(IN_MOON) #define isalnum _isalnum #define isalpha _isalpha #define isascii _isascii #define iscntrl _iscntrl #define isdigit _isdigit #define isxdigit _isxdigit #define isspace _isspace #define ispunct _ispunct #define isprint _isprint #define isgraph _isgraph #define islower _islower #define isupper _isupper #define isblank _isblank #define tolower _tolower #define toupper _toupper #endif