4#ifndef TETL_MEMORY_POINTER_LIKE_TRAITS_HPP
5#define TETL_MEMORY_POINTER_LIKE_TRAITS_HPP
7#include <etl/_cstddef/size_t.hpp>
8#include <etl/_cstdint/uintptr_t.hpp>
9#include <etl/_math/ilog2.hpp>
16struct pointer_like_traits;
20struct pointer_like_traits<T*> {
28 return static_cast<T*>(p);
36struct pointer_like_traits<T
const> {
37 using non_const = pointer_like_traits<T>;
41 return non_const::get_as_void_pointer(p);
47 return non_const::get_from_void_pointer(
const_cast<
void*>(p));
50 static constexpr size_t
free_bits = non_const::free_bits;
55struct pointer_like_traits<T
const*> {
56 using non_const = pointer_like_traits<T*>;
60 return non_const::get_as_void_pointer(
const_cast<T*>(p));
65 return non_const::get_from_void_pointer(
const_cast<
void*>(p));
68 static constexpr size_t
free_bits = non_const::free_bits;
73struct pointer_like_traits<uintptr_t> {
76 return bit_cast<
void*>(p);
81 return bit_cast<uintptr_t>(p);
Definition adjacent_find.hpp:9
constexpr auto ilog2(Int x) noexcept -> Int
Definition ilog2.hpp:12
static constexpr size_t free_bits
Definition pointer_like_traits.hpp:31
static auto get_from_void_pointer(void *p) -> T *
Definition pointer_like_traits.hpp:26
static auto get_as_void_pointer(T *p) -> void *
Definition pointer_like_traits.hpp:21
static constexpr size_t free_bits
Definition pointer_like_traits.hpp:50
static auto get_as_void_pointer(T const p) -> void const *
Definition pointer_like_traits.hpp:39
static auto get_from_void_pointer(void const *p) -> T const
Definition pointer_like_traits.hpp:45
static auto get_from_void_pointer(void const *p) -> T const *
Definition pointer_like_traits.hpp:63
static constexpr size_t free_bits
Definition pointer_like_traits.hpp:68
static auto get_as_void_pointer(T const *p) -> void const *
Definition pointer_like_traits.hpp:58
static constexpr size_t free_bits
Definition pointer_like_traits.hpp:85
static auto get_from_void_pointer(void *p) -> uintptr_t
Definition pointer_like_traits.hpp:79
static auto get_as_void_pointer(uintptr_t p) -> void *
Definition pointer_like_traits.hpp:74