acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
rear_iterator.h
1//
2// Created by camilo on 2025-08-12 16:28 <3ThomasBorregaardSørensen!!
3//
4#pragma once
5
6
7template < typename TYPE >
8class pointer_rear_iterator
9{
10public:
11
12
13 using ITEM = non_const < TYPE >;
14 using ITEM_POINTER = ITEM *;
15
16 using iterator = ::pointer_rear_iterator < ITEM >;
17 using const_iterator = ::pointer_rear_iterator < const ITEM >;
18
19
20 TYPE* m_p;
21
22
23 pointer_rear_iterator() { m_p = nullptr; }
24 pointer_rear_iterator(const ITEM * p) { m_p = (TYPE *) p; }
25 pointer_rear_iterator(const iterator & i) { m_p = (TYPE *)i.m_p; }
26 pointer_rear_iterator(const const_iterator & i) { m_p = (TYPE *)i.m_p; }
27
28
29 auto& operator *() { return *m_p; }
30 auto& operator *() const { return *m_p; }
31 auto operator ->() { return m_p; }
32 auto operator ->() const { return m_p; }
33
34 pointer_rear_iterator & operator ++()
35 {
36 m_p--;
37 return *this;
38
39 }
40 pointer_rear_iterator& operator --()
41 {
42 m_p++;
43 return *this;
44
45 }
46
47 pointer_rear_iterator operator ++(::i32)
48 {
49 auto p = *this;
50 m_p--;
51
52 return p;
53
54 }
55 pointer_rear_iterator operator --(::i32)
56 {
57 auto p = *this;
58 m_p++;
59
60 return p;
61
62 }
63 template < prototype_integral INTEGRAL >
64 pointer_rear_iterator operator +(INTEGRAL i)
65 {
66
67 return m_p - i;
68
69 }
70 template < prototype_integral INTEGRAL >
71 pointer_rear_iterator operator -(INTEGRAL i)
72 {
73
74 return m_p + i;
75
76 }
77
78 template < prototype_integral INTEGRAL >
79 pointer_rear_iterator & operator +=(INTEGRAL i)
80 {
81 m_p -= i;
82 return *this;
83
84 }
85 template < prototype_integral INTEGRAL >
86 pointer_rear_iterator & operator -=(INTEGRAL i)
87 {
88 m_p += i;
89 return *this;
90
91 }
92
93
94 bool operator ==(const pointer_rear_iterator& p) const { return m_p == p.m_p; }
95 bool operator ==(const TYPE * p) const { return m_p == p; }
96 ::std::strong_ordering operator <=>(const pointer_rear_iterator& p) const { return this->m_p <=> p.m_p; }
97
98 ::collection::count operator - (const pointer_rear_iterator& p) const { return this->m_p - p.m_p; }
99
100};