diff options
author | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-02-17 00:21:48 +0100 |
---|---|---|
committer | Steven Le Rouzic <steven.lerouzic@gmail.com> | 2025-02-17 22:29:50 +0100 |
commit | a141c401f78467bc15f62882fca5d55a007cacbb (patch) | |
tree | 908ac71a8640f78f45d22c6808c5fa6e373000fa /asl/utility.hpp | |
parent | cb77cbe9ce4cddad6a460aa190ff70f0c13e4703 (diff) |
Reorganize everything
Diffstat (limited to 'asl/utility.hpp')
-rw-r--r-- | asl/utility.hpp | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/asl/utility.hpp b/asl/utility.hpp deleted file mode 100644 index f3b94c3..0000000 --- a/asl/utility.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#pragma once - -#include "asl/meta.hpp" -#include "asl/layout.hpp" -#include "asl/assert.hpp" - -#define ASL_MOVE(...) (static_cast<::asl::un_ref_t<decltype(__VA_ARGS__)>&&>(__VA_ARGS__)) - -#define ASL_FWD(expr_) (static_cast<decltype(expr_)&&>(expr_)) - -namespace asl -{ - -struct in_place_t {}; -static constexpr in_place_t in_place{}; - -template<moveable T> -constexpr void swap(T& a, T& b) -{ - T tmp{ASL_MOVE(a)}; - a = ASL_MOVE(b); - b = ASL_MOVE(tmp); -} - -template<typename T, typename U> -T exchange(T& obj, U&& new_value) -{ - T old_value = ASL_MOVE(obj); - obj = ASL_FWD(new_value); - return old_value; -} - -template<trivially_copy_constructible U, trivially_copy_constructible T> -constexpr U bit_cast(T value) requires (size_of<T> == size_of<U>) -{ - return __builtin_bit_cast(U, value); -} - -template<typename T> -constexpr T min(T a, T b) -{ - return (a <= b) ? a : b; -} - -template<typename T> -constexpr T max(T a, T b) -{ - return (a >= b) ? a : b; -} - -constexpr uint64_t round_up_pow2(uint64_t v) -{ - ASL_ASSERT(v <= 0x8000'0000'0000'0000); - - v -= 1; - - v |= v >> 1; - v |= v >> 2; - v |= v >> 4; - v |= v >> 8; - v |= v >> 16; - v |= v >> 32; - - return v + 1; -} - -constexpr bool is_pow2(isize_t v) -{ - return v > 0 && ((v - 1) & v) == 0; -} - -#define ASL_DELETE_COPY(T) \ - T(const T&) = delete; \ - T& operator=(const T&) = delete; - -#define ASL_DELETE_MOVE(T) \ - T(T&&) = delete; \ - T& operator=(T&&) = delete; - -#define ASL_DELETE_COPY_MOVE(T) \ - ASL_DELETE_COPY(T) \ - ASL_DELETE_MOVE(T) - -#define ASL_DEFAULT_COPY(T) \ - T(const T&) = default; \ - T& operator=(const T&) = default; - -#define ASL_DEFAULT_MOVE(T) \ - T(T&&) = default; \ - T& operator=(T&&) = default; - -#define ASL_DEFAULT_COPY_MOVE(T) \ - ASL_DEFAULT_COPY(T) \ - ASL_DEFAULT_MOVE(T) - -} // namespace asl |