3 #include "../../DCS_Network/include/internal.h" 7 #include <condition_variable> 39 #pragma warning( push ) 40 #pragma warning( disable : 4251 ) 55 std::unique_lock<std::mutex> lock(m);
62 Type copy = q.front();
69 void push(
const Type& value)
71 std::unique_lock<std::mutex> lock(m);
84 std::unique_lock<std::mutex> lock(m);
85 int s = (int)q.size();
93 std::condition_variable c;
105 buffer =
new u8[buffer_size];
106 internal_buff_size = 0;
107 internal_buff_max_size = buffer_size;
108 ntf_unblock.store(
false);
113 internal_buff_size = 0;
114 internal_buff_max_size = 0;
117 void addBytes(
u8* data,
u64 size)
119 std::unique_lock<std::mutex> lock(m);
121 c.wait(lock, [&] {
return internal_buff_size + size <= internal_buff_max_size; });
123 memcpy(buffer + internal_buff_size, data, size);
124 internal_buff_size += size;
130 u64 fetchNextMsg(
u8* buffer_dst)
132 std::unique_lock<std::mutex> lock(m);
134 c.wait(lock, [&] {
return (internal_buff_size >=
sizeof(
i32) || ntf_unblock.load()); });
136 if (ntf_unblock.load())
142 memcpy(&to_read, buffer,
sizeof(
i32));
143 const i32 packet_size = to_read +
sizeof(
i32);
145 c.wait(lock, [&] {
return packet_size <= internal_buff_size; });
147 memcpy(buffer_dst, buffer +
sizeof(
i32), to_read);
148 internal_buff_size -= packet_size;
150 if (internal_buff_size > 0)
151 memmove(buffer, buffer + packet_size, internal_buff_size);
161 std::unique_lock<std::mutex> lock(m);
162 u64 ibs = internal_buff_size;
167 void notify_unblock()
169 ntf_unblock.store(
true);
173 void notify_restart()
176 internal_buff_size = 0;
177 buffer =
new u8[internal_buff_max_size];
178 ntf_unblock.store(
false);
183 u64 internal_buff_size;
184 u64 internal_buff_max_size;
186 std::atomic<bool> ntf_unblock;
188 std::condition_variable c;
190 #pragma warning( pop ) 193 constexpr
auto toUnderlyingType(E e)
195 return static_cast<typename std::underlying_type<E>::type
>(e);
Container for all the exported symbols that fall in the Utils category.
Definition: internal.h:100
Definition: internal.h:152
unsigned short u16
Equivalent to uint_16t.
Definition: DCS_ModuleUtils.h:56
void * GenericHandle
A generic opaque handle that is only meaningful for the API.
Definition: DCS_ModuleUtils.h:66
signed long i32
Equivalent to int_32t.
Definition: DCS_ModuleUtils.h:53
Definition: registry.h:70
Definition: internal.h:46
#define DCS_INTERNAL_TEST
Defines the export interface acessible via the dll-interface applicable for internal functions only...
Definition: exports.h:137
unsigned long long u64
Equivalent to uint_64t.
Definition: DCS_ModuleUtils.h:52
unsigned char u8
Equivalent to uint_8t.
Definition: DCS_ModuleUtils.h:58