4#ifndef TETL_MEMORY_POINTER_INT_PAIR_HPP
5#define TETL_MEMORY_POINTER_INT_PAIR_HPP
7#include <etl/_bit/bit_cast.hpp>
8#include <etl/_cstdint/intptr_t.hpp>
9#include <etl/_memory/pointer_int_pair_info.hpp>
10#include <etl/_memory/pointer_like_traits.hpp>
31 typename IntType =
unsigned,
32 typename PtrTraits = pointer_like_traits<PointerT>,
36 using pointer_type = PointerT;
37 using pointer_traits = PtrTraits;
38 using pointer_info = Info;
39 using int_type = IntType;
51 init_with_ptr(pointerValue);
56 _value = pointer_info::update_ptr(_value, pointerValue);
61 _value = pointer_info::update_int(_value,
static_cast<intptr_t>(intValue));
66 return pointer_info::get_pointer(_value);
71 return static_cast<int_type>(pointer_info::get_int(_value));
76 _value = pointer_info::update_int(pointer_info::update_ptr(0, pointerValue),
static_cast<intptr_t>(intValue));
86 return bit_cast<pointer_type*>(&_value);
102 p.set_from_opaque_value(v);
110 (
void)pointer_traits::get_from_void_pointer(v);
111 return get_from_opaque_value(
const_cast<
void*>(v));
116 return lhs._value == rhs._value;
121 return lhs._value != rhs._value;
126 return lhs._value < rhs._value;
131 return lhs._value > rhs._value;
136 return lhs._value <= rhs._value;
141 return lhs._value >= rhs._value;
145 auto init_with_ptr(pointer_type pointerValue) ->
void
147 _value = pointer_info::update_ptr(0, pointerValue);
153template <
typename PtrT,
unsigned IntBits,
typename IntT,
typename PtrTraits>
157 return p.get_opaque_value();
170 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:39
Definition adjacent_find.hpp:9
Definition pointer_int_pair_info.hpp:16
This struct implements a pair of a pointer and small integer. It is designed to represent this in the...
Definition pointer_int_pair.hpp:35
void set_from_opaque_value(void *val)
Definition pointer_int_pair.hpp:94
friend auto operator>=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:139
void set_ptr_and_int(pointer_type pointerValue, int_type intValue)
Definition pointer_int_pair.hpp:74
static constexpr auto int_bits
Definition pointer_int_pair.hpp:40
pointer_int_pair(pointer_type pointerValue)
Definition pointer_int_pair.hpp:49
auto get_addr_of_pointer() -> pointer_type *
Definition pointer_int_pair.hpp:84
auto get_pointer() const -> pointer_type
Definition pointer_int_pair.hpp:64
friend auto operator<=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:134
auto get_addr_of_pointer() const -> pointer_type const *
Definition pointer_int_pair.hpp:79
void set_pointer(pointer_type pointerValue)
Definition pointer_int_pair.hpp:54
friend auto operator<(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:124
auto get_int() const -> int_type
Definition pointer_int_pair.hpp:69
constexpr pointer_int_pair()=default
friend auto operator>(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:129
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:108
pointer_int_pair(pointer_type pointerValue, int_type intValue)
Definition pointer_int_pair.hpp:44
static auto get_from_opaque_value(void *v) -> pointer_int_pair
Definition pointer_int_pair.hpp:99
friend auto operator!=(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:119
void set_int(int_type intValue)
Definition pointer_int_pair.hpp:59
friend auto operator==(pointer_int_pair const &lhs, pointer_int_pair const &rhs) -> bool
Definition pointer_int_pair.hpp:114
auto get_opaque_value() const -> void *
Definition pointer_int_pair.hpp:89
static auto get_as_void_pointer(pointer_int_pair< PtrT, IntBits, IntT > const &p) -> void *
Definition pointer_int_pair.hpp:155
static constexpr size_t free_bits
Definition pointer_int_pair.hpp:170
static auto get_from_void_pointer(void const *p) -> pointer_int_pair< PtrT, IntBits, IntT >
Definition pointer_int_pair.hpp:165
static auto get_from_void_pointer(void *p) -> pointer_int_pair< PtrT, IntBits, IntT >
Definition pointer_int_pair.hpp:160