|
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().