Initial Commit

This commit is contained in:
Lorenzooone
2024-04-14 19:31:08 +02:00
parent f71369e9b0
commit 3d4f2527a7
20 changed files with 2826 additions and 0 deletions

73
source/utils.cpp Executable file
View File

@@ -0,0 +1,73 @@
#include "utils.hpp"
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <queue>
bool is_big_endian(void) {
union {
uint32_t i;
char c[4];
} value = {0x01020304};
return value.c[0] == 1;
}
//============================================================================
ConsumerMutex::ConsumerMutex() {
count = 0;
}
void ConsumerMutex::lock() {
access_mutex.lock();
bool success = false;
while(!success) {
if(count) {
count--;
success = true;
}
else {
condition.wait(access_mutex);
}
}
access_mutex.unlock();
}
bool ConsumerMutex::timed_lock() {
access_mutex.lock();
bool success = false;
while(!success) {
if(count) {
count--;
success = true;
}
else {
auto result = condition.wait_for(access_mutex, max_timed_wait);
if((result == std::cv_status::timeout) && (!count))
break;
}
}
access_mutex.unlock();
return success;
}
bool ConsumerMutex::try_lock() {
access_mutex.lock();
bool success = false;
if(count) {
count--;
success = true;
}
access_mutex.unlock();
return success;
}
void ConsumerMutex::unlock() {
access_mutex.lock();
// Enforce 1 max
count = 1;
condition.notify_one();
access_mutex.unlock();
}