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 35 : inline QueueNode<T>::QueueNode() : _next(reinterpret_cast<T*>(1U)) 33 35 : {} 34 : 35 : template<typename T> 36 43 : inline bool QueueNode<T>::isEnqueued() const 37 : { 38 43 : return _next != reinterpret_cast<T*>(1U); 39 : } 40 : 41 : template<typename T> 42 7 : inline T* QueueNode<T>::getNext() const 43 : { 44 7 : return _next; 45 : } 46 : 47 : template<typename T> 48 14 : inline void QueueNode<T>::setNext(T* const next) 49 : { 50 14 : _next = next; 51 14 : } 52 : 53 : template<typename T> 54 24 : inline void QueueNode<T>::enqueue() 55 : { 56 24 : _next = nullptr; 57 24 : } 58 : 59 : template<typename T> 60 21 : inline T* QueueNode<T>::dequeue() 61 : { 62 21 : T* const prevNext = _next; 63 21 : _next = reinterpret_cast<T*>(1U); 64 21 : return prevNext; 65 : } 66 : 67 : } // namespace async