gem5
v20.0.0.2
|
Iterator to the circular queue. More...
#include <circular_queue.hh>
Public Types | |
using | value_type = T |
Iterator Traits. More... | |
using | difference_type = std::ptrdiff_t |
using | reference = value_type & |
using | const_reference = const value_type & |
using | pointer = value_type * |
using | const_pointer = const value_type * |
using | iterator_category = std::random_access_iterator_tag |
Public Member Functions | |
iterator (CircularQueue *cq, uint32_t idx, uint32_t round) | |
iterator () | |
Trait reference type iterator satisfies OutputIterator, therefore reference must be T&. More... | |
iterator (const iterator &it) | |
iterator & | operator= (const iterator &it) |
~iterator () | |
bool | dereferenceable () const |
Test dereferenceability. More... | |
bool | operator== (const iterator &that) const |
InputIterator. More... | |
bool | operator!= (const iterator &that) |
Inequality operator. More... | |
reference | operator* () |
Dereference operator. More... | |
const_reference | operator* () const |
pointer | operator-> () |
Dereference operator. More... | |
const_pointer | operator-> () const |
iterator & | operator++ () |
Pre-increment operator. More... | |
iterator | operator++ (int) |
Post-increment operator. More... | |
iterator & | operator-- () |
Pre-decrement operator. More... | |
iterator | operator-- (int) |
Post-decrement operator. More... | |
iterator & | operator+= (const difference_type &t) |
RandomAccessIterator requirements. More... | |
iterator & | operator-= (const difference_type &t) |
iterator | operator+ (const difference_type &t) |
Addition operator. More... | |
iterator | operator- (const difference_type &t) |
Substraction operator. More... | |
difference_type | operator- (const iterator &that) |
Difference operator. More... | |
template<typename Idx > | |
std::enable_if< std::is_integral< Idx >::value, reference >::type | operator[] (const Idx &index) |
Index operator. More... | |
bool | operator< (const iterator &that) const |
Comparisons. More... | |
bool | operator> (const iterator &that) const |
bool | operator>= (const iterator &that) const |
bool | operator<= (const iterator &that) const |
size_t | idx () const |
OutputIterator has no extra requirements. More... | |
Public Attributes | |
CircularQueue * | _cq |
uint32_t | _idx |
uint32_t | _round |
Private Member Functions | |
bool | decrementable () const |
ForwardIterator The multipass guarantee is provided by the reliance on _idx. More... | |
Friends | |
iterator | operator+ (const difference_type &t, iterator &it) |
iterator | operator- (const difference_type &t, iterator &it) |
Iterator to the circular queue.
iterator implementation to provide the circular-ness that the standard std::vector<T>::iterator does not implement. Iterators to a queue are represented by a pair of a character and the round counter. For the character, '*' denotes the element pointed to by the iterator if it is valid. 'x' denotes the element pointed to by the iterator when it is BTB or PTE. E.g.:
Definition at line 151 of file circular_queue.hh.
using CircularQueue< T >::iterator::const_pointer = const value_type* |
Definition at line 166 of file circular_queue.hh.
using CircularQueue< T >::iterator::const_reference = const value_type& |
Definition at line 164 of file circular_queue.hh.
using CircularQueue< T >::iterator::difference_type = std::ptrdiff_t |
Definition at line 162 of file circular_queue.hh.
using CircularQueue< T >::iterator::iterator_category = std::random_access_iterator_tag |
Definition at line 167 of file circular_queue.hh.
using CircularQueue< T >::iterator::pointer = value_type* |
Definition at line 165 of file circular_queue.hh.
using CircularQueue< T >::iterator::reference = value_type& |
Definition at line 163 of file circular_queue.hh.
using CircularQueue< T >::iterator::value_type = T |
Iterator Traits.
Definition at line 161 of file circular_queue.hh.
|
inline |
Definition at line 157 of file circular_queue.hh.
|
inline |
Trait reference type iterator satisfies OutputIterator, therefore reference must be T&.
Definition at line 175 of file circular_queue.hh.
Referenced by CircularQueue< Tick >::begin(), CircularQueue< Tick >::end(), and CircularQueue< Tick >::getIterator().
|
inline |
Definition at line 177 of file circular_queue.hh.
|
inline |
Definition at line 189 of file circular_queue.hh.
|
inlineprivate |
ForwardIterator The multipass guarantee is provided by the reliance on _idx.
BidirectionalIterator requirements. Test decrementability. An iterator to a non-null circular queue is not-decrementable if it is pointing to the head element, unless the queue is full and we are talking about the past-the-end iterator. In that case, the iterator round equals the cq round unless the head is at the zero position and the round is one more than the cq round.
Definition at line 292 of file circular_queue.hh.
References CircularQueue< T >::_round, CircularQueue< T >::empty(), and CircularQueue< T >::head().
Referenced by CircularQueue< T >::iterator::operator--().
|
inline |
Test dereferenceability.
An iterator is dereferenceable if it is pointing to a non-null circular queue, it is not the past-the-end iterator and the index is a valid index to that queue. PTE test is required to distinguish between:
Definition at line 205 of file circular_queue.hh.
References CircularQueue< T >::isValidIdx().
Referenced by LSQUnit< Impl >::willWB(), and LSQUnit< Impl >::writebackStores().
|
inline |
OutputIterator has no extra requirements.
Definition at line 405 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx.
Referenced by CircularQueue< Tick >::advance_tail(), LSQUnit< Impl >::completeStore(), CircularQueue< Tick >::isValidIdx(), and LSQUnit< Impl >::writebackStores().
|
inline |
Inequality operator.
Conversely, two iterators are different if they both point to different circular queues or they point to different elements.
Definition at line 228 of file circular_queue.hh.
|
inline |
Dereference operator.
Definition at line 234 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx.
|
inline |
Definition at line 240 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx.
|
inline |
|
inline |
Pre-increment operator.
Definition at line 260 of file circular_queue.hh.
References CircularQueue< T >::iterator::_round, and CircularQueue< T >::increase().
|
inline |
|
inline |
RandomAccessIterator requirements.
Definition at line 316 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx, CircularQueue< T >::capacity(), and CircularQueue< T >::moduloAdd().
|
inline |
|
inline |
Difference operator.
that + ret == this
Definition at line 367 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx, CircularQueue< T >::iterator::_round, CircularQueue< T >::capacity(), CircularQueue< T >::sub(), and type.
|
inline |
Pre-decrement operator.
Definition at line 302 of file circular_queue.hh.
References CircularQueue< T >::iterator::_round, CircularQueue< T >::decrease(), and CircularQueue< T >::iterator::decrementable().
|
inline |
|
inline |
Definition at line 324 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx, CircularQueue< T >::capacity(), CircularQueue< T >::moduloSub(), and ArmISA::t.
|
inline |
Dereference operator.
Rely on operator* to check for dereferenceability.
Definition at line 249 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx.
|
inline |
Definition at line 254 of file circular_queue.hh.
References CircularQueue< T >::iterator::_idx.
|
inline |
Comparisons.
Definition at line 387 of file circular_queue.hh.
References CircularQueue< T >::iterator::_cq, CircularQueue< T >::iterator::_idx, and CircularQueue< T >::iterator::_round.
|
inline |
Definition at line 401 of file circular_queue.hh.
|
inline |
Definition at line 181 of file circular_queue.hh.
References CircularQueue< T >::iterator::_cq, CircularQueue< T >::iterator::_idx, and CircularQueue< T >::iterator::_round.
|
inline |
InputIterator.
Equality operator. Two iterators must point to the same, possibly null, circular queue and the same element on it, including PTE, to be equal. In case the clients the the PTE iterator and then grow on the back and expect it to work, we have to check if the PTE is still PTE
Definition at line 218 of file circular_queue.hh.
References CircularQueue< T >::iterator::_cq, CircularQueue< T >::iterator::_idx, and CircularQueue< T >::iterator::_round.
|
inline |
Definition at line 395 of file circular_queue.hh.
|
inline |
Definition at line 398 of file circular_queue.hh.
|
inline |
Index operator.
The use of * tests for dereferenceability.
Definition at line 383 of file circular_queue.hh.
References MipsISA::index.
|
friend |
Definition at line 345 of file circular_queue.hh.
|
friend |
Definition at line 358 of file circular_queue.hh.
CircularQueue* CircularQueue< T >::iterator::_cq |
Definition at line 152 of file circular_queue.hh.
Referenced by CircularQueue< T >::iterator::operator<(), CircularQueue< T >::iterator::operator=(), and CircularQueue< T >::iterator::operator==().
uint32_t CircularQueue< T >::iterator::_idx |
Definition at line 153 of file circular_queue.hh.
Referenced by CircularQueue< T >::iterator::idx(), CircularQueue< T >::iterator::operator*(), CircularQueue< T >::iterator::operator+=(), CircularQueue< T >::iterator::operator-(), CircularQueue< T >::iterator::operator-=(), CircularQueue< T >::iterator::operator->(), CircularQueue< T >::iterator::operator<(), CircularQueue< T >::iterator::operator=(), and CircularQueue< T >::iterator::operator==().
uint32_t CircularQueue< T >::iterator::_round |
Definition at line 154 of file circular_queue.hh.
Referenced by CircularQueue< Tick >::advance_tail(), CircularQueue< Tick >::end(), CircularQueue< Tick >::getIterator(), CircularQueue< T >::iterator::operator++(), CircularQueue< T >::iterator::operator-(), CircularQueue< T >::iterator::operator--(), CircularQueue< T >::iterator::operator<(), CircularQueue< T >::iterator::operator=(), CircularQueue< T >::iterator::operator==(), and CircularQueue< Tick >::pop_back().