Skip to content

Commit 1b27d5e

Browse files
committed
correcting impl for generic class inside the .h file
1 parent a10f33d commit 1b27d5e

File tree

4 files changed

+123
-145
lines changed

4 files changed

+123
-145
lines changed

src/dds.net-connector-cpp.lib/connector/src/internal/inc/sync_queue.h

Lines changed: 123 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
#ifndef DDS_DOT_NET_CONNECTOR_SRC_INTERNAL_INC_SYNC_QUEUE_H_
22
#define DDS_DOT_NET_CONNECTOR_SRC_INTERNAL_INC_SYNC_QUEUE_H_
33

4+
#include "inc/error.h"
5+
46
#include "src/internal/inc/sync_queue_reader.h"
57
#include "src/internal/inc/sync_queue_writer.h"
68

9+
#include "src/internal/inc/macros.h"
10+
711
#include <mutex>
812

13+
#include <memory.h>
14+
15+
16+
#define SLEEP_TIME_MS_WHEN_DATA_CANNOT_BE_DEQUEUED 5
17+
#define SLEEP_TIME_MS_WHEN_DATA_CANNOT_BE_ENQUEUED 5
18+
919

1020
namespace dds {
1121
namespace net {
@@ -16,14 +26,121 @@ namespace dds {
1626
class SyncQueue : public SyncQueueReader<T>, public SyncQueueWriter<T> {
1727

1828
public:
19-
SyncQueue(int queueSize = 100);
29+
SyncQueue(int queueSize = 100)
30+
{
31+
this->queueSize = queueSize;
32+
33+
if (queueSize <= 0)
34+
{
35+
throw Error("Invalid queue size - the size must be a positive number");
36+
}
37+
38+
queue = new T[queueSize];
39+
queueValidity = new bool[queueSize];
40+
41+
for (int i = 0; i < queueSize; i++)
42+
{
43+
queueValidity[i] = false;
44+
}
45+
46+
nextWriteIndex = 0;
47+
nextReadIndex = 0;
48+
}
49+
50+
bool canDequeue() override
51+
{
52+
bool ret = false;
53+
54+
lock.lock();
55+
56+
ret = queueValidity[nextReadIndex];
57+
58+
lock.unlock();
59+
60+
return ret;
61+
}
62+
T dequeue() override
63+
{
64+
while (true)
65+
{
66+
lock.lock();
67+
68+
if (queueValidity[nextReadIndex] != false)
69+
{
70+
T data = queue[nextReadIndex];
71+
queueValidity[nextReadIndex] = false;
72+
73+
nextReadIndex++;
74+
75+
if (nextReadIndex == queueSize)
76+
{
77+
nextReadIndex = 0;
78+
}
79+
80+
lock.unlock();
81+
return data;
82+
}
83+
84+
lock.unlock();
85+
86+
sleep_msec(SLEEP_TIME_MS_WHEN_DATA_CANNOT_BE_DEQUEUED);
87+
}
88+
}
89+
90+
bool canEnqueue() override
91+
{
92+
bool ret = false;
93+
94+
lock.lock();
95+
96+
ret = queueValidity[nextWriteIndex] == false;
97+
98+
lock.unlock();
99+
100+
return ret;
101+
}
102+
void enqueue(T data) override
103+
{
104+
while (true)
105+
{
106+
lock.lock();
107+
108+
if (queueValidity[nextWriteIndex] == false)
109+
{
110+
queue[nextWriteIndex] = data;
111+
queueValidity[nextWriteIndex] = true;
112+
113+
nextWriteIndex++;
114+
115+
if (nextWriteIndex == queueSize)
116+
{
117+
nextWriteIndex = 0;
118+
}
119+
120+
lock.unlock();
121+
return;
122+
}
123+
124+
lock.unlock();
125+
126+
sleep_msec(SLEEP_TIME_MS_WHEN_DATA_CANNOT_BE_ENQUEUED);
127+
}
128+
}
129+
130+
void clear()
131+
{
132+
lock.lock();
133+
134+
for (int i = 0; i < queueSize; i++)
135+
{
136+
queueValidity[i] = false;
137+
}
20138

21-
bool canDequeue() override;
22-
T dequeue() override;
23-
bool canEnqueue() override;
24-
void enqueue(T data) override;
139+
nextWriteIndex = 0;
140+
nextReadIndex = 0;
25141

26-
void clear();
142+
lock.unlock();
143+
}
27144

28145

29146
private:

src/dds.net-connector-cpp.lib/connector/src/internal/src/sync_queue.cpp

Lines changed: 0 additions & 135 deletions
This file was deleted.

src/dds.net-connector-cpp.lib/dds.net-connector-cpp.lib.vcxproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,6 @@
192192
<ClCompile Include="connector\src\internal\src\network_client.cpp" />
193193
<ClCompile Include="connector\src\internal\src\packet_preprocessor.cpp" />
194194
<ClCompile Include="connector\src\internal\src\string_helper.cpp" />
195-
<ClCompile Include="connector\src\internal\src\sync_queue.cpp" />
196195
<ClCompile Include="connector\src\internal\src\variables\base_primitive.cpp" />
197196
<ClCompile Include="connector\src\internal\src\variables\enc_dec_primitive.cpp" />
198197
<ClCompile Include="connector\src\internal\src\variables\var_prim_boolean.cpp" />

src/dds.net-connector-cpp.lib/dds.net-connector-cpp.lib.vcxproj.filters

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,9 +137,6 @@
137137
<ClCompile Include="connector\src\internal\src\easy_thread.cpp">
138138
<Filter>Source Files</Filter>
139139
</ClCompile>
140-
<ClCompile Include="connector\src\internal\src\sync_queue.cpp">
141-
<Filter>Source Files</Filter>
142-
</ClCompile>
143140
<ClCompile Include="connector\src\internal\src\buffer_manager.cpp">
144141
<Filter>Source Files</Filter>
145142
</ClCompile>

0 commit comments

Comments
 (0)