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
|