3#ifndef TETL_MEMORY_POINTER_INT_PAIR_HPP
4#define TETL_MEMORY_POINTER_INT_PAIR_HPP
30 typename IntType = unsigned,
56 _value = pointer_info::update_int(pointer_info::update_ptr(0, pointerValue),
static_cast<intptr_t>(intValue));
81 (void)pointer_traits::get_from_void_pointer(v);
87 return lhs._value == rhs._value;
92 return lhs._value != rhs._value;
97 return lhs._value < rhs._value;
102 return lhs._value > rhs._value;
107 return lhs._value <= rhs._value;
112 return lhs._value >= rhs._value;
116 auto init_with_ptr(
pointer_type pointerValue) ->
void { _value = pointer_info::update_ptr(0, pointerValue); }
121template <
typename PtrT,
unsigned IntBits,
typename IntT,
typename PtrTraits>
125 return p.get_opaque_value();
138 static constexpr size_t free_bits = PtrTraits::free_bits - IntBits;
constexpr auto bit_cast(From const &src) noexcept -> To
Obtain a value of type To by reinterpreting the object representation of from. Every bit in the value...
Definition bit_cast.hpp:38
Definition adjacent_find.hpp:8
TETL_BUILTIN_INTPTR intptr_t
Signed integer type capable of holding a pointer.
Definition intptr_t.hpp:11
Definition pointer_int_pair_info.hpp:15
This struct implements a pair of a pointer and small integer. It is designed to represent this in the...
Definition pointer_int_pair.hpp:33
void set_from_opaque_value(void *val)
Definition pointer_int_pair.hpp:68
friend auto operator>=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:110
void set_ptr_and_int(pointer_type pointerValue, int_type intValue)
Definition pointer_int_pair.hpp:54
static constexpr auto int_bits
Definition pointer_int_pair.hpp:38
pointer_int_pair(pointer_type pointerValue)
Definition pointer_int_pair.hpp:44
auto get_addr_of_pointer() -> pointer_type *
Definition pointer_int_pair.hpp:64
PointerT pointer_type
Definition pointer_int_pair.hpp:34
PtrTraits pointer_traits
Definition pointer_int_pair.hpp:35
Info pointer_info
Definition pointer_int_pair.hpp:36
auto get_pointer() const -> pointer_type
Definition pointer_int_pair.hpp:50
friend auto operator<=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:105
auto get_addr_of_pointer() const -> pointer_type const *
Definition pointer_int_pair.hpp:59
void set_pointer(pointer_type pointerValue)
Definition pointer_int_pair.hpp:46
friend auto operator<(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:95
auto get_int() const -> int_type
Definition pointer_int_pair.hpp:52
constexpr pointer_int_pair()=default
IntType int_type
Definition pointer_int_pair.hpp:37
friend auto operator>(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:100
static auto get_from_opaque_value(void const *v) -> pointer_int_pair
Allow pointer_int_pairs to be created from const void * if and only if the pointer type could be crea...
Definition pointer_int_pair.hpp:79
pointer_int_pair(pointer_type pointerValue, int_type intValue)
Definition pointer_int_pair.hpp:42
static auto get_from_opaque_value(void *v) -> pointer_int_pair
Definition pointer_int_pair.hpp:70
friend auto operator!=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:90
void set_int(int_type intValue)
Definition pointer_int_pair.hpp:48
friend auto operator==(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:85
auto get_opaque_value() const -> void *
Definition pointer_int_pair.hpp:66
static auto get_as_void_pointer(pointer_int_pair< PtrT, IntBits, IntT > const &p) -> void *
Definition pointer_int_pair.hpp:123
static constexpr size_t free_bits
Definition pointer_int_pair.hpp:138
static auto get_from_void_pointer(void const *p) -> pointer_int_pair< PtrT, IntBits, IntT >
Definition pointer_int_pair.hpp:133
static auto get_from_void_pointer(void *p) -> pointer_int_pair< PtrT, IntBits, IntT >
Definition pointer_int_pair.hpp:128
A traits type that is used to handle pointer types and things that are just wrappers for pointers as ...
Definition pointer_like_traits.hpp:15