#pragma once #include #ifdef USE_NEON #include #else #include #include #endif namespace ircolib { using u8 = uint8_t; using u16 = uint16_t; using u32 = uint32_t; using u64 = uint64_t; using s8 = int8_t; using s16 = int16_t; using s32 = int32_t; using s64 = int64_t; template static constexpr bool is_bit_set(const T &val) { return val & (1 << bit); } template static constexpr void set_bit(T &val) { val |= 1 << bit; } template inline bool is_bit_set(const T &val, const u32 &bit) { return val & (1 << bit); } template inline void set_bit(T &val, const u32 &bit) { val |= 1 << bit; } template inline void clear_bit(T &val, const u32 &bit) { val &= ~(1 << bit); } } // namespace ircolib constexpr ircolib::u32 operator""_kib(const unsigned long long v) { return v * 1024; } constexpr ircolib::u32 operator""_mib(const unsigned long long v) { return v * 1024 * 1024; } constexpr ircolib::u32 operator""_gib(const unsigned long long v) { return v * 1024 * 1024 * 1024; }