28 [[
nodiscard]]
T*
pointer()
const {
return reinterpret_cast<T*
>(
static_cast<std::intptr_t
>(mOffset)); }
64 template<
typename Po
intedType,
class DifferenceType = std::ptrdiff_t,
class OffsetType = std::
intptr_t, std::
size_t OffsetAlignment = alignof(OffsetType)>
76 using reference =
typename std::add_lvalue_reference_t<PointedType>;
132 template<
class T2,
class P2,
class O2, std::
size_t A2>
136 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
140 template<
class T2,
class P2,
class O2, std::
size_t A2>
144 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
148 template<
class T2,
class P2,
class O2, std::
size_t A2>
152 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
156 template<
class T2,
class P2,
class O2, std::
size_t A2>
160 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
328 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
334 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
340 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
346 template<
class T1,
class P1,
class O1, std::
size_t A1,
class T2,
class P2,
class O2, std::
size_t A2>
353template<
typename Po
intedType,
class DifferenceType,
class OffsetType, std::
size_t OffsetAlignment>
354struct std::hash<
CeresEngine::OffsetPtr<PointedType, DifferenceType, OffsetType, OffsetAlignment>> {
356 [[nodiscard]]
size_t operator()(
const T& value)
const noexcept {
return std::hash<PointedType*>{}(value.get()); }
#define CE_ASSERT(...)
Definition Macros.hpp:323
#define CE_EXPLICIT(EXPR)
Definition Macros.hpp:413
OffsetType mOffset
Definition OffsetPtr.hpp:21
OffsetType offset() const
Definition OffsetPtr.hpp:27
OffsetPointerCaster(OffsetType offset)
Definition OffsetPtr.hpp:24
T * pointer() const
Definition OffsetPtr.hpp:28
OffsetPointerCaster(const volatile T *p)
Definition OffsetPtr.hpp:25
Definition OffsetPtr.hpp:17
A special pointer that stores the pointer as an offset of the pointee to the OffsetPtr instance itsel...
Definition OffsetPtr.hpp:65
friend bool operator!=(const OffsetPtr &pt1, pointer pt2) noexcept
Checks if two pointers point to the same object.
Definition OffsetPtr.hpp:305
friend bool operator==(const OffsetPtr &pt1, pointer pt2) noexcept
Definition OffsetPtr.hpp:302
pointer get() const noexcept
Obtains raw pointer from offset.
Definition OffsetPtr.hpp:165
friend bool operator==(pointer pt1, const OffsetPtr &pt2) noexcept
Definition OffsetPtr.hpp:284
OffsetPtr operator--(int) noexcept
Postfix increment operator. Decrements the pointer by 1.
Definition OffsetPtr.hpp:219
OffsetType mOffset
Definition OffsetPtr.hpp:71
friend OffsetPtr operator-(difference_type diff, OffsetPtr right) noexcept
Definition OffsetPtr.hpp:257
OffsetPtr & operator=(const OffsetPtr< T2, DifferenceType, OffsetType, OffsetAlignment > &ptr) noexcept
Assigns the OffsetPtr by copying another.
Definition OffsetPtr.hpp:118
friend OffsetPtr< T1, P1, O1, A1 > static_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of static_cast between pointers.
Definition OffsetPtr.hpp:329
friend bool operator>=(pointer pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator>=.
Definition OffsetPtr.hpp:299
OffsetPtr & operator--(void) noexcept
Prefix increment operator. Decrements the pointer by 1.
Definition OffsetPtr.hpp:213
friend OffsetPtr operator+(OffsetPtr left, difference_type diff) noexcept
Definition OffsetPtr.hpp:245
friend bool operator<(const OffsetPtr &pt1, pointer pt2) noexcept
Compares two pointers using operator<.
Definition OffsetPtr.hpp:308
friend bool operator<=(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator<=.
Definition OffsetPtr.hpp:275
pointer operator->() const noexcept
Implements the pointer-like -> operator. It can return 0 pointer.
Definition OffsetPtr.hpp:171
OffsetPtr() noexcept=default
friend bool operator>(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator>.
Definition OffsetPtr.hpp:278
friend bool operator!=(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Checks if two pointers point to the same object.
Definition OffsetPtr.hpp:269
static OffsetPtr pointer_to(reference r) noexcept
Creates a new OffsetPtr from a raw pointer.
Definition OffsetPtr.hpp:236
OffsetType offset_type
Definition OffsetPtr.hpp:80
static constexpr OffsetType nullOffset
Definition OffsetPtr.hpp:70
friend OffsetPtr< T1, P1, O1, A1 > const_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of const_cast between pointers.
Definition OffsetPtr.hpp:335
friend void swap(OffsetPtr &left, OffsetPtr &right) noexcept
Swaps left and right pointers.
Definition OffsetPtr.hpp:320
friend bool operator!=(pointer pt1, const OffsetPtr &pt2) noexcept
Checks if two pointers point to the same object.
Definition OffsetPtr.hpp:287
OffsetPtr & operator-=(difference_type offset) noexcept
Decrements the pointer by the given offset.
Definition OffsetPtr.hpp:194
friend bool operator==(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Definition OffsetPtr.hpp:266
OffsetPtr operator++(int) noexcept
Postfix increment operator. Increments the pointer by 1.
Definition OffsetPtr.hpp:206
friend OffsetPtr< T1, P1, O1, A1 > reinterpret_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of reinterpret_cast between pointers.
Definition OffsetPtr.hpp:347
friend bool operator<=(const OffsetPtr &pt1, pointer pt2) noexcept
Compares two pointers using operator<=.
Definition OffsetPtr.hpp:311
std::random_access_iterator_tag iterator_category
Definition OffsetPtr.hpp:79
friend bool operator>=(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator>=.
Definition OffsetPtr.hpp:281
OffsetPtr & operator++(void) noexcept
Prefix increment operator. Increments the pointer by 1.
Definition OffsetPtr.hpp:200
friend bool operator>(pointer pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator>.
Definition OffsetPtr.hpp:296
typename std::add_lvalue_reference_t< PointedType > reference
Definition OffsetPtr.hpp:76
reference operator*() const noexcept
Implements the dereferencing operator, if it is nullptr, behavior is undefined.
Definition OffsetPtr.hpp:175
offset_type getOffset() const noexcept
Obtains the internal offset of the pointer.
Definition OffsetPtr.hpp:168
friend bool operator<(pointer pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator<.
Definition OffsetPtr.hpp:290
DifferenceType difference_type
Definition OffsetPtr.hpp:78
friend bool operator<=(pointer pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator<=.
Definition OffsetPtr.hpp:293
void reset() noexcept
Resets the pointer and sets it to nullptr.
Definition OffsetPtr.hpp:184
PointedType * pointer
Definition OffsetPtr.hpp:75
friend difference_type operator-(const OffsetPtr &pt, const OffsetPtr &pt2) noexcept
Definition OffsetPtr.hpp:263
friend bool operator>(const OffsetPtr &pt1, pointer pt2) noexcept
Compares two pointers using operator>.
Definition OffsetPtr.hpp:314
friend OffsetPtr operator+(difference_type diff, OffsetPtr right) noexcept
Definition OffsetPtr.hpp:239
std::remove_cv_t< PointedType > value_type
Definition OffsetPtr.hpp:77
friend bool operator>=(const OffsetPtr &pt1, pointer pt2) noexcept
Compares two pointers using operator>=.
Definition OffsetPtr.hpp:317
~OffsetPtr()=default
Default destructor.
reference operator[](difference_type idx) const noexcept
Implements the indexing operator.
Definition OffsetPtr.hpp:178
OffsetPtr & operator+=(difference_type offset) noexcept
Increments the pointer by the given offset.
Definition OffsetPtr.hpp:188
PointedType element_type
Definition OffsetPtr.hpp:74
OffsetPtr & operator=(const OffsetPtr &ptr) noexcept
Assigns the OffsetPtr by copying another.
Definition OffsetPtr.hpp:111
friend bool operator<(const OffsetPtr &pt1, const OffsetPtr &pt2) noexcept
Compares two pointers using operator<.
Definition OffsetPtr.hpp:272
OffsetPtr & operator=(const pointer from) noexcept
Assigns the OffsetPtr from a raw pointer.
Definition OffsetPtr.hpp:105
bool operator!() const noexcept
Checks if the pointer is nullptr.
Definition OffsetPtr.hpp:231
friend OffsetPtr operator-(OffsetPtr left, difference_type diff) noexcept
Definition OffsetPtr.hpp:251
friend OffsetPtr< T1, P1, O1, A1 > dynamic_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of dynamic_cast between pointers.
Definition OffsetPtr.hpp:341
Definition Application.hpp:19
OffsetPtr< T1, P1, O1, A1 > reinterpret_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of reinterpret_cast between pointers.
Definition OffsetPtr.hpp:347
OffsetType offset_ptr_offset(const volatile void *ptr, const volatile void *thisPtr)
Definition OffsetPtr.hpp:31
OffsetPtr< T1, P1, O1, A1 > dynamic_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of dynamic_cast between pointers.
Definition OffsetPtr.hpp:341
OffsetPtr< T1, P1, O1, A1 > const_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of const_cast between pointers.
Definition OffsetPtr.hpp:335
OffsetType offset_ptr_offset_from_other(const volatile void *thisPtr, const volatile void *otherPtr, OffsetType otherOffset)
Definition OffsetPtr.hpp:42
OffsetPtr< T1, P1, O1, A1 > static_pointer_cast(const OffsetPtr< T2, P2, O2, A2 > &r) noexcept
Simulation of static_cast between pointers.
Definition OffsetPtr.hpp:329
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
void * offset_ptr_raw_pointer(const volatile void *thisPtr, OffsetType offset)
Definition OffsetPtr.hpp:52
Definition OffsetPtr.hpp:127
Definition OffsetPtr.hpp:128
Definition OffsetPtr.hpp:129
Definition OffsetPtr.hpp:126