Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : /** 4 : * \ingroup async 5 : */ 6 : #pragma once 7 : 8 : namespace async 9 : { 10 : template<typename T> 11 : class QueueNode 12 : { 13 : public: 14 : QueueNode(); 15 : 16 : bool isEnqueued() const; 17 : 18 : T* getNext() const; 19 : void setNext(T* next); 20 : 21 : void enqueue(); 22 : T* dequeue(); 23 : 24 : private: 25 : T* _next; 26 : }; 27 : 28 : /** 29 : * Inline implementations. 30 : */ 31 : template<typename T> 32 33 : inline QueueNode<T>::QueueNode() : _next(reinterpret_cast<T*>(1U)) 33 : {} 34 : 35 : template<typename T> 36 29 : inline bool QueueNode<T>::isEnqueued() const 37 : { 38 29 : return _next != reinterpret_cast<T*>(1U); 39 : } 40 : 41 : template<typename T> 42 2 : inline T* QueueNode<T>::getNext() const 43 : { 44 2 : return _next; 45 : } 46 : 47 : template<typename T> 48 11 : inline void QueueNode<T>::setNext(T* const next) 49 : { 50 10 : _next = next; 51 3 : } 52 : 53 : template<typename T> 54 21 : inline void QueueNode<T>::enqueue() 55 : { 56 22 : _next = nullptr; 57 : } 58 : 59 : template<typename T> 60 19 : inline T* QueueNode<T>::dequeue() 61 : { 62 19 : T* const prevNext = _next; 63 21 : _next = reinterpret_cast<T*>(1U); 64 : return prevNext; 65 : } 66 : 67 : } // namespace async