21constexpr const size_t KB = 1024;
22constexpr const size_t MB =
KB * 1024;
23constexpr const size_t GB =
MB * 1024;
24constexpr const size_t TB =
GB * 1024;
29template <
typename T,
typename U>
31 {
static_cast<U>(
t) } -> std::same_as<U>;
34template <
typename T,
typename U>
36 {
reinterpret_cast<U>(
t) } -> std::same_as<U>;
44 std::is_same_v<T, AllocatorCommonMetadata>;
46template <
typename T,
typename U>
49 return static_cast<T
>(
v);
52template <
typename T,
typename U>
56 return reinterpret_cast<T
>(
v);
59template <
typename T,
typename U>
61 return std::bit_cast<T>(
v);
64template <
size_t N,
typename T>
65 requires std::is_integral_v<T> && (
N > 0) && (
N % 2 == 0)
67 return (
value & (
N - 1)) == 0;
70template <
size_t N,
typename T>
71 requires(
N > 0) && (
N % 2 == 0)
76template <
size_t N,
typename T>
77 requires std::is_integral_v<T> && (
N > 0) && (
N % 2 == 0)
82template <
size_t N,
typename T>
83 requires std::is_integral_v<T> && (
N > 0) && (
N % 2 == 0)
86 "Unexpected overflow");
91 requires std::is_unsigned_v<T>
93 if (
rhs > 0 &&
lhs > std::numeric_limits<T>::max() -
rhs)
return true;
#define BASSERT_GE(lhs, rhs, m,...)
constexpr const intptr_t kNullIntPtr
constexpr const size_t TB
constexpr const size_t KB
constexpr const size_t MB
constexpr T RoundUp(T value)
constexpr const int kPageSize
constexpr const MemoryAddress kNullMemoryAddress
constexpr const int kHugePageSize
constexpr bool IsAligned(T value)
constexpr const size_t GB
constexpr bool AddOverflowChecked(T lhs, T rhs, T &destination)
constexpr const int kPointerSize
constexpr T RoundDown(T value)
constexpr const uintptr_t kNullUintPtr
constexpr T SafeCast(U v)
constexpr const int kIntPtrSize
std::queue< T, broom::deque< T > > queue
constexpr const int kUintPtrSize
constexpr T UnsafeCast(U v)