Cogs.Foundation
|
Indexable queue where an element index is fixed through arbitrary enqueues and dequeues. More...
#include <FixedIndexQueue.h>
Public Types | |
typedef std::make_unsigned< IndexBaseType >::type | IndexType |
Unsigned type used for indices, typically uint32_t or uin64_t. | |
Public Member Functions | |
FixedIndexQueue () | |
Constructor. | |
const IndexType | capacity () const |
Returns the current capacity of the queue. | |
IndexType | empty () const |
Returns true if there are currently no elements in the queue. | |
IndexType | count () const |
Returns number of elements currently in the queue. | |
void | clear () |
Removes all entries from the queue, but will continue with new unused indices. | |
void | reset () |
Removes all entries from the queue, recycles indices and starts from zero. | |
void | shrink () |
Reduce capacity to the minimum needed to preserve the contents. | |
void | pushBack (Element e) |
Adds a new element to the back of the queue. | |
void | pushFront (Element e) |
Adds a new element to the front of the queue. | |
void | popFront () |
Removes the front from the queue. | |
Element & | operator[] (IndexType fixedIndex) |
Look up an element in the queue by a fixed index. | |
const Element & | operator[] (IndexType fixedIndex) const |
Look up an element in the queue by a fixed index. | |
Element & | front () |
Returns front element. | |
const Element & | front () const |
Returns front element. | |
Element & | back () |
Returns back element. | |
const Element & | back () const |
Returns back element. | |
IndexType | frontIndex () const |
Returns fixed index of front. | |
IndexType | backIndex () const |
Returns fixed index of current back element. | |
bool | validIndex (uint32_t fixedIndex) const |
Check if a fixed index is valid, that is, refers to an element in the queue. | |
Private Types | |
typedef std::make_signed< IndexBaseType >::type | SignedIndexType |
Signed helper type. | |
Private Member Functions | |
bool | noCapacity () const |
True if there is no free capacity left. | |
void | grow () |
Double the capacity of the queue. | |
void | resize (IndexType sizeL2New) |
Private Attributes | |
IndexType | sizeL2 = 0 |
IndexType | sizeMask = 0 |
IndexType | frontOffset = 0 |
IndexType | backOffset = 0 |
IndexType | offsetToFixedIndexShift = 0 |
Cogs::Memory::TypedBuffer< Element > | storage |
Indexable queue where an element index is fixed through arbitrary enqueues and dequeues.
typedef std::make_unsigned<IndexBaseType>::type Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::IndexType |
Unsigned type used for indices, typically uint32_t or uin64_t.
|
private |
Signed helper type.
|
inline |
|
inline |
Returns back element.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Returns back element.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Returns fixed index of current back element.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::validIndex().
|
inline |
Returns the current capacity of the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::FixedIndexQueue(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::grow().
|
inline |
Removes all entries from the queue, but will continue with new unused indices.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift.
|
inline |
Returns number of elements currently in the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::shrink().
|
inline |
Returns true if there are currently no elements in the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::back(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::front(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::popFront(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::validIndex().
|
inline |
Returns front element.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Returns front element.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Returns fixed index of front.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::validIndex().
|
inlineprivate |
Double the capacity of the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::capacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeL2.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushBack(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushFront().
|
inlineprivate |
True if there is no free capacity left.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask.
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushBack(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushFront().
|
inline |
Look up an element in the queue by a fixed index.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Look up an element in the queue by a fixed index.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Removes the front from the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset.
|
inline |
Adds a new element to the back of the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::grow(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::noCapacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Adds a new element to the front of the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::grow(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::noCapacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage.
|
inline |
Removes all entries from the queue, recycles indices and starts from zero.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift.
|
inlineprivate |
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backOffset, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::count(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontOffset, Cogs::isPowerOfTwo(), Cogs::N, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::offsetToFixedIndexShift, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeL2, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeMask, Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::storage, and Cogs::Memory::TypedBuffer< T >::swap().
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::grow(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::shrink().
|
inline |
Reduce capacity to the minimum needed to preserve the contents.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::count(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize(), Cogs::roundUpToPowerOfTwoShift(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::sizeL2.
|
inline |
Check if a fixed index is valid, that is, refers to an element in the queue.
References Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex().
|
private |
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::back(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::clear(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::count(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::noCapacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushBack(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::reset(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize().
|
private |
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::clear(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::count(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::front(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::noCapacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::popFront(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushFront(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::reset(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize().
|
private |
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::backIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::clear(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::frontIndex(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::reset(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize().
|
private |
|
private |
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::back(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::capacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::count(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::empty(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::front(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::noCapacity(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushBack(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushFront(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize().
|
private |
Referenced by Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::back(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::FixedIndexQueue(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::front(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::operator[](), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushBack(), Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::pushFront(), and Cogs::Collections::FixedIndexQueue< Element, IndexBaseType >::resize().