3#include <StormByte/exception.hxx>
24 template <
typename Container>
29 using value_type =
typename Container::value_type;
30 using size_type =
typename Container::size_type;
31 using difference_type =
typename Container::difference_type;
32 using reference =
typename Container::reference;
33 using const_reference =
typename Container::const_reference;
34 using pointer =
typename Container::pointer;
35 using const_pointer =
typename Container::const_pointer;
44 using iterator_category = std::random_access_iterator_tag;
45 using value_type =
typename Container::value_type;
46 using difference_type =
typename Container::difference_type;
47 using pointer =
typename Container::pointer;
48 using reference =
typename Container::reference;
136 typename Container::iterator m_it;
142 Iterator(
typename Container::iterator it): m_it(it) {}
152 using iterator_category = std::random_access_iterator_tag;
153 using value_type =
typename Container::value_type;
154 using difference_type =
typename Container::difference_type;
155 using pointer =
typename Container::const_pointer;
156 using reference =
typename Container::const_reference;
244 typename Container::const_iterator m_it;
250 ConstIterator(
typename Container::const_iterator it): m_it(it) {}
253 using iterator = Iterator;
254 using const_iterator = ConstIterator;
255 using reverse_iterator = std::reverse_iterator<iterator>;
256 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
344 reverse_iterator
rbegin() noexcept {
return reverse_iterator(
end()); }
350 reverse_iterator
rend() noexcept {
return reverse_iterator(
begin()); }
356 const_reverse_iterator
rbegin() const noexcept {
return const_reverse_iterator(
end()); }
362 const_reverse_iterator
rend() const noexcept {
return const_reverse_iterator(
begin()); }
368 const_reverse_iterator
crbegin() const noexcept {
return const_reverse_iterator(
cend()); }
374 const_reverse_iterator
crend() const noexcept {
return const_reverse_iterator(
cbegin()); }
395 throw OutOfBoundsError(
"Index {} out of bounds in Iterable::operator[]", i);
406 throw OutOfBoundsError(
"Index {} out of bounds in Iterable::operator[]", i);
414 void add(
const value_type& value) {
m_data.push_back(value); }
420 void add(value_type&& value) {
m_data.push_back(std::move(value)); }
Wrapper const iterator for Iterable.
Definition iterable.hxx:149
ConstIterator operator++(int)
Post-increment operator.
Definition iterable.hxx:180
ConstIterator & operator-=(difference_type n)
Compound subtraction operator.
Definition iterable.hxx:206
ConstIterator & operator--()
Pre-decrement operator.
Definition iterable.hxx:186
ConstIterator operator-(difference_type n) const
Subtraction operator.
Definition iterable.hxx:220
reference operator*() const
Dereference operator.
Definition iterable.hxx:162
pointer operator->() const
Arrow operator.
Definition iterable.hxx:168
ConstIterator operator+(difference_type n) const
Addition operator.
Definition iterable.hxx:213
bool operator!=(const ConstIterator &other) const
Inequality operator.
Definition iterable.hxx:241
ConstIterator & operator++()
Pre-increment operator.
Definition iterable.hxx:174
ConstIterator operator--(int)
Post-decrement operator.
Definition iterable.hxx:192
bool operator==(const ConstIterator &other) const
Subscript operator.
Definition iterable.hxx:234
difference_type operator-(const ConstIterator &other) const
Subtraction operator between two const iterators.
Definition iterable.hxx:227
ConstIterator & operator+=(difference_type n)
Compound addition operator.
Definition iterable.hxx:199
Wrapper iterator for Iterable.
Definition iterable.hxx:41
Iterator & operator++()
Pre-increment operator.
Definition iterable.hxx:66
bool operator!=(const Iterator &other) const
Inequality operator.
Definition iterable.hxx:133
reference operator*()
Dereference operator.
Definition iterable.hxx:54
Iterator & operator+=(difference_type n)
Compound addition operator.
Definition iterable.hxx:91
Iterator operator++(int)
Post-increment operator.
Definition iterable.hxx:72
Iterator operator--(int)
Post-decrement operator.
Definition iterable.hxx:84
Iterator & operator-=(difference_type n)
Compound subtraction operator.
Definition iterable.hxx:98
Iterator operator+(difference_type n) const
Addition operator.
Definition iterable.hxx:105
bool operator==(const Iterator &other) const
Subscript operator.
Definition iterable.hxx:126
Iterator & operator--()
Pre-decrement operator.
Definition iterable.hxx:78
Iterator operator-(difference_type n) const
Subtraction operator.
Definition iterable.hxx:112
pointer operator->()
Arrow operator.
Definition iterable.hxx:60
difference_type operator-(const Iterator &other) const
Subtraction operator between two iterators.
Definition iterable.hxx:119
A generic iterable container wrapper.
Definition iterable.hxx:25
const_reverse_iterator crbegin() const noexcept
Gets const reverse begin iterator.
Definition iterable.hxx:368
const_iterator cend() const noexcept
Gets const end iterator.
Definition iterable.hxx:338
reverse_iterator rend() noexcept
Gets reverse end iterator.
Definition iterable.hxx:350
const_reverse_iterator rbegin() const noexcept
Gets const reverse begin iterator.
Definition iterable.hxx:356
virtual ~Iterable()=default
Virtual destructor.
void add(const value_type &value)
Adds an element to the container.
Definition iterable.hxx:414
void add(value_type &&value)
Adds an element to the container (move version)
Definition iterable.hxx:420
iterator end() noexcept
Gets end iterator.
Definition iterable.hxx:314
Iterable(Container &&data)
Move constructor from existing container.
Definition iterable.hxx:273
const_iterator cbegin() const noexcept
Gets const begin iterator.
Definition iterable.hxx:332
Iterable(Iterable &&)=default
Move constructor.
reverse_iterator rbegin() noexcept
Gets reverse begin iterator.
Definition iterable.hxx:344
reference operator[](size_type i)
Access element at given index.
Definition iterable.hxx:393
Iterable()=default
Default constructor.
bool empty() const noexcept
Checks if the container is empty.
Definition iterable.hxx:386
const_iterator end() const noexcept
Gets const end iterator.
Definition iterable.hxx:326
Iterable(const Iterable &)=default
Copy constructor.
const_reverse_iterator rend() const noexcept
Gets const reverse end iterator.
Definition iterable.hxx:362
size_type size() const noexcept
Gets the size of the container.
Definition iterable.hxx:380
Container m_data
Underlying container.
Definition iterable.hxx:27
Iterable(const Container &data)
Constructor from existing container.
Definition iterable.hxx:267
iterator begin() noexcept
Gets begin iterator.
Definition iterable.hxx:308
const_reference operator[](size_type i) const
Access element at given index (const version)
Definition iterable.hxx:404
const_reverse_iterator crend() const noexcept
Gets const reverse end iterator.
Definition iterable.hxx:374
const_iterator begin() const noexcept
Gets const begin iterator.
Definition iterable.hxx:320
Iterable & operator=(Iterable &&)=default
Move assignment operator.
Iterable & operator=(const Iterable &)=default
Copy assignment operator.
Exception thrown when an out-of-bounds access is attempted.
Definition exception.hxx:130
Main namespace for the StormByte library.