LeviLamina
Loading...
Searching...
No Matches
ContainerIterator.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/world/item/ItemStack.h"
5
6
7template <typename T>
9public:
10 using difference_type = std::ptrdiff_t;
11 using value_type = std::conditional_t<std::is_const_v<T>, ItemStack const, ItemStack>;
12 using pointer = value_type*;
13 using reference = value_type&;
14 using iterator_category = std::random_access_iterator_tag;
15
16 [[nodiscard]] constexpr ContainerIterator(T* container, int position) : mContainer(container), mSlot(position) {}
17
18 [[nodiscard]] constexpr bool operator==(const ContainerIterator& other) const {
19 return mSlot == other.mSlot && mContainer == other.mContainer;
20 }
21 [[nodiscard]] constexpr std::strong_ordering operator<=>(const ContainerIterator& other) const {
22 return mSlot <=> other.mSlot;
23 }
24 [[nodiscard]] constexpr reference operator*() const {
25 if constexpr (std::is_const_v<T>) {
26 return mContainer->getItem(mSlot);
27 } else {
28 return mContainer->getItemNonConst(mSlot);
29 }
30 }
31 [[nodiscard]] constexpr pointer operator->() const {
32 if constexpr (std::is_const_v<T>) {
33 return &mContainer->getItem(mSlot);
34 } else {
35 return mContainer->getItemNonConst(mSlot);
36 }
37 }
38
39 constexpr ContainerIterator& operator++() {
40 ++mSlot;
41 return *this;
42 }
43 constexpr ContainerIterator& operator--() {
44 --mSlot;
45 return *this;
46 }
47
48 constexpr ContainerIterator operator+(difference_type n) const { return ContainerIterator(mContainer, mSlot + n); }
49 constexpr ContainerIterator operator-(difference_type n) const { return ContainerIterator(mContainer, mSlot - n); }
50
51 constexpr ContainerIterator& operator+=(difference_type n) {
52 mSlot += n;
53 return *this;
54 }
55 constexpr ContainerIterator& operator-=(difference_type n) {
56 mSlot -= n;
57 return *this;
58 }
59
60 [[nodiscard]] constexpr reference operator[](difference_type n) const { return *(*this + n); }
61
62private:
63 T* mContainer;
64 int mSlot;
65};
Definition ContainerIterator.h:8
Definition ItemStack.h:25