OpenTwin 0.1
OpenTwin
 
Loading...
Searching...
No Matches
Queue.h
Go to the documentation of this file.
1
4// ###########################################################################################################################################################################################################################################################################################################################
5
6#pragma once
7
8// OpenTwin header
10#include "OTCore/Flags.h"
11
12// std header
13#include <list>
14
15#pragma warning (disable:4251)
16
17namespace ot {
18
19 class __declspec(dllexport) QueueDestroyableObject {
20 public:
22 enum CleanupFlag {
23 DeleteAtEnd = 0x00,
24 DeleteAfter = 0x01,
25 NoDelete = 0x03,
26 Multiuse = 0x04
27 };
28 typedef Flags<CleanupFlag> CleanupFlags;
29
30 QueueDestroyableObject() : m_cleanupFlags(DeleteAtEnd) {};
31 QueueDestroyableObject(CleanupFlag _cleanupFlags) : m_cleanupFlags(_cleanupFlags) {};
32 virtual ~QueueDestroyableObject() {};
33
34 void setCleanupFlag(CleanupFlag _flag, bool _active = true) { m_cleanupFlags.setFlag(_flag, _active); };
35 void setCleanupFlags(const CleanupFlags& _flags) { m_cleanupFlags = _flags; };
36 const CleanupFlags& cleanupFlags(void) const { return m_cleanupFlags; };
37
38 private:
39 CleanupFlags m_cleanupFlags;
40
41 QueueDestroyableObject(const QueueDestroyableObject&) = delete;
42 QueueDestroyableObject& operator = (const QueueDestroyableObject&) = delete;
43 };
44
45 // ###########################################################################################################################################################################################################################################################################################################################
46
47 // ###########################################################################################################################################################################################################################################################################################################################
48
49 // ###########################################################################################################################################################################################################################################################################################################################
50
51 class __declspec(dllexport) QueueData : public QueueDestroyableObject {
52 public:
53 QueueData(CleanupFlag _cleanupFlags = DeleteAtEnd) : QueueDestroyableObject(_cleanupFlags) {};
54 virtual ~QueueData() {};
55
56 private:
57
58 QueueData(const QueueData&) = delete;
59 QueueData& operator = (const QueueData&) = delete;
60 };
61
62 // ###########################################################################################################################################################################################################################################################################################################################
63
64 // ###########################################################################################################################################################################################################################################################################################################################
65
66 // ###########################################################################################################################################################################################################################################################################################################################
67
68 class AbstractQueue;
69
70 class __declspec(dllexport) QueueObject : public QueueDestroyableObject {
71 public:
73 enum QueueResultFlag {
74 Ok = 0x00,
75 JobFailed = 0x01,
76 Requeue = 0x02,
77 CancelQueue = 0x04,
78 FinishQueue = 0x08
79 };
80 typedef ot::Flags<QueueObject::QueueResultFlag> QueueResultFlags;
81
82 QueueObject(CleanupFlag _cleanupFlags = DeleteAtEnd) : QueueDestroyableObject(_cleanupFlags) {};
83 virtual ~QueueObject() {};
84
87 virtual QueueResultFlags activateFromQueue(AbstractQueue* _queue, QueueData* _args) = 0;
88
89 private:
90 QueueObject(const QueueObject&) = delete;
91 QueueObject& operator = (const QueueObject&) = delete;
92 };
93}
94
95OT_ADD_FLAG_FUNCTIONS(ot::QueueDestroyableObject::CleanupFlag)
96OT_ADD_FLAG_FUNCTIONS(ot::QueueObject::QueueResultFlag)
97
98namespace ot {
99
100 // ###########################################################################################################################################################################################################################################################################################################################
101
102 // ###########################################################################################################################################################################################################################################################################################################################
103
104 // ###########################################################################################################################################################################################################################################################################################################################
105
106 class __declspec(dllexport) AbstractQueue {
107 public:
108 AbstractQueue() {};
109 virtual ~AbstractQueue() {};
110
114 virtual void queue(QueueObject* _obj, QueueData * _args = (QueueData *)nullptr) noexcept = 0;
115
119 virtual void queueNext(QueueObject* _obj, QueueData* _args = (QueueData*)nullptr) noexcept = 0;
120
122 virtual bool executeQueue(void) = 0;
123
124 private:
125 AbstractQueue(const AbstractQueue&) = delete;
126 AbstractQueue& operator = (const AbstractQueue&) = delete;
127 };
128
129 // ###########################################################################################################################################################################################################################################################################################################################
130
131 // ###########################################################################################################################################################################################################################################################################################################################
132
133 // ###########################################################################################################################################################################################################################################################################################################################
134
135 class OT_CORE_API_EXPORT SimpleQueue : public AbstractQueue {
136 public:
137 SimpleQueue();
138 virtual ~SimpleQueue();
139
143 virtual void queue(QueueObject* _obj, QueueData* _arg = (QueueData*)nullptr) noexcept override;
144
148 virtual void queueNext(QueueObject* _obj, QueueData* _arg = (QueueData*)nullptr) noexcept override;
149
151 virtual bool executeQueue(void) override;
152
154 void clearQueue(void);
155
156 protected:
157
160 void checkAndDestroy(QueueDestroyableObject* _obj);
161
162 private:
163 void clearGarbage(void);
164
165 std::list<std::pair<QueueObject*, QueueData*>> m_queue;
166 std::list<std::pair<QueueDestroyableObject*, bool>> m_garbage;
167 unsigned int m_garbageCounter;
168
169 SimpleQueue(const SimpleQueue&) = delete;
170 SimpleQueue& operator = (const SimpleQueue&) = delete;
171 };
172
173}
#define OT_CORE_API_EXPORT
Dll import.
Definition CoreAPIExport.h:8
#define OT_ADD_FLAG_FUNCTIONS(___enumName)
Will add the default bitwise operations for the provided private 32/64 bit bitfield....
Definition Flags.h:129
The Flags class is a wrapper around a enum that allows bitwise operations (flags)....
Definition Flags.h:214
Definition Queue.h:135
Definition Connector.h:8