#pragma once #define deimos_StaticAssert(...) static_assert(__VA_ARGS__, #__VA_ARGS__) #define deimos_NO_COPY(TYPE) \ TYPE(const TYPE&) = delete; \ TYPE& operator=(const TYPE&) = delete; #define deimos_NO_MOVE(TYPE) \ TYPE(TYPE&&) = delete; \ TYPE& operator=(TYPE&&) = delete; #define deimos_NO_COPY_MOVE(TYPE) \ deimos_NO_COPY(TYPE); \ deimos_NO_MOVE(TYPE); #define deimos_DEFAULT_COPY(TYPE) \ TYPE(const TYPE&) = default; \ TYPE& operator=(const TYPE&) = default; #define deimos_DEFAULT_MOVE(TYPE) \ TYPE(TYPE&&) = default; \ TYPE& operator=(TYPE&&) = default; #define deimos_DEFAULT_COPY_MOVE(TYPE) \ deimos_DEFAULT_COPY(TYPE); \ deimos_DEFAULT_MOVE(TYPE); namespace gsl { using zstring = char*; using czstring = const char*; } // namespace gsl namespace deimos { using uint8 = unsigned char; using uint16 = unsigned short; using uint32 = unsigned int; using uint64 = unsigned long long; using int8 = char; using int16 = short; using int32 = int; using int64 = long long; using float32 = float; using float64 = double; enum __attribute__((__may_alias__)) byte : uint8 {}; struct uint128 { uint64 high; uint64 low; constexpr bool operator==(const uint128& other) const = default; }; struct SourceLocation { gsl::czstring file; int32 line; constexpr SourceLocation( // NOLINT gsl::czstring file_ = __builtin_FILE(), int32 line_ = __builtin_LINE()) : file{file_}, line{line_} {} }; } // namespace deimos constexpr void* operator new(deimos::uint64, void* ptr) { return ptr; } #include "deimos/core/std.h"