base: Fix style issues in the circular queue.

Change-Id: I61da587d760019a338522f098745f375a5ce429e
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/38477
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Maintainer: Gabe Black <gabe.black@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2020-12-03 18:46:06 -08:00
parent acfb233685
commit be7043f079

View File

@@ -59,7 +59,7 @@
* - Round is the counter of how many times the Tail has wrapped around.
* A queue is empty when
* Head == (Tail + 1 mod Capacity) && IsEmpty?.
* Conversely, a queue if full when
* Conversely, a queue is full when
* Head == (Tail + 1 mod Capacity) && !IsEmpty?.
* Comments may show depictions of the underlying vector in the following
* format: '|' delimit the 'cells' of the underlying vector. '-' represents
@@ -90,9 +90,9 @@ class CircularQueue : private std::vector<T>
using typename Base::reference;
using typename Base::const_reference;
const uint32_t _capacity;
uint32_t _head;
uint32_t _tail;
uint32_t _empty;
uint32_t _head = 1;
uint32_t _tail = 0;
uint32_t _empty = true;
/** Counter for how many times the tail wraps around.
* Some parts of the code rely on getting the past the end iterator, and
@@ -100,7 +100,7 @@ class CircularQueue : private std::vector<T>
* ambiguity, we need the round number to guarantee that it did not become
* a before-the-beginning iterator.
*/
uint32_t _round;
uint32_t _round = 0;
/** General modular addition. */
static uint32_t
@@ -126,12 +126,14 @@ class CircularQueue : private std::vector<T>
return -((op2 - op1) % size);
}
void increase(uint32_t& v, size_t delta = 1)
void
increase(uint32_t& v, size_t delta=1)
{
v = moduloAdd(v, delta, _capacity);
}
void decrease(uint32_t& v)
void
decrease(uint32_t& v)
{
v = (v ? v : _capacity) - 1;
}
@@ -152,17 +154,19 @@ class CircularQueue : private std::vector<T>
* (4,F,0,1,R): |[o|o]|(x,R)|-| (4,F,3,0): |o]|(x,R)|-|[o|
*/
public:
struct iterator {
CircularQueue* _cq;
uint32_t _idx;
uint32_t _round;
struct iterator
{
public:
CircularQueue* _cq = nullptr;
uint32_t _idx = 0;
uint32_t _round = 0;
/**
* @ingroup api_base_utils
*/
iterator(CircularQueue* cq, uint32_t idx, uint32_t round)
: _cq(cq), _idx(idx), _round(round) {}
iterator() = default;
/**
* Iterator Traits
@@ -185,16 +189,12 @@ class CircularQueue : private std::vector<T>
static_assert(std::is_same<reference, T&>::value,
"reference type is not assignable as required");
/**
* @ingroup api_base_utils
*/
iterator() : _cq(nullptr), _idx(0), _round(0) { }
/**
* @ingroup api_base_utils
*/
iterator(const iterator& it)
: _cq(it._cq), _idx(it._idx), _round(it._round) {}
: _cq(it._cq), _idx(it._idx), _round(it._round)
{}
/**
* @ingroup api_base_utils
@@ -208,11 +208,6 @@ class CircularQueue : private std::vector<T>
return *this;
}
/**
* @ingroup api_base_utils
*/
~iterator() { _cq = nullptr; _idx = 0; _round = 0; }
/**
* Test dereferenceability.
* An iterator is dereferenceable if it is pointing to a non-null
@@ -246,7 +241,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
bool operator==(const iterator& that) const
bool
operator==(const iterator& that) const
{
return _cq == that._cq && _idx == that._idx &&
_round == that._round;
@@ -259,28 +255,27 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
bool operator!=(const iterator& that)
{
return !(*this == that);
}
bool operator!=(const iterator& that) { return !(*this == that); }
/**
* Dereference operator.
*
* @ingroup api_base_utils
*/
reference operator*()
reference
operator*()
{
/* this has to be dereferenceable. */
// This has to be dereferenceable.
return (*_cq)[_idx];
}
/**
* @ingroup api_base_utils
*/
const_reference operator*() const
const_reference
operator*() const
{
/* this has to be dereferenceable. */
// This has to be dereferenceable.
return (*_cq)[_idx];
}
@@ -290,25 +285,20 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
pointer operator->()
{
return &((*_cq)[_idx]);
}
pointer operator->() { return &((*_cq)[_idx]); }
/**
* @ingroup api_base_utils
*/
const_pointer operator->() const
{
return &((*_cq)[_idx]);
}
const_pointer operator->() const { return &((*_cq)[_idx]); }
/**
* Pre-increment operator.
*
* @ingroup api_base_utils
*/
iterator& operator++()
iterator&
operator++()
{
/* this has to be dereferenceable. */
_cq->increase(_idx);
@@ -358,7 +348,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
iterator& operator--()
iterator&
operator--()
{
/* this has to be decrementable. */
assert(decrementable());
@@ -373,14 +364,21 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
iterator operator--(int ) { iterator t = *this; --*this; return t; }
iterator
operator--(int)
{
iterator t = *this;
--*this;
return t;
}
/**
* RandomAccessIterator requirements.
*
* @ingroup api_base_utils
*/
iterator& operator+=(const difference_type& t)
iterator&
operator+=(const difference_type& t)
{
assert(_cq);
_round += (t + _idx) / _cq->capacity();
@@ -391,7 +389,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
iterator& operator-=(const difference_type& t)
iterator&
operator-=(const difference_type& t)
{
assert(_cq);
@@ -410,7 +409,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
iterator operator+(const difference_type& t)
iterator
operator+(const difference_type& t)
{
iterator ret(*this);
return ret += t;
@@ -419,7 +419,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
friend iterator operator+(const difference_type& t, iterator& it)
friend iterator
operator+(const difference_type& t, iterator& it)
{
iterator ret = it;
return ret += t;
@@ -430,7 +431,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
iterator operator-(const difference_type& t)
iterator
operator-(const difference_type& t)
{
iterator ret(*this);
return ret -= t;
@@ -439,7 +441,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
friend iterator operator-(const difference_type& t, iterator& it)
friend iterator
operator-(const difference_type& t, iterator& it)
{
iterator ret = it;
return ret -= t;
@@ -451,7 +454,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
difference_type operator-(const iterator& that)
difference_type
operator-(const iterator& that)
{
/* If a is already at the end, we can safely return 0. */
auto ret = _cq->sub(this->_idx, that._idx, _cq->capacity());
@@ -470,7 +474,10 @@ class CircularQueue : private std::vector<T>
*/
template<typename Idx>
typename std::enable_if_t<std::is_integral<Idx>::value, reference>
operator[](const Idx& index) { return *(*this + index); }
operator[](const Idx& index)
{
return *(*this + index);
}
/**
* Comparisons.
@@ -488,21 +495,17 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
bool
operator>(const iterator& that) const
{ return !(*this <= that); }
bool operator>(const iterator& that) const { return !(*this <= that); }
/**
* @ingroup api_base_utils
*/
bool operator>=(const iterator& that) const
{ return !(*this < that); }
bool operator>=(const iterator& that) const { return !(*this < that); }
/**
* @ingroup api_base_utils
*/
bool operator<=(const iterator& that) const
{ return !(that < *this); }
bool operator<=(const iterator& that) const { return !(that < *this); }
/**
* OutputIterator has no extra requirements.
@@ -519,8 +522,7 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
explicit CircularQueue(uint32_t size = 0)
: _capacity(size), _head(1), _tail(0), _empty(true), _round(0)
explicit CircularQueue(uint32_t size=0) : _capacity(size)
{
Base::resize(size);
}
@@ -533,7 +535,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void flush()
void
flush()
{
_head = 1;
_round = 0;
@@ -544,7 +547,8 @@ class CircularQueue : private std::vector<T>
/**
* Test if the index is in the range of valid elements.
*/
bool isValidIdx(size_t idx) const
bool
isValidIdx(size_t idx) const
{
/* An index is invalid if:
* - The queue is empty.
@@ -568,7 +572,8 @@ class CircularQueue : private std::vector<T>
* Test if the index is in the range of valid elements.
* The round counter is used to disambiguate aliasing.
*/
bool isValidIdx(size_t idx, uint32_t round) const
bool
isValidIdx(size_t idx, uint32_t round) const
{
/* An index is valid if:
* - The queue is not empty.
@@ -630,7 +635,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
uint32_t size() const
uint32_t
size() const
{
if (_empty)
return 0;
@@ -640,12 +646,14 @@ class CircularQueue : private std::vector<T>
return _capacity - _head + _tail + 1;
}
uint32_t moduloAdd(uint32_t s1, uint32_t s2) const
uint32_t
moduloAdd(uint32_t s1, uint32_t s2) const
{
return moduloAdd(s1, s2, _capacity);
}
uint32_t moduloSub(uint32_t s1, uint32_t s2) const
uint32_t
moduloSub(uint32_t s1, uint32_t s2) const
{
return moduloSub(s1, s2, _capacity);
}
@@ -660,9 +668,11 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void pop_front(size_t num_elem = 1)
void
pop_front(size_t num_elem=1)
{
if (num_elem == 0) return;
if (num_elem == 0)
return;
auto hIt = begin();
hIt += num_elem;
assert(hIt <= end());
@@ -675,9 +685,10 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void pop_back()
void
pop_back()
{
assert (!_empty);
assert(!_empty);
_empty = _head == _tail;
if (_tail == 0)
--_round;
@@ -689,7 +700,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void push_back(typename Base::value_type val)
void
push_back(typename Base::value_type val)
{
advance_tail();
(*this)[_tail] = val;
@@ -701,7 +713,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void advance_tail()
void
advance_tail()
{
increase(_tail);
if (_tail == 0)
@@ -720,7 +733,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
void advance_tail(uint32_t len)
void
advance_tail(uint32_t len)
{
for (auto idx = 0; idx < len; idx++)
advance_tail();
@@ -741,7 +755,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
bool full() const
bool
full() const
{
return !_empty &&
(_tail + 1 == _head || (_tail + 1 == _capacity && _head == 0));
@@ -752,7 +767,8 @@ class CircularQueue : private std::vector<T>
*
* @ingroup api_base_utils
*/
iterator begin()
iterator
begin()
{
if (_empty)
return end();
@@ -766,7 +782,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
iterator begin() const
iterator
begin() const
{
if (_empty)
return end();
@@ -781,7 +798,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
iterator end()
iterator
end()
{
auto poi = moduloAdd(_tail, 1);
auto round = _round;
@@ -793,7 +811,8 @@ class CircularQueue : private std::vector<T>
/**
* @ingroup api_base_utils
*/
iterator end() const
iterator
end() const
{
auto poi = moduloAdd(_tail, 1);
auto round = _round;
@@ -809,7 +828,8 @@ class CircularQueue : private std::vector<T>
* possible, then the round value is _round, unless _tail is at the end of
* the storage, in which case the PTE wraps up and becomes _round + 1
*/
iterator getIterator(size_t idx)
iterator
getIterator(size_t idx)
{
assert(isValidIdx(idx) || moduloAdd(_tail, 1) == idx);
if (_empty)