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