// Copyright (C) 2022 RozK // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef _RK_ENGINE_TYPES_H #define _RK_ENGINE_TYPES_H #include #include #define RK_EXPORT extern "C" #define RK_HOT gnu::hot #define RK_FLATTEN gnu::flatten #define RK_UNROLLED gnu::optimize("unroll-loops") #define RK_FAST gnu::optimize("Ofast") #define RK_INVALID_HANDLE nullptr #define RK_FLAG(_bit) (1 << (_bit)) typedef bool rk_bool; typedef char rk_char; typedef wchar_t rk_wchar; typedef int8_t rk_byte; typedef uint8_t rk_ubyte; typedef int16_t rk_short; typedef uint16_t rk_ushort; typedef int32_t rk_int; typedef uint32_t rk_uint; typedef int64_t rk_long; typedef uint64_t rk_ulong; typedef __int128 rk_llong; typedef unsigned __int128 rk_ullong; typedef float rk_float; typedef void * rk_handle_t; static_assert(sizeof(rk_char) == 1); static_assert(sizeof(rk_wchar) == 4); static_assert(sizeof(rk_float) == 4); #pragma pack(push, 4) template struct rk_packed { }; template struct alignas(alignof(rk_int)) rk_packed { typedef rk_int type; rk_int packed; }; template struct alignas(alignof(rk_uint)) rk_packed { typedef rk_uint type; rk_uint packed; }; #pragma pack(pop) #endif // _RK_ENGINE_TYPES_H