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