diff options
Diffstat (limited to 'src/common.hh')
| -rw-r--r-- | src/common.hh | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/common.hh b/src/common.hh new file mode 100644 index 0000000..b4e88bc --- /dev/null +++ b/src/common.hh @@ -0,0 +1,103 @@ +#ifndef TIBIA_LOGIN_COMMON_HH_ +#define TIBIA_LOGIN_COMMON_HH_ 1 + +#include <ctype.h> +#include <limits.h> +#include <stdarg.h> +#include <stddef.h> +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> + +#include <algorithm> + +typedef uint8_t uint8; +typedef uint16_t uint16; +typedef uint32_t uint32; +typedef int64_t int64; +typedef uint64_t uint64; +typedef size_t usize; + +#define STATIC_ASSERT(expr) static_assert((expr), "static assertion failed: " #expr) +#define NARRAY(arr) (int)(sizeof(arr) / sizeof(arr[0])) +#define ISPOW2(x) ((x) != 0 && ((x) & ((x) - 1)) == 0) +#define KB(x) ((usize)(x) << 10) +#define MB(x) ((usize)(x) << 20) +#define GB(x) ((usize)(x) << 30) + +#if defined(_WIN32) +# define OS_WINDOWS 1 +#elif defined(__linux__) || defined(__gnu_linux__) +# define OS_LINUX 1 +#else +# error "Operating system not supported." +#endif + +#if defined(_MSC_VER) +# define COMPILER_MSVC 1 +#elif defined(__GNUC__) +# define COMPILER_GCC 1 +#elif defined(__clang__) +# define COMPILER_CLANG 1 +#endif + +#if COMPILER_GCC || COMPILER_CLANG +# define ATTR_FALLTHROUGH __attribute__((fallthrough)) +# define ATTR_PRINTF(x, y) __attribute__((format(printf, x, y))) +#else +# define ATTR_FALLTHROUGH +# define ATTR_PRINTF(x, y) +#endif + +#if COMPILER_MSVC +# define TRAP() __debugbreak() +#elif COMPILER_GCC || COMPILER_CLANG +# define TRAP() __builtin_trap() +#else +# define TRAP() abort() +#endif + +#define ASSERT_ALWAYS(expr) if(!(expr)) { TRAP(); } +#if BUILD_DEBUG +# define ASSERT(expr) ASSERT_ALWAYS(expr) +#else +# define ASSERT(expr) ((void)(expr)) +#endif + +#define LOG(...) LogAdd("INFO", __VA_ARGS__) +#define LOG_WARN(...) LogAddVerbose("WARN", __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__) +#define LOG_ERR(...) LogAddVerbose("ERR", __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__) +#define PANIC(...) \ + do{ \ + LogAddVerbose("PANIC", __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__); \ + TRAP(); \ + }while(0) + +void LogAdd(const char *Prefix, const char *Format, ...) ATTR_PRINTF(2, 3); +void LogAddVerbose(const char *Prefix, const char *Function, + const char *File, int Line, const char *Format, ...) ATTR_PRINTF(5, 6); + +struct tm GetLocalTime(time_t t); +int64 GetClockMonotonicMS(void); +void SleepMS(int64 DurationMS); + +bool StringEq(const char *A, const char *B); +bool StringEqCI(const char *A, const char *B); +bool StringCopyN(char *Dest, int DestCapacity, const char *Src, int SrcLength); +bool StringCopy(char *Dest, int DestCapacity, const char *Src); +bool EscapeString(char *Dest, int DestCapacity, const char *Src); +uint32 HashString(const char *String); + +bool ParseIPAddress(int *Dest, const char *String); +bool ParseBoolean(bool *Dest, const char *String); +bool ParseInteger(int *Dest, const char *String); +bool ParseDuration(int *Dest, const char *String); +bool ParseSize(int *Dest, const char *String); +bool ParseString(char *Dest, int DestCapacity, const char *String); + +typedef void ConfigKVCallback(const char *Key, const char *Val); +bool ReadConfig(const char *FileName, ConfigKVCallback *KVCallback); + +#endif //TIBIA_LOGIN_COMMON_HH_ |
